커뮤니티

수식 수정 및 추가 사항 부탁드립니다.

프로필 이미지
밤밤
2020-10-16 16:49:12
655
글번호 143170
답변완료

첨부 이미지

이미지내용 익절조건과 손절조건이 있는데도 같은 자리에서 진입청산하는 현상이 일어나는데 이건 버그인가요? 아래는 수식 수정 및 추가요청 입니다. <매수일때> 현재 조건이 양양음음- 종가상승양봉2개 종가하락음봉2개 연달아 나올시 이들 중 최고가봉을 기준봉으로 정하는 것인데 여기서 몇가지 봉의 조합을 더 추가로 넣고싶습니다. 순서대로 1 2 3 4 5 양양음양음 - (1양,2양 종가가 연달아 상승하여야 하고 3음,5음 종가 연달아 하락) 1 2 3 4 5 양음양음음 - (1양,3양 종가가 연달아 상승하여야 하고 4음,5음 종가 연달아 하락) 1 2 3 4 5 6 양음양음양음 - (1양,3양 종가가 연달아 상승하여야 하고 4음,6음 종가 연달아 하락) 봉의 순서와 조합만 추가일뿐 조건은 같습니다. 이들중 최고가봉을 기준봉으로 하고 그 이후 진입조건은 기존과 같습니다. 위에 조건들 중 먼저 만족되는 조건으로 매수진입 <매도일때> 기존 음음양양 에서 아래 더 추가 1 2 3 4 5 음음양음양 - (1음,2음 종가가 연달아 하락하여야하고 3양,5양 종가 연달아 상승) 1 2 3 4 5 음양음양양 - (1음,3음 종가가 연달아 하락하여야하고 4양,5양 종가 연달아 상승) 1 2 3 4 5 6 음양음양음양 - (1음,3음 종가가 연달아 하락하여야하고 4양,6양 종가 연달아 상승) 마찬가지로 이들봉중 최저가 봉이 기준봉이 되는 것입니다. 위에 조건들중 먼저 만족되는 조건으로 매도진입 아래 수식에서 수정 및 추가 부탁드립니다. input : StartTime(101500),EndTime(130000); var : Tcond(false); var : T(0),T1(0),P(0),N(0),B(False),S(False); var : HH(0),HL(0),HM(0),LL(0),LH(0),LM(0),cnt(0); if (sdate != sdate[1] and stime >= EndTime) or (sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then Tcond = False; if (sdate != sdate[1] and stime >= StartTime) or (sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then { Tcond = true; if EndTime < StartTime Then SetStopEndofday(0); } if EndTime > StartTime Then SetStopEndofday(EndTime); Else { if sDate != sDate[1] Then SetStopEndofday(EndTime); } if C > O Then T = 1; if C < O Then T = -1; if T != T[1] Then { T1 = T[1]; } if T == 1 and CountIf(C > O and C > C[1],2) == 2 Then { T = 2; P = Index[1]; if T1 == -2 Then { LL = L; LH = H; For cnt = 0 to Index-N { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; LM = (LL+LH)/2; } } } } if T == -1 and CountIf(C < O and C < C[1],2) == 2 Then { T = -2; N = Index[1]; if T1 == 2 Then { HH = H; HL = L; For cnt = 0 to Index-P { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; HM = (HH+HL)/2; } } } } if MarketPosition == 0 and HL > 0 and HH >= HL+PriceScale*12 and NextBarOpen < HL and Tcond == true Then { Buy("매수",AtStop,HL+PriceScale*3); ExitLong("매수익절.",AtLimit,HM); } if MarketPosition == 1 Then { ExitLong("매수익절",AtLimit,HM[BarsSinceEntry]); ExitLong("매수손절",AtStop,L[BarsSinceEntry+1]); } if MarketPosition == 0 and LH > 0 and LH >= LL+PriceScale*12 and NextBarOpen > LH and Tcond == true Then Sell("매도",AtStop,LH-PriceScale*3); ExitShort("매도익절.",AtLimit,LM); if MarketPosition == -1 Then { ExitShort("매도익절",AtLimit,LM[BarsSinceEntry]); ExitShort("매도손절",AtStop,H[BarsSinceEntry+1]); } 여기까지 버전1, 버전1에 한가지 더 추가하여 버전2와 함께 두가지로 답변부탁드립니다. 지금 현재는 새로운 시그널이 만들어지기전까지 같은 자리에서 계속 진입하여 청산하는데 버전2에서는 버전1에서 손절이든 익절이든 청산이되면 기존 시그널은 리셋하는 것으로 부탁드립니다. 버전1과 버전2 수식 따로해서 두가지로 답변 부탁드립니다.
시스템
답변 3
프로필 이미지

예스스탁 예스스탁 답변

2020-10-19 14:55:17

