커뮤니티

수식 수정 부탁드립니다

프로필 이미지
산이보리
2021-05-12 09:36:38
1359
글번호 148917
답변완료
안녕하세요 아래 수식에 로스컷 3회 연속 걸리면 매매정지가 되도록 돼 있습니다 문제점은 '23시 이후 로스컷이 될 경우 경우 익일 오전 7시가 되어야 매매를 재개'한다는 것 입니다 항상 감사합니다 ---- input : T(1),N(4),조건(2),매수전략(2),매도전략(0),매수기간(10),매도기간(0),매수청산(5),매도청산(0),매수트레일링스탑사용(0),매수트레일링스탑(0),매도트레일링스탑사용(0),매도트레일링스탑(0),매수로스컷위치(0),매도로스컷위치(0),손절(0); input : 플러스매도청산(0),마이너스매수청산(0),제로매수청산(0),제로매도청산(0),StartTime(070000),EndTime(070000),로스컷횟수(3),매매정지(10),매수포인트(0),매도포인트(0); var : LL(0),HH(0),최저가(0),최고가(0),cnt(0),sum(0),CL(0),CS(0),Lss(0),S(false),acounting(0),TS_L(0),TS_S(0),first(false),second(false); var : Tcond(false),S1(0),D1(0),TM(0),b_vv(0),losscut_point(0),hhh(0),lll(0); Array : VV[20](0); if 조건 == 1 then { Condition1 = L[4]>L[3] and L[3] >L[2] and H>H[1] and H[1]>H[2] and min(L[2],L[1],L) == L[2]; Condition2 = H[4]<H[3] and H[3]<H[2] and L<L[1] and L[1]<L[2] and max(H[2],H[1],H) == H[2] ; } else if 조건 ==2 then { Condition1 = L[4]>L[2] and H>H[2] and min(L[4],L[3],L[2],L[1],L) == L[2]; Condition2 = H[4]<H[2] and L<L[2] and max(H[4],H[3],H[2],H[1],H) == H[2] ; } if ( ( var2 == 0 and C > hh and vv[0] == -1 ) or LL == 0 or (CL !=0 and C > CL) ) and condition1 == true and Condition1[1] == False Then { var1 = var1+1; LL = L[2]; CL = C; CS = 0; if 매수트레일링스탑사용 == 1 then TS_L = L[매수트레일링스탑]; else TS_L = 0; if acounting <= 0 then acounting = 1; else acounting = acounting + 1; VV[0] = 1; For cnt = 1 to 19 { VV[cnt] = VV[cnt-1][1]; } if VV[N-1] != 0 Then { sum = 0; For cnt = 0 to N-1 { sum = sum + VV[cnt]; } } } else { if L < LL Then { var1 = 0; } } if (( var1 == 0 and C < ll and vv[0] ==1) or hh == 0 or (CS != 0 and C < CS) ) and condition2 == true and Condition2[1] == False Then { var2 = var2+1; HH = H[2]; CS = C; CL = 0; if 매도트레일링스탑사용 == 1 then TS_S = H[매도트레일링스탑]; else TS_S = 0; if acounting >= 0 then acounting = -1; else acounting = acounting - 1; VV[0] = -1; For cnt = 1 to 19 { VV[cnt] = VV[cnt-1][1]; } if VV[N-1] != 0 Then { sum = 0; For cnt = 0 to N-1 { sum = sum + VV[cnt]; } } } Else { if H > HH Then { var2 = 0; } } if Bdate != Bdate[1] Then { S1 = TimeToMinutes(stime); D1 = sdate; Condition4 = False; } if D1 > 0 then { if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; } #청산이 이루어질 때마다 아래와 같이 진행 if TotalTrades > TotalTrades[1] Then { Condition4 = False; losscut_point ==0; TS_L = 0; TS_S = 0; #3회 연속손실 여부 if PositionProfit(1) < 0 Then Lss = Lss+1; Else Lss = 0; if lss >= 로스컷횟수 Then { Condition4 = true; Lss = 0; } } #최근을 제외한 이전 4개 포인트 합 b_vv = vv[4]+vv[3]+vv[2]+vv[1]; #새로운 포인트가 나왔는지 확인하는 수식 if acounting != acounting[1] then S = true; else S = false; #매매조건 condition5 = sum >= 매수포인트 and vv[0] == 1; #매수조건 condition6 = sum <= 매도포인트 and vv[0] == -1; #매도조건 #돌파매수기준점 hhh = Highest(h,매수기간); lll = Lowest(l,매도기간); #거래시간 설정 if T == 0 Then Condition7 = (sTime > starttime and sTime < Endtime); Else if T == 1 Then Condition7 = (sTime > starttime or sTime < Endtime); #정해진 매매시간에 포지션이 없으면 if condition7 == true Then { if 매수전략 !=0 and 매수전략 == 1 then { #매수조조건에 만족하고 새로운 포인트가 나왔으며 최근봉 저가와 종가가 다르면 if condition5 == true and S == true and L != C then { #3번연속 손실이 발생했는지 확인 if condition4 == false then { Buy("1전략매수"); S = False; if marketposition == 0 then { losscut_point = L[매수로스컷위치]; } } if condition4 == true and TM >= TM[BarsSinceExit(1)]+ 매매정지 Then { Buy("1전략매수2"); S = False; if marketposition == 0 then { losscut_point = L[매수로스컷위치]; } } } } if 매도전략 !=0 and 매도전략 == 1 then { #매도조건에 만족하고 새로운 포인트가 나왔으며 최근봉 고가와 종가가 다르면 if condition6 == true and S == true and H != C then { #3번연속 손실이 발생했는지 확인 if condition4 == false then { sell("1전략매도"); S = False; if marketposition == 0 then { losscut_point = H[매도로스컷위치]; } } if condition4 == true and TM >= TM[BarsSinceExit(1)]+ 매매정지 Then { sell("1전략매도2"); S = False; if marketposition == 0 then { losscut_point = H[매도로스컷위치]; } } } } #전략2 실행 if 매수전략 != 0 and 매수전략 == 2 then { #매수조건을 만족하면 if condition5 == true then { #3번연속 손실이 발생했는지 확인 if condition4 == false and C > hhh[1] then { buy("돌파매수"); } if condition4 == true and C > hhh[1] and TM >= TM[BarsSinceExit(1)]+ 매매정지 Then { buy("돌파매수2"); } } } if 매도전략 != 0 and 매도전략 == 2 then { #매도조건을 만족하면 if condition6 == true Then { #3번연속 손실이 발생했는지 확인 if condition4 == false and C < lll[1] Then { sell("돌파매도"); } if condition4 == true and C < lll[1] and TM >= TM[BarsSinceExit(1)]+ 매매정지 Then { sell("돌파매도2"); } } } } #청산조건 if marketposition > 0 then { if 매수전략 == 1 then { if sum ==0 and b_vv == 2 and 제로매수청산 == 1 Then ExitLong("0포인트 매수청산"); if vv[0] == -1 and 마이너스매수청산 == 1 Then Exitlong("'-1' 매도청산"); ExitLong("매수로스컷",atstop,losscut_point); If 매수트레일링스탑사용 == 1 then Exitlong("매수트레일링스탑",atstop,TS_L); } if 매수전략 == 2 then { if 매수청산 != 0 then ExitLong("돌파매수청산",atstop,Lowest( Low ,매수청산)); } } if MarketPosition < 0 then { if 매도전략 == 1 then { if sum ==0 and b_vv == -2 and 제로매도청산 == 1 Then Exitshort("0포인트 매도청산"); if vv[0] == 1 and 플러스매도청산 == 1 Then ExitShort("'+1' 매도청산"); Exitshort("매도로스컷",atstop,losscut_point); If 매도트레일링스탑사용 == 1 then Exitshort("매도트레일링스탑",atstop,TS_S); } if 매도전략 == 2 then { if 매도청산 != 0 then ExitShort("돌파매도청산",atstop,Highest( High ,매도청산)); } } #타겟청산 SetStopLoss( 손절 ,PointStop);
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2021-05-12 11:00:00

