커뮤니티

세번째 진입 시 진입필터 작동

프로필 이미지
목마와숙녀
2025-11-13 20:32:58
65
글번호 228036
답변완료

아래수식은 데이트레이딩 국내선물 적용하는 수식입니다.  진입명 s1은 한번만 들어가고 s2가 반복해서 들어갑니다.   s1-s2-s2-s2-s2-s2. . .  
s1 진입과 청산  (첫번째 ) s2 진입과 청산 (두번째) 위 2번의 과정에서 당일의 high-low 레인지를 파악합니다. 
요청내용 :  세번째 진입시 당일  high-low가 7.50 point 이상이면  세번째 진입 허용 (7.50 포인트 미만에서는 거래발생 없음).
항상  고맙습니다. 
*************************************************************************************************************************** 

input : 진입시간(084700),진입제한시간(140000); input : 거래횟수(20),누적패수(5),연속패수(2),누적패수조정(2),bigdown(15.00),조정거래횟수(7),조정진입제한시간(113000); input : b1(50),진입눌림1(9),진입돌파1(0); input : b2(160),진입눌림2(4),진입돌파2(0); input : als(40),atr1(0),atr2(135); input : bls(152),btr1(0),btr2(189); input : s1lock(120000),s1gl(8.12); input : s2lock(140000),s2gl(7.96); var : T1(0),entry(0),HH(0),LL(0),EH(0),EL(0),E1(0),H1(0),i1(0),S1(0),L1(0),V1(0); var : Tcond(false); var : loss(0),consecLoss(0),패수(0); Var : 당일거래횟수(0),진입끝시간(0),bigdownCond(False),익절가(0); //영업일변경 if bdate != bdate[1] Then { //손실횟수 초기화 0 loss = 0; //연속손실횟수 초기화 0 consecLoss = 0; //패수는 누적패수 패수 = 누적패수; 익절가 = 0; } //청산발생 if TotalTrades > TotalTrades[1] Then { //손실이면 if PositionProfit(1) < 0 Then { //loss 1씩 증가 loss = loss+1; //consecLoss 1씩 증가 consecLoss = consecLoss+1; //consecLoss이 3이면 패수를 누적패수에서 누적패수조정으로 변경 if consecLoss == 연속패수 Then { 패수 = 누적패수조정; } } Else //손실이 아니면 consecLoss으로 초기화 consecLoss = 0; if IsExitName("812",1) or IsExitName("796",1) Then 익절가 = ExitPrice(1); } //영업일 변경 if bdate != bdate[1] Then { //손실횟수 초기화 0 loss = 0; //연속손실횟수 초기화 0 consecLoss = 0; //패수는 누적패수 패수 = 누적패수; //당일거래횟수는 거래횟수 당일거래횟수 = 거래횟수; //진입끝시간은 진입제한시간 진입끝시간 = 진입제한시간; //bigdownCond는 False bigdownCond = False; } //bigdownCond가 False인 상태에서 //진입시간이후 조정진입제한시간 전에 시초가대비 BigDown이하 하락한 종가가 발생하면 if bigdownCond == False and stime >= 진입시간 and sTime < 조정진입제한시간 and L <= DayOpen-BigDown Then //전일종가대비이면 DayOpen-> DayClose(1) { //BigDown는 true bigdownCond = true; //당일거래횟수는 조정거래횟수로 변경 당일거래횟수 = 조정거래횟수; //진입끝시간은 조정진입제한시간로 변경 진입끝시간 = 조정진입제한시간; //진입제한시간이후에 발생했다면 Tcond가 False이므로 //Tcond는 true로 변경 if sTime >= 진입제한시간 and Tcond == False Then Tcond = true; } if TotalTrades > TotalTrades[1] and PositionProfit(1) < 0 Then loss = loss+1; if (sdate != sdate[1] and stime >= 진입시간) or (sdate == sdate[1] and stime >= 진입시간 and stime[1] < 진입시간) Then Tcond = true; if (sdate != sdate[1] and stime >= 진입끝시간) or (sdate == sdate[1] and stime >= 진입끝시간 and stime[1] < 진입끝시간) Then Tcond = false; if (sdate != sdate[1] and stime >= 진입시간) or (sdate == sdate[1] and stime >= 진입시간 and stime[1] < 진입시간) Then{ T1 = TotalTrades; E1 = 0; HH = H; } if stime >= 진입시간 then { if H > HH Then HH = H; if MarketPosition == 0 Then entry = TotalTrades-T1; Else entry = (TotalTrades-T1)+1; if MarketPosition == 0 and entry == 0 Then { if E1 == 0 and C <= HH-PriceScale*B1 Then { E1 = 1; L1 = L; i1 = index; V1 = HH; //시작점 종가 } if E1 == 1 and index > i1 then{ if L < L1 Then L1 = L; #고가가 시작봉종가보다 작을 때만 눌림체크 if H <= V1 and H >= L1+PriceScale*진입눌림1 Then{ E1 = 2; i1 = index; S1 = L1; } } //시작점 종가보다 높은 가격이 발생하면 초기화 if E1 >= 1 and H > V1 Then{ E1 = 0; HH = H; } if loss < 패수 and E1 == 2 and index > i1 and C <= S1-PriceScale*진입돌파1 and Tcond == true Then{ sell("s1"); } } if TotalTrades > TotalTrades[1] Then{ E1 = 0; HH = H; } if H > HH Then HH = H; if MarketPosition == 0 and entry >= 1 and entry < 당일거래횟수 Then{ if E1 == 0 and C <= HH-PriceScale*B2 Then{ E1 = 1; L1 = L; i1 = index; } if E1 == 1 and index > i1 then{ if L < L1 Then L1 = L; if H >= L1+PriceScale*진입눌림2 Then{ E1 = 2; i1 = index; S1 = L1; } } if loss < 패수 and E1 == 2 and index > i1 and C <= S1-PriceScale*진입돌파2 and Tcond == true and (익절가 == 0 or (익절가 > 0 and C < 익절가)) Then{ sell("s2"); E1 = 0; } } } if marketposition() == -1 and IsEntryName("s1") == true and stime<s1lock Then ExitShort("812",Atlimit,EntryPrice-s1gl); if marketposition() == -1 and IsEntryName("s2") == true and stime<s2lock Then ExitShort("796",Atlimit,EntryPrice-s2gl); if MarketPosition== -1 Then { if IsEntryName("s1") == true Then { SetStopLoss(PriceScale*als,PointStop); SetStopTrailing(PriceScale*atr2,PriceScale*atr1,PointStop,1); } Else if IsEntryName("s2") == true Then { SetStopLoss(PriceScale*bls,PointStop); SetStopTrailing(PriceScale*btr2,PriceScale*btr1,PointStop,1); } Else { SetStopLoss(0); SetStopTrailing(0,0); } } SetStopEndofday(151500);