> 밤밤 님이 쓴 글입니다. > 제목 : 수식 수정 및 추가 사항 부탁드립니다. > 이미지내용 익절조건과 손절조건이 있는데도 같은 자리에서 진입청산하는 현상이 일어나는데 이건 버그인가요? 아래는 수식 수정 및 추가요청 입니다. <매수일때> 현재 조건이 양양음음- 종가상승양봉2개 종가하락음봉2개 연달아 나올시 이들 중 최고가봉을 기준봉으로 정하는 것인데 여기서 몇가지 봉의 조합을 더 추가로 넣고싶습니다. 순서대로 1 2 3 4 5 양양음양음 - (1양,2양 종가가 연달아 상승하여야 하고 3음,5음 종가 연달아 하락) 1 2 3 4 5 양음양음음 - (1양,3양 종가가 연달아 상승하여야 하고 4음,5음 종가 연달아 하락) 1 2 3 4 5 6 양음양음양음 - (1양,3양 종가가 연달아 상승하여야 하고 4음,6음 종가 연달아 하락) 봉의 순서와 조합만 추가일뿐 조건은 같습니다. 이들중 최고가봉을 기준봉으로 하고 그 이후 진입조건은 기존과 같습니다. 위에 조건들 중 먼저 만족되는 조건으로 매수진입 <매도일때> 기존 음음양양 에서 아래 더 추가 1 2 3 4 5 음음양음양 - (1음,2음 종가가 연달아 하락하여야하고 3양,5양 종가 연달아 상승) 1 2 3 4 5 음양음양양 - (1음,3음 종가가 연달아 하락하여야하고 4양,5양 종가 연달아 상승) 1 2 3 4 5 6 음양음양음양 - (1음,3음 종가가 연달아 하락하여야하고 4양,6양 종가 연달아 상승) 마찬가지로 이들봉중 최저가 봉이 기준봉이 되는 것입니다. 위에 조건들중 먼저 만족되는 조건으로 매도진입 아래 수식에서 수정 및 추가 부탁드립니다. input : StartTime(101500),EndTime(130000); var : Tcond(false); var : T(0),T1(0),P(0),N(0),B(False),S(False); var : HH(0),HL(0),HM(0),LL(0),LH(0),LM(0),cnt(0); if (sdate != sdate[1] and stime >= EndTime) or (sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then Tcond = False; if (sdate != sdate[1] and stime >= StartTime) or (sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then { Tcond = true; if EndTime < StartTime Then SetStopEndofday(0); } if EndTime > StartTime Then SetStopEndofday(EndTime); Else { if sDate != sDate[1] Then SetStopEndofday(EndTime); } if C > O Then T = 1; if C < O Then T = -1; if T != T[1] Then { T1 = T[1]; } if T == 1 and CountIf(C > O and C > C[1],2) == 2 Then { T = 2; P = Index[1]; if T1 == -2 Then { LL = L; LH = H; For cnt = 0 to Index-N { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; LM = (LL+LH)/2; } } } } if T == -1 and CountIf(C < O and C < C[1],2) == 2 Then { T = -2; N = Index[1]; if T1 == 2 Then { HH = H; HL = L; For cnt = 0 to Index-P { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; HM = (HH+HL)/2; } } } } if MarketPosition == 0 and HL > 0 and HH >= HL+PriceScale*12 and NextBarOpen < HL and Tcond == true Then { Buy("매수",AtStop,HL+PriceScale*3); ExitLong("매수익절.",AtLimit,HM); } if MarketPosition == 1 Then { ExitLong("매수익절",AtLimit,HM[BarsSinceEntry]); ExitLong("매수손절",AtStop,L[BarsSinceEntry+1]); } if MarketPosition == 0 and LH > 0 and LH >= LL+PriceScale*12 and NextBarOpen > LH and Tcond == true Then Sell("매도",AtStop,LH-PriceScale*3); ExitShort("매도익절.",AtLimit,LM); if MarketPosition == -1 Then { ExitShort("매도익절",AtLimit,LM[BarsSinceEntry]); ExitShort("매도손절",AtStop,H[BarsSinceEntry+1]); } 여기까지 버전1, 버전1에 한가지 더 추가하여 버전2와 함께 두가지로 답변부탁드립니다. 지금 현재는 새로운 시그널이 만들어지기전까지 같은 자리에서 계속 진입하여 청산하는데 버전2에서는 버전1에서 손절이든 익절이든 청산이되면 기존 시그널은 리셋하는 것으로 부탁드립니다. 버전1과 버전2 수식 따로해서 두가지로 답변 부탁드립니다.
프로필 이미지

예스스탁 예스스탁 답변

2020-10-20 08:32:33