안녕하세요 예스스탁입니다. input : T(1),N(4),조건(2),매수전략(2),매도전략(0),매수기간(10),매도기간(0),매수청산(5),매도청산(0),매수트레일링스탑사용(0),매수트레일링스탑(0),매도트레일링스탑사용(0),매도트레일링스탑(0),매수로스컷위치(0),매도로스컷위치(0),손절(0); input : 플러스매도청산(0),마이너스매수청산(0),제로매수청산(0),제로매도청산(0),StartTime(070000),EndTime(070000),로스컷횟수(3),매매정지(10),매수포인트(0),매도포인트(0); var : LL(0),HH(0),최저가(0),최고가(0),cnt(0),sum(0),CL(0),CS(0),Lss(0),S(false),acounting(0),TS_L(0),TS_S(0),first(false),second(false); var : Tcond(false),S1(0),D1(0),TM(0),b_vv(0),losscut_point(0),hhh(0),lll(0); Array : VV[20](0); if 조건 == 1 then { Condition1 = L[4]>L[3] and L[3] >L[2] and H>H[1] and H[1]>H[2] and min(L[2],L[1],L) == L[2]; Condition2 = H[4]<H[3] and H[3]<H[2] and L<L[1] and L[1]<L[2] and max(H[2],H[1],H) == H[2] ; } else if 조건 ==2 then { Condition1 = L[4]>L[2] and H>H[2] and min(L[4],L[3],L[2],L[1],L) == L[2]; Condition2 = H[4]<H[2] and L<L[2] and max(H[4],H[3],H[2],H[1],H) == H[2] ; } if ( ( var2 == 0 and C > hh and vv[0] == -1 ) or LL == 0 or (CL !=0 and C > CL) ) and condition1 == true and Condition1[1] == False Then { var1 = var1+1; LL = L[2]; CL = C; CS = 0; if 매수트레일링스탑사용 == 1 then TS_L = L[매수트레일링스탑]; else TS_L = 0; if acounting <= 0 then acounting = 1; else acounting = acounting + 1; VV[0] = 1; For cnt = 1 to 19 { VV[cnt] = VV[cnt-1][1]; } if VV[N-1] != 0 Then { sum = 0; For cnt = 0 to N-1 { sum = sum + VV[cnt]; } } } else { if L < LL Then { var1 = 0; } } if (( var1 == 0 and C < ll and vv[0] ==1) or hh == 0 or (CS != 0 and C < CS) ) and condition2 == true and Condition2[1] == False Then { var2 = var2+1; HH = H[2]; CS = C; CL = 0; if 매도트레일링스탑사용 == 1 then TS_S = H[매도트레일링스탑]; else TS_S = 0; if acounting >= 0 then acounting = -1; else acounting = acounting - 1; VV[0] = -1; For cnt = 1 to 19 { VV[cnt] = VV[cnt-1][1]; } if VV[N-1] != 0 Then { sum = 0; For cnt = 0 to N-1 { sum = sum + VV[cnt]; } } } Else { if H > HH Then { var2 = 0; } } if Bdate != Bdate[1] Then { S1 = TimeToMinutes(stime); D1 = sdate; Condition4 = False; } if D1 > 0 then { if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; } #청산이 이루어질 때마다 아래와 같이 진행 if TotalTrades > TotalTrades[1] Then { Condition4 = False; losscut_point ==0; TS_L = 0; TS_S = 0; #3회 연속손실 여부 if PositionProfit(1) < 0 Then Lss = Lss+1; Else Lss = 0; if lss >= 로스컷횟수 Then { Condition4 = true; Lss = 0; } } #최근을 제외한 이전 4개 포인트 합 b_vv = vv[4]+vv[3]+vv[2]+vv[1]; #새로운 포인트가 나왔는지 확인하는 수식 if acounting != acounting[1] then S = true; else S = false; #매매조건 condition5 = sum >= 매수포인트 and vv[0] == 1; #매수조건 condition6 = sum <= 매도포인트 and vv[0] == -1; #매도조건 #돌파매수기준점 hhh = Highest(h,매수기간); lll = Lowest(l,매도기간); #거래시간 설정 if T == 0 Then Condition7 = (sTime > starttime and sTime < Endtime); Else if T == 1 Then Condition7 = (sTime > starttime or sTime < Endtime); #정해진 매매시간에 포지션이 없으면 if condition7 == true Then { if 매수전략 !=0 and 매수전략 == 1 then { #매수조조건에 만족하고 새로운 포인트가 나왔으며 최근봉 저가와 종가가 다르면 if condition5 == true and S == true and L != C then { #3번연속 손실이 발생했는지 확인 if condition4 == false then { Buy("1전략매수"); S = False; if marketposition == 0 then { losscut_point = L[매수로스컷위치]; } } if condition4 == true and TM >= TM[BarsSinceExit(1)]+ 매매정지 Then { Buy("1전략매수2"); Condition4 = False; S = False; if marketposition == 0 then { losscut_point = L[매수로스컷위치]; } } } } if 매도전략 !=0 and 매도전략 == 1 then { #매도조건에 만족하고 새로운 포인트가 나왔으며 최근봉 고가와 종가가 다르면 if condition6 == true and S == true and H != C then { #3번연속 손실이 발생했는지 확인 if condition4 == false then { sell("1전략매도"); S = False; if marketposition == 0 then { losscut_point = H[매도로스컷위치]; } } if condition4 == true and TM >= TM[BarsSinceExit(1)]+ 매매정지 Then { sell("1전략매도2"); Condition4 = False; S = False; if marketposition == 0 then { losscut_point = H[매도로스컷위치]; } } } } #전략2 실행 if 매수전략 != 0 and 매수전략 == 2 then { #매수조건을 만족하면 if condition5 == true then { #3번연속 손실이 발생했는지 확인 if condition4 == false and C > hhh[1] then { buy("돌파매수"); } if condition4 == true and C > hhh[1] and TM >= TM[BarsSinceExit(1)]+ 매매정지 Then { Condition4 = False; buy("돌파매수2"); } } } if 매도전략 != 0 and 매도전략 == 2 then { #매도조건을 만족하면 if condition6 == true Then { #3번연속 손실이 발생했는지 확인 if condition4 == false and C < lll[1] Then { sell("돌파매도"); } if condition4 == true and C < lll[1] and TM >= TM[BarsSinceExit(1)]+ 매매정지 Then { Condition4 = False; sell("돌파매도2"); } } } } #청산조건 if marketposition > 0 then { if 매수전략 == 1 then { if sum ==0 and b_vv == 2 and 제로매수청산 == 1 Then ExitLong("0포인트 매수청산"); if vv[0] == -1 and 마이너스매수청산 == 1 Then Exitlong("'-1' 매도청산"); ExitLong("매수로스컷",atstop,losscut_point); If 매수트레일링스탑사용 == 1 then Exitlong("매수트레일링스탑",atstop,TS_L); } if 매수전략 == 2 then { if 매수청산 != 0 then ExitLong("돌파매수청산",atstop,Lowest( Low ,매수청산)); } } if MarketPosition < 0 then { if 매도전략 == 1 then { if sum ==0 and b_vv == -2 and 제로매도청산 == 1 Then Exitshort("0포인트 매도청산"); if vv[0] == 1 and 플러스매도청산 == 1 Then ExitShort("'+1' 매도청산"); Exitshort("매도로스컷",atstop,losscut_point); If 매도트레일링스탑사용 == 1 then Exitshort("매도트레일링스탑",atstop,TS_S); } if 매도전략 == 2 then { if 매도청산 != 0 then ExitShort("돌파매도청산",atstop,Highest( High ,매도청산)); } } #타겟청산 SetStopLoss( 손절 ,PointStop); 즐거운 하루되세요 > 산이보리 님이 쓴 글입니다. > 제목 : 수식 수정 부탁드립니다 > 안녕하세요 아래 수식에 로스컷 3회 연속 걸리면 매매정지가 되도록 돼 있습니다 문제점은 '23시 이후 로스컷이 될 경우 경우 익일 오전 7시가 되어야 매매를 재개'한다는 것 입니다 항상 감사합니다 ---- input : T(1),N(4),조건(2),매수전략(2),매도전략(0),매수기간(10),매도기간(0),매수청산(5),매도청산(0),매수트레일링스탑사용(0),매수트레일링스탑(0),매도트레일링스탑사용(0),매도트레일링스탑(0),매수로스컷위치(0),매도로스컷위치(0),손절(0); input : 플러스매도청산(0),마이너스매수청산(0),제로매수청산(0),제로매도청산(0),StartTime(070000),EndTime(070000),로스컷횟수(3),매매정지(10),매수포인트(0),매도포인트(0); var : LL(0),HH(0),최저가(0),최고가(0),cnt(0),sum(0),CL(0),CS(0),Lss(0),S(false),acounting(0),TS_L(0),TS_S(0),first(false),second(false); var : Tcond(false),S1(0),D1(0),TM(0),b_vv(0),losscut_point(0),hhh(0),lll(0); Array : VV[20](0); if 조건 == 1 then { Condition1 = L[4]>L[3] and L[3] >L[2] and H>H[1] and H[1]>H[2] and min(L[2],L[1],L) == L[2]; Condition2 = H[4]<H[3] and H[3]<H[2] and L<L[1] and L[1]<L[2] and max(H[2],H[1],H) == H[2] ; } else if 조건 ==2 then { Condition1 = L[4]>L[2] and H>H[2] and min(L[4],L[3],L[2],L[1],L) == L[2]; Condition2 = H[4]<H[2] and L<L[2] and max(H[4],H[3],H[2],H[1],H) == H[2] ; } if ( ( var2 == 0 and C > hh and vv[0] == -1 ) or LL == 0 or (CL !=0 and C > CL) ) and condition1 == true and Condition1[1] == False Then { var1 = var1+1; LL = L[2]; CL = C; CS = 0; if 매수트레일링스탑사용 == 1 then TS_L = L[매수트레일링스탑]; else TS_L = 0; if acounting <= 0 then acounting = 1; else acounting = acounting + 1; VV[0] = 1; For cnt = 1 to 19 { VV[cnt] = VV[cnt-1][1]; } if VV[N-1] != 0 Then { sum = 0; For cnt = 0 to N-1 { sum = sum + VV[cnt]; } } } else { if L < LL Then { var1 = 0; } } if (( var1 == 0 and C < ll and vv[0] ==1) or hh == 0 or (CS != 0 and C < CS) ) and condition2 == true and Condition2[1] == False Then { var2 = var2+1; HH = H[2]; CS = C; CL = 0; if 매도트레일링스탑사용 == 1 then TS_S = H[매도트레일링스탑]; else TS_S = 0; if acounting >= 0 then acounting = -1; else acounting = acounting - 1; VV[0] = -1; For cnt = 1 to 19 { VV[cnt] = VV[cnt-1][1]; } if VV[N-1] != 0 Then { sum = 0; For cnt = 0 to N-1 { sum = sum + VV[cnt]; } } } Else { if H > HH Then { var2 = 0; } } if Bdate != Bdate[1] Then { S1 = TimeToMinutes(stime); D1 = sdate; Condition4 = False; } if D1 > 0 then { if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; } #청산이 이루어질 때마다 아래와 같이 진행 if TotalTrades > TotalTrades[1] Then { Condition4 = False; losscut_point ==0; TS_L = 0; TS_S = 0; #3회 연속손실 여부 if PositionProfit(1) < 0 Then Lss = Lss+1; Else Lss = 0; if lss >= 로스컷횟수 Then { Condition4 = true; Lss = 0; } } #최근을 제외한 이전 4개 포인트 합 b_vv = vv[4]+vv[3]+vv[2]+vv[1]; #새로운 포인트가 나왔는지 확인하는 수식 if acounting != acounting[1] then S = true; else S = false; #매매조건 condition5 = sum >= 매수포인트 and vv[0] == 1; #매수조건 condition6 = sum <= 매도포인트 and vv[0] == -1; #매도조건 #돌파매수기준점 hhh = Highest(h,매수기간); lll = Lowest(l,매도기간); #거래시간 설정 if T == 0 Then Condition7 = (sTime > starttime and sTime < Endtime); Else if T == 1 Then Condition7 = (sTime > starttime or sTime < Endtime); #정해진 매매시간에 포지션이 없으면 if condition7 == true Then { if 매수전략 !=0 and 매수전략 == 1 then { #매수조조건에 만족하고 새로운 포인트가 나왔으며 최근봉 저가와 종가가 다르면 if condition5 == true and S == true and L != C then { #3번연속 손실이 발생했는지 확인 if condition4 == false then { Buy("1전략매수"); S = False; if marketposition == 0 then { losscut_point = L[매수로스컷위치]; } } if condition4 == true and TM >= TM[BarsSinceExit(1)]+ 매매정지 Then { Buy("1전략매수2"); S = False; if marketposition == 0 then { losscut_point = L[매수로스컷위치]; } } } } if 매도전략 !=0 and 매도전략 == 1 then { #매도조건에 만족하고 새로운 포인트가 나왔으며 최근봉 고가와 종가가 다르면 if condition6 == true and S == true and H != C then { #3번연속 손실이 발생했는지 확인 if condition4 == false then { sell("1전략매도"); S = False; if marketposition == 0 then { losscut_point = H[매도로스컷위치]; } } if condition4 == true and TM >= TM[BarsSinceExit(1)]+ 매매정지 Then { sell("1전략매도2"); S = False; if marketposition == 0 then { losscut_point = H[매도로스컷위치]; } } } } #전략2 실행 if 매수전략 != 0 and 매수전략 == 2 then { #매수조건을 만족하면 if condition5 == true then { #3번연속 손실이 발생했는지 확인 if condition4 == false and C > hhh[1] then { buy("돌파매수"); } if condition4 == true and C > hhh[1] and TM >= TM[BarsSinceExit(1)]+ 매매정지 Then { buy("돌파매수2"); } } } if 매도전략 != 0 and 매도전략 == 2 then { #매도조건을 만족하면 if condition6 == true Then { #3번연속 손실이 발생했는지 확인 if condition4 == false and C < lll[1] Then { sell("돌파매도"); } if condition4 == true and C < lll[1] and TM >= TM[BarsSinceExit(1)]+ 매매정지 Then { sell("돌파매도2"); } } } } #청산조건 if marketposition > 0 then { if 매수전략 == 1 then { if sum ==0 and b_vv == 2 and 제로매수청산 == 1 Then ExitLong("0포인트 매수청산"); if vv[0] == -1 and 마이너스매수청산 == 1 Then Exitlong("'-1' 매도청산"); ExitLong("매수로스컷",atstop,losscut_point); If 매수트레일링스탑사용 == 1 then Exitlong("매수트레일링스탑",atstop,TS_L); } if 매수전략 == 2 then { if 매수청산 != 0 then ExitLong("돌파매수청산",atstop,Lowest( Low ,매수청산)); } } if MarketPosition < 0 then { if 매도전략 == 1 then { if sum ==0 and b_vv == -2 and 제로매도청산 == 1 Then Exitshort("0포인트 매도청산"); if vv[0] == 1 and 플러스매도청산 == 1 Then ExitShort("'+1' 매도청산"); Exitshort("매도로스컷",atstop,losscut_point); If 매도트레일링스탑사용 == 1 then Exitshort("매도트레일링스탑",atstop,TS_S); } if 매도전략 == 2 then { if 매도청산 != 0 then ExitShort("돌파매도청산",atstop,Highest( High ,매도청산)); } } #타겟청산 SetStopLoss( 손절 ,PointStop);