시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-11-17 10:19:08

안녕하세요 예스스탁입니다. input : 진입시간(084700),진입제한시간(140000); input : 거래횟수(20),누적패수(5),연속패수(2),누적패수조정(2),bigdown(15.00),조정거래횟수(7),조정진입제한시간(113000); input : b1(50),진입눌림1(9),진입돌파1(0); input : b2(160),진입눌림2(4),진입돌파2(0); input : als(40),atr1(0),atr2(135); input : bls(152),btr1(0),btr2(189); input : s1lock(120000),s1gl(8.12); input : s2lock(140000),s2gl(7.96); var : T1(0),entry(0),HH(0),LL(0),EH(0),EL(0),E1(0),H1(0),i1(0),S1(0),L1(0),V1(0); var : Tcond(false); var : loss(0),consecLoss(0),패수(0); Var : 당일거래횟수(0),진입끝시간(0),bigdownCond(False),익절가(0); //영업일변경 if bdate != bdate[1] Then { //손실횟수 초기화 0 loss = 0; //연속손실횟수 초기화 0 consecLoss = 0; //패수는 누적패수 패수 = 누적패수; 익절가 = 0; } //청산발생 if TotalTrades > TotalTrades[1] Then { //손실이면 if PositionProfit(1) < 0 Then { //loss 1씩 증가 loss = loss+1; //consecLoss 1씩 증가 consecLoss = consecLoss+1; //consecLoss이 3이면 패수를 누적패수에서 누적패수조정으로 변경 if consecLoss == 연속패수 Then { 패수 = 누적패수조정; } } Else //손실이 아니면 consecLoss으로 초기화 consecLoss = 0; if IsExitName("812",1) or IsExitName("796",1) Then 익절가 = ExitPrice(1); } //영업일 변경 if bdate != bdate[1] Then { //손실횟수 초기화 0 loss = 0; //연속손실횟수 초기화 0 consecLoss = 0; //패수는 누적패수 패수 = 누적패수; //당일거래횟수는 거래횟수 당일거래횟수 = 거래횟수; //진입끝시간은 진입제한시간 진입끝시간 = 진입제한시간; //bigdownCond는 False bigdownCond = False; } //bigdownCond가 False인 상태에서 //진입시간이후 조정진입제한시간 전에 시초가대비 BigDown이하 하락한 종가가 발생하면 if bigdownCond == False and stime >= 진입시간 and sTime < 조정진입제한시간 and L <= DayOpen-BigDown Then //전일종가대비이면 DayOpen-> DayClose(1) { //BigDown는 true bigdownCond = true; //당일거래횟수는 조정거래횟수로 변경 당일거래횟수 = 조정거래횟수; //진입끝시간은 조정진입제한시간로 변경 진입끝시간 = 조정진입제한시간; //진입제한시간이후에 발생했다면 Tcond가 False이므로 //Tcond는 true로 변경 if sTime >= 진입제한시간 and Tcond == False Then Tcond = true; } if TotalTrades > TotalTrades[1] and PositionProfit(1) < 0 Then loss = loss+1; if (sdate != sdate[1] and stime >= 진입시간) or (sdate == sdate[1] and stime >= 진입시간 and stime[1] < 진입시간) Then Tcond = true; if (sdate != sdate[1] and stime >= 진입끝시간) or (sdate == sdate[1] and stime >= 진입끝시간 and stime[1] < 진입끝시간) Then Tcond = false; if (sdate != sdate[1] and stime >= 진입시간) or (sdate == sdate[1] and stime >= 진입시간 and stime[1] < 진입시간) Then{ T1 = TotalTrades; E1 = 0; HH = H; } if stime >= 진입시간 then { if H > HH Then HH = H; if MarketPosition == 0 Then entry = TotalTrades-T1; Else entry = (TotalTrades-T1)+1; if MarketPosition == 0 and entry == 0 Then { if E1 == 0 and C <= HH-PriceScale*B1 Then { E1 = 1; L1 = L; i1 = index; V1 = HH; //시작점 종가 } if E1 == 1 and index > i1 then { if L < L1 Then L1 = L; #고가가 시작봉종가보다 작을 때만 눌림체크 if H <= V1 and H >= L1+PriceScale*진입눌림1 Then { E1 = 2; i1 = index; S1 = L1; } } //시작점 종가보다 높은 가격이 발생하면 초기화 if E1 >= 1 and H > V1 Then { E1 = 0; HH = H; } if loss < 패수 and E1 == 2 and index > i1 and C <= S1-PriceScale*진입돌파1 and Tcond == true Then { sell("s1"); } } if TotalTrades > TotalTrades[1] Then { E1 = 0; HH = H; } if H > HH Then HH = H; if MarketPosition == 0 and entry >= 1 and entry < 당일거래횟수 Then { if E1 == 0 and C <= HH-PriceScale*B2 Then { E1 = 1; L1 = L; i1 = index; } if E1 == 1 and index > i1 then { if L < L1 Then L1 = L; if H >= L1+PriceScale*진입눌림2 Then { E1 = 2; i1 = index; S1 = L1; } } if loss < 패수 and E1 == 2 and index > i1 and C <= S1-PriceScale*진입돌파2 and Tcond == true and (익절가 == 0 or (익절가 > 0 and C < 익절가)) and ((entry == 1) or (entry >= 2 and DayHigh-DayLow >= 7.5)) Then { sell("s2"); E1 = 0; } } } if marketposition() == -1 and IsEntryName("s1") == true and stime<s1lock Then ExitShort("812",Atlimit,EntryPrice-s1gl); if marketposition() == -1 and IsEntryName("s2") == true and stime<s2lock Then ExitShort("796",Atlimit,EntryPrice-s2gl); if MarketPosition== -1 Then { if IsEntryName("s1") == true Then { SetStopLoss(PriceScale*als,PointStop); SetStopTrailing(PriceScale*atr2,PriceScale*atr1,PointStop,1); } Else if IsEntryName("s2") == true Then { SetStopLoss(PriceScale*bls,PointStop); SetStopTrailing(PriceScale*btr2,PriceScale*btr1,PointStop,1); } Else { SetStopLoss(0); SetStopTrailing(0,0); } } SetStopEndofday(151500); 즐거운 하루되세요