#공통 전략
국내 선물기준으로 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
복사
