커뮤니티

안녕하세요?

프로필 이미지
상중하
2018-10-19 10:20:51
261
글번호 122824
답변완료
안녕하세요 아래수식1은 예전에 작성 해주신 수식입니다. 익절을 지정하면 한파동에 여러번 진입을 하는데요 한파동에 한번만 진입되도록 수정 부탁드립니다. 수식2 번도 한파동에 한번만 진입되도록 수정 부탁드립니다. (죄송합니다. 한건만 질문을 드려야 하는데 직장인 이다 보니 주말에 검증을 하려다보니 두건을 동시에 질문을 드렸습니다. 바쁘시더라도 같이 수정 부탁드립니다. 수고하세요 그리고 감사합니다.) 수식1. Input: length(10); Var : j(0),jj(0),T(0); var : 최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),TL1(0); Array:HH[10,4](0),LL[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime If Index == 0 Then { HH[1,1] = H; LL[1,1] = L; } Condition1 = Highest(H,length) == H and 최종고가 <> H; Condition2 = Lowest (L,length) == L and 최종저가 <> L; 처리구분 = ""; If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생 { If 최종꼭지점 == "저점" Then { If LL[1,1] > L Then 처리구분 = "저점처리"; Else 처리구분 = "고점처리"; } Else If 최종꼭지점 == "고점" Then { If HH[1,1] < H Then 처리구분 = "고점처리"; Else 처리구분 = "저점처리"; } } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; #==========================================# If 처리구분 == "고점처리" Then { T = 1; 최종고가 = H; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { For j = 10 DownTo 2 { For jj = 1 To 4 { HH[j,jj] = HH[j-1,jj]; } } HH[1,1] = H; HH[1,2] = Index; HH[1,3] = sDate; HH[1,4] = sTime; TL1 = TL_New(LL[1,3],LL[1,4],LL[1,1],HH[1,3],HH[1,4],HH[1,1]); TL_SetSize(TL1,1); TL_SetColor(TL1,RED); } Else If HH[1,1] < H Then // 1번 고점보다 높은 고가 출현 { HH[1,1] = H; HH[1,2] = Index; HH[1,3] = sDate; HH[1,4] = sTime; TL_SetEnd(TL1,HH[1,3],HH[1,4],HH[1,1]); // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 } 최종꼭지점 = "고점"; } #==========================================# If 처리구분 == "저점처리" Then { T = -1; 최종저가 = L; If 최종꼭지점 == "고점" then { For j = 10 DownTo 2 { For jj = 1 To 4 { LL[j,jj] = LL[j-1,jj]; } } LL[1,1] = L; LL[1,2] = Index; LL[1,3] = sDate; LL[1,4] = sTime; TL1 = TL_New(HH[1,3],HH[1,4],HH[1,1],LL[1,3],LL[1,4],LL[1,1]); TL_SetSize(TL1,1); TL_SetColor(TL1,BLUE); } Else If LL[1,1] > L then { LL[1,1] = L; LL[1,2] = Index; LL[1,3] = sDate; LL[1,4] = sTime; TL_SetEnd(TL1,LL[1,3],LL[1,4],LL[1,1]); } 최종꼭지점 = "저점"; } if T == 1 and LL[1,1] > LL[2,1] Then buy("b",AtStop,HH[2,1]+PriceScale*1); if T == -1 and HH[1,1] > HH[2,1] Then sell("s",AtStop,LL[2,1]-PriceScale*1); if MarketPosition == 1 Then ExitLong("bx",AtStop,LL[1,1][BarsSinceEntry]); if MarketPosition == -1 Then ExitShort("sx",AtStop,HH[1,1][BarsSinceEntry]); 수식2 (사용자함수: HiLoLineZigZag) #==========================================# # 사용자함수 : 고저라인 지그재그 파동 # 버 전 : 1.2 # 작 성 자 : 수식지왕 #==========================================# Input:Length(NumericSimple),useCLprice(NumericSimple), oHiZZ[MaxSize1,MaxSize2](NumericArrayRef), // 열번호 1:가격,2:Index,3:sDate,4:sTime oLoZZ[MaxSize3,MaxSize4](NumericArrayRef), oTL_NewBit(NumericRef); // 1:NewLine 2:SetEndLine Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""); #==========================================# HH = IFF(useCLprice==1,C,H); LL = IFF(useCLprice==1,C,L); If Index == 0 Then { oHiZZ[1,1] = HH; oLoZZ[1,1] = LL; } Condition1 = Highest(HH,length) == HH and 최종고가 <> HH; Condition2 = Lowest (LL,length) == LL and 최종저가 <> LL; 처리구분 = ""; If Condition1 and Condition2 Then { // 기간고점과 기간저점 동시 발생 If oHiZZ[1,1] < HH and oLoZZ[1,1] > LL Then { // 기존의 파동을 벗어난 경우 If HH - oHiZZ[1,1] > oLoZZ[1,1] - LL Then // 많이 벗어난 쪽으로 처리 처리구분 = "고점처리"; Else If HH - oHiZZ[1,1] < oLoZZ[1,1] - LL Then 처리구분 = "저점처리"; Else If 최종꼭지점 == "저점" Then // 벗어난 정도가 동일하면 지그재그 순서대로 처리구분 = "고점처리"; Else 처리구분 = "저점처리"; } Else If oLoZZ[1,1] > LL Then 처리구분 = "저점처리"; Else If oHiZZ[1,1] < HH Then 처리구분 = "고점처리"; Else If 최종꼭지점 == "저점" Then 처리구분 = "고점처리"; Else 처리구분 = "저점처리"; } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; oTL_NewBit = 0; #==========================================# If 처리구분 == "고점처리" Then { 최종고가 = HH; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { For j = 10 DownTo 2 { For jj = 1 To 4 { oHiZZ[j,jj] = oHiZZ[j-1,jj]; } } oHiZZ[1,1] = HH; oHiZZ[1,2] = Index; oHiZZ[1,3] = sDate; oHiZZ[1,4] = sTime; oTL_NewBit = 1; } Else If oHiZZ[1,1] < HH Then { // 1번 고점보다 높은 고가 출현 oHiZZ[1,1] = HH; oHiZZ[1,2] = Index; oHiZZ[1,3] = sDate; oHiZZ[1,4] = sTime; oTL_NewBit = 2; } 최종꼭지점 = "고점"; } #==========================================# If 처리구분 == "저점처리" Then { 최종저가 = LL; If 최종꼭지점 == "고점" then { For j = 10 DownTo 2 { For jj = 1 To 4 { oLoZZ[j,jj] = oLoZZ[j-1,jj]; } } oLoZZ[1,1] = LL; oLoZZ[1,2] = Index; oLoZZ[1,3] = sDate; oLoZZ[1,4] = sTime; oTL_NewBit = 1; } Else If oLoZZ[1,1] > LL then { oLoZZ[1,1] = LL; oLoZZ[1,2] = Index; oLoZZ[1,3] = sDate; oLoZZ[1,4] = sTime; oTL_NewBit = 2; } 최종꼭지점 = "저점"; } If 최종꼭지점 == "고점" Then HiLoLineZigZag = 1; Else If 최종꼭지점 == "저점" Then HiLoLineZigZag = -1; Else HiLoLineZigZag = 0; (시스템 수식) Input:length(10); Var:종가사용여부(0), TL_NewBit(0); Array:고[10,4](0),저[10,4](0); Value1 = HiLoLineZigZag(length,종가사용여부,고,저,TL_NewBit); If Value1 == 1 Then // 고점 Buy("B",AtStop,고[2,1]); Else If Value1 == -1 Then // 저점 Sell("S",AtStop,저[2,1]);
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2018-10-19 11:46:01

안녕하세요 예스스탁입니다. 1. Input: length(10); Var : j(0),jj(0),T(0); var : 최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),TL1(0); Array:HH[10,4](0),LL[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime If Index == 0 Then { HH[1,1] = H; LL[1,1] = L; } Condition1 = Highest(H,length) == H and 최종고가 <> H; Condition2 = Lowest (L,length) == L and 최종저가 <> L; 처리구분 = ""; If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생 { If 최종꼭지점 == "저점" Then { If LL[1,1] > L Then 처리구분 = "저점처리"; Else 처리구분 = "고점처리"; } Else If 최종꼭지점 == "고점" Then { If HH[1,1] < H Then 처리구분 = "고점처리"; Else 처리구분 = "저점처리"; } } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; #==========================================# If 처리구분 == "고점처리" Then { T = 1; 최종고가 = H; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { For j = 10 DownTo 2 { For jj = 1 To 4 { HH[j,jj] = HH[j-1,jj]; } } HH[1,1] = H; HH[1,2] = Index; HH[1,3] = sDate; HH[1,4] = sTime; TL1 = TL_New(LL[1,3],LL[1,4],LL[1,1],HH[1,3],HH[1,4],HH[1,1]); TL_SetSize(TL1,1); TL_SetColor(TL1,RED); } Else If HH[1,1] < H Then // 1번 고점보다 높은 고가 출현 { HH[1,1] = H; HH[1,2] = Index; HH[1,3] = sDate; HH[1,4] = sTime; TL_SetEnd(TL1,HH[1,3],HH[1,4],HH[1,1]); // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 } 최종꼭지점 = "고점"; } #==========================================# If 처리구분 == "저점처리" Then { T = -1; 최종저가 = L; If 최종꼭지점 == "고점" then { For j = 10 DownTo 2 { For jj = 1 To 4 { LL[j,jj] = LL[j-1,jj]; } } LL[1,1] = L; LL[1,2] = Index; LL[1,3] = sDate; LL[1,4] = sTime; TL1 = TL_New(HH[1,3],HH[1,4],HH[1,1],LL[1,3],LL[1,4],LL[1,1]); TL_SetSize(TL1,1); TL_SetColor(TL1,BLUE); } Else If LL[1,1] > L then { LL[1,1] = L; LL[1,2] = Index; LL[1,3] = sDate; LL[1,4] = sTime; TL_SetEnd(TL1,LL[1,3],LL[1,4],LL[1,1]); } 최종꼭지점 = "저점"; } if T == 1 and T != T[1] Then Condition1 = true; if T == -1 and T != T[1] Then Condition2 = true; if MarketPosition == 1 Then Condition1 = false; if MarketPosition == -1 Then Condition2 = false; if Condition1 == true and T == 1 and LL[1,1] > LL[2,1] Then buy("b",AtStop,HH[2,1]+PriceScale*1); if Condition2 == true and T == -1 and HH[1,1] > HH[2,1] Then sell("s",AtStop,LL[2,1]-PriceScale*1); if MarketPosition == 1 Then ExitLong("bx",AtStop,LL[1,1][BarsSinceEntry]); if MarketPosition == -1 Then ExitShort("sx",AtStop,HH[1,1][BarsSinceEntry]); 2 Input:length(10); Var:종가사용여부(0), TL_NewBit(0); Array:고[10,4](0),저[10,4](0); Value1 = HiLoLineZigZag(length,종가사용여부,고,저,TL_NewBit); if Value1 == 1 and Value1 != Value1[1] Then Condition1 = true; if Value1 == -1 and Value1 != Value1[1] Then Condition2 = true; if MarketPosition == 1 Then Condition1 = false; if MarketPosition == -1 Then Condition2 = false; If Value1 == 1 and Condition1 == true Then // 고점 Buy("B",AtStop,고[2,1]); If Value1 == -1 and Condition2 == true Then // 저점 Sell("S",AtStop,저[2,1]); 즐거운 하루되세요 > 상중하 님이 쓴 글입니다. > 제목 : 안녕하세요? > 안녕하세요 아래수식1은 예전에 작성 해주신 수식입니다. 익절을 지정하면 한파동에 여러번 진입을 하는데요 한파동에 한번만 진입되도록 수정 부탁드립니다. 수식2 번도 한파동에 한번만 진입되도록 수정 부탁드립니다. (죄송합니다. 한건만 질문을 드려야 하는데 직장인 이다 보니 주말에 검증을 하려다보니 두건을 동시에 질문을 드렸습니다. 바쁘시더라도 같이 수정 부탁드립니다. 수고하세요 그리고 감사합니다.) 수식1. Input: length(10); Var : j(0),jj(0),T(0); var : 최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),TL1(0); Array:HH[10,4](0),LL[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime If Index == 0 Then { HH[1,1] = H; LL[1,1] = L; } Condition1 = Highest(H,length) == H and 최종고가 <> H; Condition2 = Lowest (L,length) == L and 최종저가 <> L; 처리구분 = ""; If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생 { If 최종꼭지점 == "저점" Then { If LL[1,1] > L Then 처리구분 = "저점처리"; Else 처리구분 = "고점처리"; } Else If 최종꼭지점 == "고점" Then { If HH[1,1] < H Then 처리구분 = "고점처리"; Else 처리구분 = "저점처리"; } } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; #==========================================# If 처리구분 == "고점처리" Then { T = 1; 최종고가 = H; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { For j = 10 DownTo 2 { For jj = 1 To 4 { HH[j,jj] = HH[j-1,jj]; } } HH[1,1] = H; HH[1,2] = Index; HH[1,3] = sDate; HH[1,4] = sTime; TL1 = TL_New(LL[1,3],LL[1,4],LL[1,1],HH[1,3],HH[1,4],HH[1,1]); TL_SetSize(TL1,1); TL_SetColor(TL1,RED); } Else If HH[1,1] < H Then // 1번 고점보다 높은 고가 출현 { HH[1,1] = H; HH[1,2] = Index; HH[1,3] = sDate; HH[1,4] = sTime; TL_SetEnd(TL1,HH[1,3],HH[1,4],HH[1,1]); // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 } 최종꼭지점 = "고점"; } #==========================================# If 처리구분 == "저점처리" Then { T = -1; 최종저가 = L; If 최종꼭지점 == "고점" then { For j = 10 DownTo 2 { For jj = 1 To 4 { LL[j,jj] = LL[j-1,jj]; } } LL[1,1] = L; LL[1,2] = Index; LL[1,3] = sDate; LL[1,4] = sTime; TL1 = TL_New(HH[1,3],HH[1,4],HH[1,1],LL[1,3],LL[1,4],LL[1,1]); TL_SetSize(TL1,1); TL_SetColor(TL1,BLUE); } Else If LL[1,1] > L then { LL[1,1] = L; LL[1,2] = Index; LL[1,3] = sDate; LL[1,4] = sTime; TL_SetEnd(TL1,LL[1,3],LL[1,4],LL[1,1]); } 최종꼭지점 = "저점"; } if T == 1 and LL[1,1] > LL[2,1] Then buy("b",AtStop,HH[2,1]+PriceScale*1); if T == -1 and HH[1,1] > HH[2,1] Then sell("s",AtStop,LL[2,1]-PriceScale*1); if MarketPosition == 1 Then ExitLong("bx",AtStop,LL[1,1][BarsSinceEntry]); if MarketPosition == -1 Then ExitShort("sx",AtStop,HH[1,1][BarsSinceEntry]); 수식2 (사용자함수: HiLoLineZigZag) #==========================================# # 사용자함수 : 고저라인 지그재그 파동 # 버 전 : 1.2 # 작 성 자 : 수식지왕 #==========================================# Input:Length(NumericSimple),useCLprice(NumericSimple), oHiZZ[MaxSize1,MaxSize2](NumericArrayRef), // 열번호 1:가격,2:Index,3:sDate,4:sTime oLoZZ[MaxSize3,MaxSize4](NumericArrayRef), oTL_NewBit(NumericRef); // 1:NewLine 2:SetEndLine Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""); #==========================================# HH = IFF(useCLprice==1,C,H); LL = IFF(useCLprice==1,C,L); If Index == 0 Then { oHiZZ[1,1] = HH; oLoZZ[1,1] = LL; } Condition1 = Highest(HH,length) == HH and 최종고가 <> HH; Condition2 = Lowest (LL,length) == LL and 최종저가 <> LL; 처리구분 = ""; If Condition1 and Condition2 Then { // 기간고점과 기간저점 동시 발생 If oHiZZ[1,1] < HH and oLoZZ[1,1] > LL Then { // 기존의 파동을 벗어난 경우 If HH - oHiZZ[1,1] > oLoZZ[1,1] - LL Then // 많이 벗어난 쪽으로 처리 처리구분 = "고점처리"; Else If HH - oHiZZ[1,1] < oLoZZ[1,1] - LL Then 처리구분 = "저점처리"; Else If 최종꼭지점 == "저점" Then // 벗어난 정도가 동일하면 지그재그 순서대로 처리구분 = "고점처리"; Else 처리구분 = "저점처리"; } Else If oLoZZ[1,1] > LL Then 처리구분 = "저점처리"; Else If oHiZZ[1,1] < HH Then 처리구분 = "고점처리"; Else If 최종꼭지점 == "저점" Then 처리구분 = "고점처리"; Else 처리구분 = "저점처리"; } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; oTL_NewBit = 0; #==========================================# If 처리구분 == "고점처리" Then { 최종고가 = HH; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { For j = 10 DownTo 2 { For jj = 1 To 4 { oHiZZ[j,jj] = oHiZZ[j-1,jj]; } } oHiZZ[1,1] = HH; oHiZZ[1,2] = Index; oHiZZ[1,3] = sDate; oHiZZ[1,4] = sTime; oTL_NewBit = 1; } Else If oHiZZ[1,1] < HH Then { // 1번 고점보다 높은 고가 출현 oHiZZ[1,1] = HH; oHiZZ[1,2] = Index; oHiZZ[1,3] = sDate; oHiZZ[1,4] = sTime; oTL_NewBit = 2; } 최종꼭지점 = "고점"; } #==========================================# If 처리구분 == "저점처리" Then { 최종저가 = LL; If 최종꼭지점 == "고점" then { For j = 10 DownTo 2 { For jj = 1 To 4 { oLoZZ[j,jj] = oLoZZ[j-1,jj]; } } oLoZZ[1,1] = LL; oLoZZ[1,2] = Index; oLoZZ[1,3] = sDate; oLoZZ[1,4] = sTime; oTL_NewBit = 1; } Else If oLoZZ[1,1] > LL then { oLoZZ[1,1] = LL; oLoZZ[1,2] = Index; oLoZZ[1,3] = sDate; oLoZZ[1,4] = sTime; oTL_NewBit = 2; } 최종꼭지점 = "저점"; } If 최종꼭지점 == "고점" Then HiLoLineZigZag = 1; Else If 최종꼭지점 == "저점" Then HiLoLineZigZag = -1; Else HiLoLineZigZag = 0; (시스템 수식) Input:length(10); Var:종가사용여부(0), TL_NewBit(0); Array:고[10,4](0),저[10,4](0); Value1 = HiLoLineZigZag(length,종가사용여부,고,저,TL_NewBit); If Value1 == 1 Then // 고점 Buy("B",AtStop,고[2,1]); Else If Value1 == -1 Then // 저점 Sell("S",AtStop,저[2,1]);