안녕하세요 예스스탁입니다. 1 익절청산 후 초기화 input : StartTime(101500),EndTime(130000); var : Tcond(false); var : HH(0),HL(0),HM(0),LL(0),LH(0),LM(0),cnt(0); if (sdate != sdate[1] and stime >= EndTime) or (sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then Tcond = False; if (sdate != sdate[1] and stime >= StartTime) or (sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then { Tcond = true; if EndTime < StartTime Then SetStopEndofday(0); } if EndTime > StartTime Then SetStopEndofday(EndTime); Else { if sDate != sDate[1] Then SetStopEndofday(EndTime); } if TotalTrades > TotalTrades[1] then { if MarketPosition(1) == 1 and (IsExitName("매수익절.",1) == true or IsExitName("매수익절",1) == true) Then HL = 0; if MarketPosition(1) == -1 and (IsExitName("매도익절.",1) == true or IsExitName("매도익절",1) == true) Then LH = 0; } #매수1 : 양양음음 if C[3] > O[3] and C[3] > C[4] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[1] < C[2] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 3 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매수2 :양양음양음 if C[4] > O[4] and C[4] > C[5] and C[3] > O[3] and C[3] > C[4] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 4 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매수3 :양음양음음 if C[4] > O[4] and C[4] > C[5] and C[3] < O[3] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[1] < C[2] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 4 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매수4 : 양음양음양음 if C[5] > O[5] and C[5] > C[6] and C[4] < O[4] and C[3] > O[3] and C[3] > C[4] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 5 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매도1 : 음음양양 if C[3] < O[3] and C[3] < C[4] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[1] > C[2] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 3 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } #매도2 : 음음양음양 if C[4] < O[4] and C[4] < C[5] and C[3] < O[3] and C[3] < C[4] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 4 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } #매도3 : 음양음양양 if C[4] < O[4] and C[4] < C[5] and C[3] > O[3] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[1] > C[2] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 4 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } #매도4 : 음양음양음양 if C[5] < O[5] and C[5] < C[6] and C[4] > O[4] and C[3] < O[3] and C[3] < C[4] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 5 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } if MarketPosition == 0 and HL > 0 and HH >= HL+PriceScale*12 and NextBarOpen < HL and Tcond == true Then { Buy("매수",AtStop,HL+PriceScale*3); ExitLong("매수익절.",AtLimit,HM); } if MarketPosition == 1 Then { ExitLong("매수익절",AtLimit,HM[BarsSinceEntry]); ExitLong("매수손절",AtStop,L[BarsSinceEntry+1]); } if MarketPosition == 0 and LH > 0 and LH >= LL+PriceScale*12 and NextBarOpen > LH and Tcond == true Then Sell("매도",AtStop,LH-PriceScale*3); ExitShort("매도익절.",AtLimit,LM); if MarketPosition == -1 Then { ExitShort("매도익절",AtLimit,LM[BarsSinceEntry]); ExitShort("매도손절",AtStop,H[BarsSinceEntry+1]); } 2. 청산 후 초기화 input : StartTime(101500),EndTime(130000); var : Tcond(false); var : HH(0),HL(0),HM(0),LL(0),LH(0),LM(0),cnt(0); if (sdate != sdate[1] and stime >= EndTime) or (sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then Tcond = False; if (sdate != sdate[1] and stime >= StartTime) or (sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then { Tcond = true; if EndTime < StartTime Then SetStopEndofday(0); } if EndTime > StartTime Then SetStopEndofday(EndTime); Else { if sDate != sDate[1] Then SetStopEndofday(EndTime); } if TotalTrades > TotalTrades[1] then { if MarketPosition(1) == 1 Then HL = 0; if MarketPosition(1) == -1 Then LH = 0; } #매수1 : 양양음음 if C[3] > O[3] and C[3] > C[4] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[1] < C[2] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 3 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매수2 :양양음양음 if C[4] > O[4] and C[4] > C[5] and C[3] > O[3] and C[3] > C[4] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 4 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매수3 :양음양음음 if C[4] > O[4] and C[4] > C[5] and C[3] < O[3] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[1] < C[2] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 4 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매수4 : 양음양음양음 if C[5] > O[5] and C[5] > C[6] and C[4] < O[4] and C[3] > O[3] and C[3] > C[4] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 5 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매도1 : 음음양양 if C[3] < O[3] and C[3] < C[4] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[1] > C[2] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 3 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } #매도2 : 음음양음양 if C[4] < O[4] and C[4] < C[5] and C[3] < O[3] and C[3] < C[4] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 4 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } #매도3 : 음양음양양 if C[4] < O[4] and C[4] < C[5] and C[3] > O[3] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[1] > C[2] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 4 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } #매도4 : 음양음양음양 if C[5] < O[5] and C[5] < C[6] and C[4] > O[4] and C[3] < O[3] and C[3] < C[4] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 5 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } if MarketPosition == 0 and HL > 0 and HH >= HL+PriceScale*12 and NextBarOpen < HL and Tcond == true Then { Buy("매수",AtStop,HL+PriceScale*3); ExitLong("매수익절.",AtLimit,HM); } if MarketPosition == 1 Then { ExitLong("매수익절",AtLimit,HM[BarsSinceEntry]); ExitLong("매수손절",AtStop,L[BarsSinceEntry+1]); } if MarketPosition == 0 and LH > 0 and LH >= LL+PriceScale*12 and NextBarOpen > LH and Tcond == true Then Sell("매도",AtStop,LH-PriceScale*3); ExitShort("매도익절.",AtLimit,LM); if MarketPosition == -1 Then { ExitShort("매도익절",AtLimit,LM[BarsSinceEntry]); ExitShort("매도손절",AtStop,H[BarsSinceEntry+1]); } 3 지표식(매수라인,매도라인) var : HH(0),HL(0),HM(0),LL(0),LH(0),LM(0),cnt(0); #매수 : 양양음음 if C[3] > O[3] and C[3] > C[4] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[1] < C[2] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 3 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매수 :양양음양음 if C[4] > O[4] and C[4] > C[5] and C[3] > O[3] and C[3] > C[4] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 4 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매수 :양음양음음 if C[4] > O[4] and C[4] > C[5] and C[3] < O[3] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[1] < C[2] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 4 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매수 : 양음양음양음 if C[5] > O[5] and C[5] > C[6] and C[4] < O[4] and C[3] > O[3] and C[3] > C[4] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 5 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매도 : 음음양양 if C[3] < O[3] and C[3] < C[4] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[1] > C[2] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 3 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } #매도 : 음음양음양 if C[4] < O[4] and C[4] < C[5] and C[3] < O[3] and C[3] < C[4] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 4 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } #매도 : 음양음양양 if C[4] < O[4] and C[4] < C[5] and C[3] > O[3] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[1] > C[2] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 4 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } #매도 : 음양음양음양 if C[5] < O[5] and C[5] < C[6] and C[4] > O[4] and C[3] < O[3] and C[3] < C[4] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 5 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } plot2(HL+PriceScale*3,"매수라인"); plot3(LH-PriceScale*3,"매도라인"); 즐거운 하루되세요 > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 전화주시기 바랍니다.(02-3453-1060) > > 밤밤 님이 쓴 글입니다. > 제목 : 수식 수정 및 추가 사항 부탁드립니다. > 이미지내용 익절조건과 손절조건이 있는데도 같은 자리에서 진입청산하는 현상이 일어나는데 이건 버그인가요? 아래는 수식 수정 및 추가요청 입니다. <매수일때> 현재 조건이 양양음음- 종가상승양봉2개 종가하락음봉2개 연달아 나올시 이들 중 최고가봉을 기준봉으로 정하는 것인데 여기서 몇가지 봉의 조합을 더 추가로 넣고싶습니다. 순서대로 1 2 3 4 5 양양음양음 - (1양,2양 종가가 연달아 상승하여야 하고 3음,5음 종가 연달아 하락) 1 2 3 4 5 양음양음음 - (1양,3양 종가가 연달아 상승하여야 하고 4음,5음 종가 연달아 하락) 1 2 3 4 5 6 양음양음양음 - (1양,3양 종가가 연달아 상승하여야 하고 4음,6음 종가 연달아 하락) 봉의 순서와 조합만 추가일뿐 조건은 같습니다. 이들중 최고가봉을 기준봉으로 하고 그 이후 진입조건은 기존과 같습니다. 위에 조건들 중 먼저 만족되는 조건으로 매수진입 <매도일때> 기존 음음양양 에서 아래 더 추가 1 2 3 4 5 음음양음양 - (1음,2음 종가가 연달아 하락하여야하고 3양,5양 종가 연달아 상승) 1 2 3 4 5 음양음양양 - (1음,3음 종가가 연달아 하락하여야하고 4양,5양 종가 연달아 상승) 1 2 3 4 5 6 음양음양음양 - (1음,3음 종가가 연달아 하락하여야하고 4양,6양 종가 연달아 상승) 마찬가지로 이들봉중 최저가 봉이 기준봉이 되는 것입니다. 위에 조건들중 먼저 만족되는 조건으로 매도진입 아래 수식에서 수정 및 추가 부탁드립니다. input : StartTime(101500),EndTime(130000); var : Tcond(false); var : T(0),T1(0),P(0),N(0),B(False),S(False); var : HH(0),HL(0),HM(0),LL(0),LH(0),LM(0),cnt(0); if (sdate != sdate[1] and stime >= EndTime) or (sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then Tcond = False; if (sdate != sdate[1] and stime >= StartTime) or (sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then { Tcond = true; if EndTime < StartTime Then SetStopEndofday(0); } if EndTime > StartTime Then SetStopEndofday(EndTime); Else { if sDate != sDate[1] Then SetStopEndofday(EndTime); } if C > O Then T = 1; if C < O Then T = -1; if T != T[1] Then { T1 = T[1]; } if T == 1 and CountIf(C > O and C > C[1],2) == 2 Then { T = 2; P = Index[1]; if T1 == -2 Then { LL = L; LH = H; For cnt = 0 to Index-N { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; LM = (LL+LH)/2; } } } } if T == -1 and CountIf(C < O and C < C[1],2) == 2 Then { T = -2; N = Index[1]; if T1 == 2 Then { HH = H; HL = L; For cnt = 0 to Index-P { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; HM = (HH+HL)/2; } } } } if MarketPosition == 0 and HL > 0 and HH >= HL+PriceScale*12 and NextBarOpen < HL and Tcond == true Then { Buy("매수",AtStop,HL+PriceScale*3); ExitLong("매수익절.",AtLimit,HM); } if MarketPosition == 1 Then { ExitLong("매수익절",AtLimit,HM[BarsSinceEntry]); ExitLong("매수손절",AtStop,L[BarsSinceEntry+1]); } if MarketPosition == 0 and LH > 0 and LH >= LL+PriceScale*12 and NextBarOpen > LH and Tcond == true Then Sell("매도",AtStop,LH-PriceScale*3); ExitShort("매도익절.",AtLimit,LM); if MarketPosition == -1 Then { ExitShort("매도익절",AtLimit,LM[BarsSinceEntry]); ExitShort("매도손절",AtStop,H[BarsSinceEntry+1]); } 여기까지 버전1, 버전1에 한가지 더 추가하여 버전2와 함께 두가지로 답변부탁드립니다. 지금 현재는 새로운 시그널이 만들어지기전까지 같은 자리에서 계속 진입하여 청산하는데 버전2에서는 버전1에서 손절이든 익절이든 청산이되면 기존 시그널은 리셋하는 것으로 부탁드립니다. 버전1과 버전2 수식 따로해서 두가지로 답변 부탁드립니다.
프로필 이미지

예스스탁 예스스탁 답변

2020-10-21 14:21:11

안녕하세요 예스스탁입니다. 1 익절청산 후 초기화 input : StartTime(101500),EndTime(130000); var : Tcond(false),idx(0); var : HH(0),HL(0),HM(0),LL(0),LH(0),LM(0),cnt(0); if (sdate != sdate[1] and stime >= EndTime) or (sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then Tcond = False; if (sdate != sdate[1] and stime >= StartTime) or (sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then { Tcond = true; HL = 0; LH = 0; idx = 0; if EndTime < StartTime Then SetStopEndofday(0); } if EndTime > StartTime Then SetStopEndofday(EndTime); Else { if sDate != sDate[1] Then SetStopEndofday(EndTime); } if TotalTrades > TotalTrades[1] then { if MarketPosition(1) == 1 and (IsExitName("매수익절.",1) == true or IsExitName("매수익절",1) == true) Then HL = 0; if MarketPosition(1) == -1 and (IsExitName("매도익절.",1) == true or IsExitName("매도익절",1) == true) Then LH = 0; } if Tcond == true Then { idx = idx+1; #매수1 : 양양음음 if idx >= 4 and C[3] > O[3] and C[3] > C[4] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[1] < C[2] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 3 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매수2 :양양음양음 if idx >= 5 and C[4] > O[4] and C[4] > C[5] and C[3] > O[3] and C[3] > C[4] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 4 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매수3 :양음양음음 if idx >= 5 and C[4] > O[4] and C[4] > C[5] and C[3] < O[3] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[1] < C[2] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 4 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매수4 : 양음양음양음 if idx >= 6 and C[5] > O[5] and C[5] > C[6] and C[4] < O[4] and C[3] > O[3] and C[3] > C[4] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 5 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매도1 : 음음양양 if idx >= 4 and C[3] < O[3] and C[3] < C[4] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[1] > C[2] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 3 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } #매도2 : 음음양음양 if idx >= 5 and C[4] < O[4] and C[4] < C[5] and C[3] < O[3] and C[3] < C[4] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 4 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } #매도3 : 음양음양양 if idx >= 5 and C[4] < O[4] and C[4] < C[5] and C[3] > O[3] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[1] > C[2] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 4 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } #매도4 : 음양음양음양 if idx >=6 and C[5] < O[5] and C[5] < C[6] and C[4] > O[4] and C[3] < O[3] and C[3] < C[4] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 5 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } if MarketPosition == 0 and HL > 0 and HH >= HL+PriceScale*12 and NextBarOpen < HL and Tcond == true Then { Buy("매수",AtStop,HL+PriceScale*3); ExitLong("매수익절.",AtLimit,HM); } if MarketPosition == 1 Then { ExitLong("매수익절",AtLimit,HM[BarsSinceEntry]); ExitLong("매수손절",AtStop,L[BarsSinceEntry+1]); } if MarketPosition == 0 and LH > 0 and LH >= LL+PriceScale*12 and NextBarOpen > LH and Tcond == true Then Sell("매도",AtStop,LH-PriceScale*3); ExitShort("매도익절.",AtLimit,LM); if MarketPosition == -1 Then { ExitShort("매도익절",AtLimit,LM[BarsSinceEntry]); ExitShort("매도손절",AtStop,H[BarsSinceEntry+1]); } } 2. 청산 후 초기화 input : StartTime(101500),EndTime(130000); var : Tcond(false),idx(0); var : HH(0),HL(0),HM(0),LL(0),LH(0),LM(0),cnt(0); if (sdate != sdate[1] and stime >= EndTime) or (sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then Tcond = False; if (sdate != sdate[1] and stime >= StartTime) or (sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then { Tcond = true; idx = 0; if EndTime < StartTime Then SetStopEndofday(0); } if EndTime > StartTime Then SetStopEndofday(EndTime); Else { if sDate != sDate[1] Then SetStopEndofday(EndTime); } if TotalTrades > TotalTrades[1] then { if MarketPosition(1) == 1 Then HL = 0; if MarketPosition(1) == -1 Then LH = 0; } if Tcond == true Then { idx = idx+1; #매수1 : 양양음음 if idx >= 4 and C[3] > O[3] and C[3] > C[4] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[1] < C[2] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 3 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매수2 :양양음양음 if idx >= 5 and C[4] > O[4] and C[4] > C[5] and C[3] > O[3] and C[3] > C[4] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 4 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매수3 :양음양음음 if idx >= 5 and C[4] > O[4] and C[4] > C[5] and C[3] < O[3] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[1] < C[2] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 4 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매수4 : 양음양음양음 if idx >= 6 and C[5] > O[5] and C[5] > C[6] and C[4] < O[4] and C[3] > O[3] and C[3] > C[4] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 5 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매도1 : 음음양양 if idx >= 4 and C[3] < O[3] and C[3] < C[4] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[1] > C[2] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 3 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } #매도2 : 음음양음양 if idx >= 5 and C[4] < O[4] and C[4] < C[5] and C[3] < O[3] and C[3] < C[4] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 4 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } #매도3 : 음양음양양 if idx >= 5 and C[4] < O[4] and C[4] < C[5] and C[3] > O[3] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[1] > C[2] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 4 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } #매도4 : 음양음양음양 if idx >=6 and C[5] < O[5] and C[5] < C[6] and C[4] > O[4] and C[3] < O[3] and C[3] < C[4] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 5 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } if MarketPosition == 0 and HL > 0 and HH >= HL+PriceScale*12 and NextBarOpen < HL and Tcond == true Then { Buy("매수",AtStop,HL+PriceScale*3); ExitLong("매수익절.",AtLimit,HM); } if MarketPosition == 1 Then { ExitLong("매수익절",AtLimit,HM[BarsSinceEntry]); ExitLong("매수손절",AtStop,L[BarsSinceEntry+1]); } if MarketPosition == 0 and LH > 0 and LH >= LL+PriceScale*12 and NextBarOpen > LH and Tcond == true Then Sell("매도",AtStop,LH-PriceScale*3); ExitShort("매도익절.",AtLimit,LM); if MarketPosition == -1 Then { ExitShort("매도익절",AtLimit,LM[BarsSinceEntry]); ExitShort("매도손절",AtStop,H[BarsSinceEntry+1]); } } 즐거운 하루되세요 > 예스스탁 님이 쓴 글입니다. > 제목 : Re : Re : 수식입니다. > 안녕하세요 예스스탁입니다. 1 익절청산 후 초기화 input : StartTime(101500),EndTime(130000); var : Tcond(false); var : HH(0),HL(0),HM(0),LL(0),LH(0),LM(0),cnt(0); if (sdate != sdate[1] and stime >= EndTime) or (sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then Tcond = False; if (sdate != sdate[1] and stime >= StartTime) or (sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then { Tcond = true; if EndTime < StartTime Then SetStopEndofday(0); } if EndTime > StartTime Then SetStopEndofday(EndTime); Else { if sDate != sDate[1] Then SetStopEndofday(EndTime); } if TotalTrades > TotalTrades[1] then { if MarketPosition(1) == 1 and (IsExitName("매수익절.",1) == true or IsExitName("매수익절",1) == true) Then HL = 0; if MarketPosition(1) == -1 and (IsExitName("매도익절.",1) == true or IsExitName("매도익절",1) == true) Then LH = 0; } #매수1 : 양양음음 if C[3] > O[3] and C[3] > C[4] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[1] < C[2] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 3 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매수2 :양양음양음 if C[4] > O[4] and C[4] > C[5] and C[3] > O[3] and C[3] > C[4] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 4 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매수3 :양음양음음 if C[4] > O[4] and C[4] > C[5] and C[3] < O[3] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[1] < C[2] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 4 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매수4 : 양음양음양음 if C[5] > O[5] and C[5] > C[6] and C[4] < O[4] and C[3] > O[3] and C[3] > C[4] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 5 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매도1 : 음음양양 if C[3] < O[3] and C[3] < C[4] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[1] > C[2] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 3 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } #매도2 : 음음양음양 if C[4] < O[4] and C[4] < C[5] and C[3] < O[3] and C[3] < C[4] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 4 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } #매도3 : 음양음양양 if C[4] < O[4] and C[4] < C[5] and C[3] > O[3] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[1] > C[2] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 4 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } #매도4 : 음양음양음양 if C[5] < O[5] and C[5] < C[6] and C[4] > O[4] and C[3] < O[3] and C[3] < C[4] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 5 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } if MarketPosition == 0 and HL > 0 and HH >= HL+PriceScale*12 and NextBarOpen < HL and Tcond == true Then { Buy("매수",AtStop,HL+PriceScale*3); ExitLong("매수익절.",AtLimit,HM); } if MarketPosition == 1 Then { ExitLong("매수익절",AtLimit,HM[BarsSinceEntry]); ExitLong("매수손절",AtStop,L[BarsSinceEntry+1]); } if MarketPosition == 0 and LH > 0 and LH >= LL+PriceScale*12 and NextBarOpen > LH and Tcond == true Then Sell("매도",AtStop,LH-PriceScale*3); ExitShort("매도익절.",AtLimit,LM); if MarketPosition == -1 Then { ExitShort("매도익절",AtLimit,LM[BarsSinceEntry]); ExitShort("매도손절",AtStop,H[BarsSinceEntry+1]); } 2. 청산 후 초기화 input : StartTime(101500),EndTime(130000); var : Tcond(false); var : HH(0),HL(0),HM(0),LL(0),LH(0),LM(0),cnt(0); if (sdate != sdate[1] and stime >= EndTime) or (sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then Tcond = False; if (sdate != sdate[1] and stime >= StartTime) or (sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then { Tcond = true; if EndTime < StartTime Then SetStopEndofday(0); } if EndTime > StartTime Then SetStopEndofday(EndTime); Else { if sDate != sDate[1] Then SetStopEndofday(EndTime); } if TotalTrades > TotalTrades[1] then { if MarketPosition(1) == 1 Then HL = 0; if MarketPosition(1) == -1 Then LH = 0; } #매수1 : 양양음음 if C[3] > O[3] and C[3] > C[4] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[1] < C[2] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 3 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매수2 :양양음양음 if C[4] > O[4] and C[4] > C[5] and C[3] > O[3] and C[3] > C[4] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 4 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매수3 :양음양음음 if C[4] > O[4] and C[4] > C[5] and C[3] < O[3] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[1] < C[2] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 4 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매수4 : 양음양음양음 if C[5] > O[5] and C[5] > C[6] and C[4] < O[4] and C[3] > O[3] and C[3] > C[4] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 5 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매도1 : 음음양양 if C[3] < O[3] and C[3] < C[4] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[1] > C[2] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 3 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } #매도2 : 음음양음양 if C[4] < O[4] and C[4] < C[5] and C[3] < O[3] and C[3] < C[4] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 4 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } #매도3 : 음양음양양 if C[4] < O[4] and C[4] < C[5] and C[3] > O[3] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[1] > C[2] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 4 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } #매도4 : 음양음양음양 if C[5] < O[5] and C[5] < C[6] and C[4] > O[4] and C[3] < O[3] and C[3] < C[4] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 5 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } if MarketPosition == 0 and HL > 0 and HH >= HL+PriceScale*12 and NextBarOpen < HL and Tcond == true Then { Buy("매수",AtStop,HL+PriceScale*3); ExitLong("매수익절.",AtLimit,HM); } if MarketPosition == 1 Then { ExitLong("매수익절",AtLimit,HM[BarsSinceEntry]); ExitLong("매수손절",AtStop,L[BarsSinceEntry+1]); } if MarketPosition == 0 and LH > 0 and LH >= LL+PriceScale*12 and NextBarOpen > LH and Tcond == true Then Sell("매도",AtStop,LH-PriceScale*3); ExitShort("매도익절.",AtLimit,LM); if MarketPosition == -1 Then { ExitShort("매도익절",AtLimit,LM[BarsSinceEntry]); ExitShort("매도손절",AtStop,H[BarsSinceEntry+1]); } 3 지표식(매수라인,매도라인) var : HH(0),HL(0),HM(0),LL(0),LH(0),LM(0),cnt(0); #매수 : 양양음음 if C[3] > O[3] and C[3] > C[4] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[1] < C[2] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 3 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매수 :양양음양음 if C[4] > O[4] and C[4] > C[5] and C[3] > O[3] and C[3] > C[4] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 4 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매수 :양음양음음 if C[4] > O[4] and C[4] > C[5] and C[3] < O[3] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[1] < C[2] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 4 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매수 : 양음양음양음 if C[5] > O[5] and C[5] > C[6] and C[4] < O[4] and C[3] > O[3] and C[3] > C[4] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[0] < O[0] and C[0] < C[1] Then { HH = H; HL = L; For cnt = 0 to 5 { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; } } HM = (HH+HL)/2; } #매도 : 음음양양 if C[3] < O[3] and C[3] < C[4] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[1] > C[2] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 3 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } #매도 : 음음양음양 if C[4] < O[4] and C[4] < C[5] and C[3] < O[3] and C[3] < C[4] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 4 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } #매도 : 음양음양양 if C[4] < O[4] and C[4] < C[5] and C[3] > O[3] and C[2] < O[2] and C[2] < C[3] and C[1] > O[1] and C[1] > C[2] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 4 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } #매도 : 음양음양음양 if C[5] < O[5] and C[5] < C[6] and C[4] > O[4] and C[3] < O[3] and C[3] < C[4] and C[2] > O[2] and C[2] > C[3] and C[1] < O[1] and C[0] > O[0] and C[0] > C[1] Then { LL = L; LH = H; For cnt = 0 to 5 { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; } } LM = (LL+LH)/2; } plot2(HL+PriceScale*3,"매수라인"); plot3(LH-PriceScale*3,"매도라인"); 즐거운 하루되세요 > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 전화주시기 바랍니다.(02-3453-1060) > > 밤밤 님이 쓴 글입니다. > 제목 : 수식 수정 및 추가 사항 부탁드립니다. > 이미지내용 익절조건과 손절조건이 있는데도 같은 자리에서 진입청산하는 현상이 일어나는데 이건 버그인가요? 아래는 수식 수정 및 추가요청 입니다. <매수일때> 현재 조건이 양양음음- 종가상승양봉2개 종가하락음봉2개 연달아 나올시 이들 중 최고가봉을 기준봉으로 정하는 것인데 여기서 몇가지 봉의 조합을 더 추가로 넣고싶습니다. 순서대로 1 2 3 4 5 양양음양음 - (1양,2양 종가가 연달아 상승하여야 하고 3음,5음 종가 연달아 하락) 1 2 3 4 5 양음양음음 - (1양,3양 종가가 연달아 상승하여야 하고 4음,5음 종가 연달아 하락) 1 2 3 4 5 6 양음양음양음 - (1양,3양 종가가 연달아 상승하여야 하고 4음,6음 종가 연달아 하락) 봉의 순서와 조합만 추가일뿐 조건은 같습니다. 이들중 최고가봉을 기준봉으로 하고 그 이후 진입조건은 기존과 같습니다. 위에 조건들 중 먼저 만족되는 조건으로 매수진입 <매도일때> 기존 음음양양 에서 아래 더 추가 1 2 3 4 5 음음양음양 - (1음,2음 종가가 연달아 하락하여야하고 3양,5양 종가 연달아 상승) 1 2 3 4 5 음양음양양 - (1음,3음 종가가 연달아 하락하여야하고 4양,5양 종가 연달아 상승) 1 2 3 4 5 6 음양음양음양 - (1음,3음 종가가 연달아 하락하여야하고 4양,6양 종가 연달아 상승) 마찬가지로 이들봉중 최저가 봉이 기준봉이 되는 것입니다. 위에 조건들중 먼저 만족되는 조건으로 매도진입 아래 수식에서 수정 및 추가 부탁드립니다. input : StartTime(101500),EndTime(130000); var : Tcond(false); var : T(0),T1(0),P(0),N(0),B(False),S(False); var : HH(0),HL(0),HM(0),LL(0),LH(0),LM(0),cnt(0); if (sdate != sdate[1] and stime >= EndTime) or (sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then Tcond = False; if (sdate != sdate[1] and stime >= StartTime) or (sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then { Tcond = true; if EndTime < StartTime Then SetStopEndofday(0); } if EndTime > StartTime Then SetStopEndofday(EndTime); Else { if sDate != sDate[1] Then SetStopEndofday(EndTime); } if C > O Then T = 1; if C < O Then T = -1; if T != T[1] Then { T1 = T[1]; } if T == 1 and CountIf(C > O and C > C[1],2) == 2 Then { T = 2; P = Index[1]; if T1 == -2 Then { LL = L; LH = H; For cnt = 0 to Index-N { if L[cnt] < LL then { LL = L[cnt]; LH = H[cnt]; LM = (LL+LH)/2; } } } } if T == -1 and CountIf(C < O and C < C[1],2) == 2 Then { T = -2; N = Index[1]; if T1 == 2 Then { HH = H; HL = L; For cnt = 0 to Index-P { if H[cnt] > HH then { HH = H[cnt]; HL = L[cnt]; HM = (HH+HL)/2; } } } } if MarketPosition == 0 and HL > 0 and HH >= HL+PriceScale*12 and NextBarOpen < HL and Tcond == true Then { Buy("매수",AtStop,HL+PriceScale*3); ExitLong("매수익절.",AtLimit,HM); } if MarketPosition == 1 Then { ExitLong("매수익절",AtLimit,HM[BarsSinceEntry]); ExitLong("매수손절",AtStop,L[BarsSinceEntry+1]); } if MarketPosition == 0 and LH > 0 and LH >= LL+PriceScale*12 and NextBarOpen > LH and Tcond == true Then Sell("매도",AtStop,LH-PriceScale*3); ExitShort("매도익절.",AtLimit,LM); if MarketPosition == -1 Then { ExitShort("매도익절",AtLimit,LM[BarsSinceEntry]); ExitShort("매도손절",AtStop,H[BarsSinceEntry+1]); } 여기까지 버전1, 버전1에 한가지 더 추가하여 버전2와 함께 두가지로 답변부탁드립니다. 지금 현재는 새로운 시그널이 만들어지기전까지 같은 자리에서 계속 진입하여 청산하는데 버전2에서는 버전1에서 손절이든 익절이든 청산이되면 기존 시그널은 리셋하는 것으로 부탁드립니다. 버전1과 버전2 수식 따로해서 두가지로 답변 부탁드립니다.