Search
📝

예제15. 선물 시초가 기준 ATM 콜/풋 차트생성

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
복사