1.
전략내용
선물시초가와 가장 가까운 ATM을 찾고
해당 ATM의 콜과 풋차트를 1분봉으로 시스템을 적용해서 생성 후에
신호 발생하면 주문을 집행하는 수식입니다.
2.
스크립트 객체화면 설정
종목객체 : 객체명 MarketData1 → 속성에서 KP200선물로 지정
옵션객체 : 객체명 Option1 → 속성에서 주가지수옵션을 지정
계좌객체 : 객체명 Account1 → 속성에서 계좌번호 선택
3.
스팟수식
/*
KP200 선물 시초가 기준으로
가장 근접한 ATM 행사가를 찾고
해당 ATM의 차트를 생성
*/
var SystemName = "시스템명";
var CallCode, PutCode;
var CallChart, PutChart;
var CallMK, PutMK;
function Main_OnStart()
{
ItemSelect = false;
}
function Main_OnUpdateMarket(sItemCode, lUpdateID)
{
if (ItemSelect == false && MarketData1.open > 0)
{
ItemSelect = true;
var Open1 = MarketData1.open;
var Open2 = Math.floor(Open1/2.5)*2.5;
var ATM = Open2;
if (Open1-Open2 >= 1.25)
{
ATM = Open2+2.5;
}
Main.MessageList("시초가 : ",Open1,"/ ATM : ",ATM);
CallCode = Option1.GetCodeByExercisePrice(0, ATM);
PutCode = Option1.GetCodeByExercisePrice(1, ATM);
Main.MessageList("CallCode : ",CallCode,"/ PutCode : ",PutCode);
var ChartSet = new ReqChartItem(CallCode,1,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false);
var SystemSet = new SystemInfo(SystemName);
Main.MessageList("콜차트객체요청 : ",CallCode);
Main.ReqChartEx(ChartSet,SystemSet);
}
}
function Main_OnRcvChartEx(ChartEx)
{
if (ChartEx.GetCode(1) == CallCode)
{
Main.MessageList("콜차트객체생성 : ",ChartEx.GetCode(1));
CallChart = ChartEx;
Main.MessageList("콜종목객체요청 : ",CallCode);
Main.ReqMarketData(CallCode);
}
if (ChartEx.GetCode(1) == PutCode)
{
Main.MessageList("풋차트객체생성 : ",ChartEx.GetCode(1));
PutChart = ChartEx;
Main.MessageList("풋종목객체요청 : ",PutCode);
Main.ReqMarketData(PutCode);
}
}
function Main_OnRcvMarketData(MarketData)
{
if (MarketData.code == CallCode)
{
CallMK = MarketData;
Main.MessageList("콜종목객체생성 : ",CallMK.code);
var ChartSet = new ReqChartItem(PutCode,1,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false);
var SystemSet = new SystemInfo(SystemName);
Main.MessageList("풋차트객체요청 : ",PutCode);
Main.ReqChartEx(ChartSet,SystemSet);
}
if (MarketData.code == PutCode)
{
PutMK = MarketData;
Main.MessageList("풋종목객체생성 : ",PutMK.code);
}
}
function Main_OnRiseSignal(ChartEx, Signal)
{
if (ChartEx.GetCode(1) == CallChart.GetCode(1))
{
if (Signal.signalKind == 1)
{
Main.MessageList("콜차트 매수진입신호 발생");
Account1.OrderBuy(CallChart.GetCode(1), Signal.count,CallMK.Ask(2),0);
}
if (Signal.signalKind == 2)
{
Main.MessageList("콜차트 매수청산신호 발생");
Account1.OrderSell(CallChart.GetCode(1), Signal.count,CallMK.Bid(2),0);
}
if (Signal.signalKind == 3)
{
Main.MessageList("콜차트 매도진입신호 발생");
Account1.OrderSell(CallChart.GetCode(1), Signal.count,CallMK.Bid(2),0);
}
if (Signal.signalKind == 4)
{
Main.MessageList("콜차트 매도청산신호 발생");
Account1.OrderBuy(CallChart.GetCode(1), Signal.count,CallMK.Ask(2),0);
}
}
if (ChartEx.GetCode(1) == PutChart.GetCode(1))
{
if (Signal.signalKind == 1)
{
Main.MessageList("풋차트 매수진입신호 발생");
Account1.OrderBuy(PutChart.GetCode(1), Signal.count,PutMK.Ask(2),0);
}
if (Signal.signalKind == 2)
{
Main.MessageList("풋차트 매수청산신호 발생");
Account1.OrderSell(PutChart.GetCode(1), Signal.count,PutMK.Bid(2),0);
}
if (Signal.signalKind == 3)
{
Main.MessageList("풋차트 매도진입신호 발생");
Account1.OrderSell(PutChart.GetCode(1), Signal.count,PutMK.Bid(2),0);
}
if (Signal.signalKind == 4)
{
Main.MessageList("풋차트 매도청산신호 발생");
Account1.OrderBuy(PutChart.GetCode(1), Signal.count,PutMK.Ask(2),0);
}
}
}
JavaScript
복사