Search
Duplicate
📝

Opening Range Arrow 전략

#공통 전략
국내 선물기준으로 2계약으로 진입해서 분할로 청산하는 로직입니다. 매수, 매도 각 1번씩 최대 2번만 진입합니다. 장 시작 후 N분 동안 생긴 박스(고가/저가) 범위가 1~3포인트(적당한 변동폭)일 때만, 박스 돌파 방향으로 2계약 진입하는 브레이크아웃 전략
첫진입 상단 돌파시 2계약 매수진입 하단 이탈시 2계약 매도진입
두번째 진입 첫 진입 후 1포인트 이상 수익 없이 중간가로 돌아오면 스위칭
청산 1포인트/2포인트에 분할 익절하고, 첫 진입 때는 중간값(Half) 이탈 시 리버스, 두 번째 진입부터는 박스 반대단 터치 시 손절 후 그날은 종료입니다.
종가청산 15시 30분에 포지션이 있으면 청산
input : N(30); var : Hval(0),Lval(0),Half(0); var : S1(0),D1(0),TT(0),T1(0),TM(0),EntryCount(0); TT = TotalTrades; if Bdate != Bdate[1] Then { S1 = TimeToMinutes(stime); D1 = sdate; T1 = TT[1]; } if D1 > 0 then { //당일진입 횟수 EntryCount = TT-T1+IFF(MarketPosition != 0,1,0); //장시작후 경과한 분 if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; //장시작 후 N분이 경과하기 전까지의 당일 고가 저가와 중간값 if TM < N분 Then { Hval = DayHigh; Lval = DayLow; Half = (Hval+Lval)/2; } //장시작후 N분이내 최고가와 최저가의 범위(변동폭)가 1~3 사이일 때만 거래 if (Hval-Lval) > 1 and (Hval-Lval) < 3 then { //장시작후 N이 경과했고 당일 진입이 없었으면(첫진입) if TM >= N분 and EntryCount == 0 Then { Buy("b",AtStop,Hval,2); // Hval(고가) 위로 상승 돌파 시 매수 스탑 2계약 진입 Sell("s",AtStop,Lval,2);// Lval(저가) 아래로 하락 돌파 시 매도 스탑 2계약 진입 } } // ===== 롱 포지션일 때 청산/리버스 로직 ===== if MarketPosition == 1 Then { //진입가+1포인트에 1계약 익절 ExitLong("매수익절1",AtLimit,EntryPrice+1,"",1,1); //진입가+2포인트에 1계약 익절 ExitLong("매수익절2",AtLimit,EntryPrice+2,"",1,1); //현재수량이 진입후 최대수량이면(진입후 분할청산없음) if CurrentContracts == MaxContracts Then { //당일 첫진입이면 if EntryCount == 1 Then { //Half(중간값) 아래로 떨어지면 2계약 매도(리버스) sell("리버스매도",AtStop,Half,2); } Else //당일두번째 진입이면 { // Lval(저가)까지 밀리면 스탑으로 청산 후 당일거래 종료 ExitLong("매수손절",AtStop,Lval,"",2,1); } } Else //일부청산후(매수익절1 발생후) { //진입가로 돌아가면 나머지 청산 -> 당일거래 종료 ExitLong("매수본절",AtStop,EntryPrice,"",1,1); } } // ===== 숏 포지션일 때 청산/리버스 로직 ===== if MarketPosition() == -1 Then { //진입가-1포인트에 1계약 익절 ExitShort("매도익절1",AtLimit,EntryPrice-1,"",1,1); //진입가-2포인트에 1계약 익절 ExitShort("매도익절2",AtLimit,EntryPrice-2,"",1,1); //현재수량이 진입후 최대수량이면(진입후 분할청산없음) if CurrentContracts == MaxContracts Then { //당일 첫진입이면 if EntryCount == 1 Then { // Half(중간값) 위로 상승하면 2계약 매수(리버스) buy("리버스매수",AtStop,Half,2); } Else { // Hval까지 반등하면 스탑으로 나머지 청산 ExitShort("매도손절",AtStop,Hval,"",2,1); } } Else { ExitShort("매도본절",AtStop,EntryPrice,"",1,1); } } } SetStopEndofday(153000); // 15:30:00 정각(예: 장 마감 시점)에 포지션 강제 정리하는 종가 스탑
JavaScript
복사