Search
📝

예제26. 만기일 청산

주가지수 선물의 만기일은 3, 6, 9, 12월의 두 번째 목요일이며, 월물(Monthly) 옵션은 매월 두 번째 목요일, 위클리(Weekly) 옵션은 별도로 지정된 요일입니다.
만기일 자동 청산 등의 기능을 구현하기 위해, 자바스크립트의 Date 객체를 활용하여 '오늘이 두 번째 목요일인지' 판별하는 로직을 작성할 수 있습니다. 하지만 만기일이 공휴일일 경우, 만기일이 직전 거래일로 앞당겨지거나 다음 거래일로 순연되는 변수가 존재합니다. 따라서 단순히 두 번째 목요일로만 고정하여 수식을 지정하는 것은 실거래 환경에서 오류를 유발할 수 있습니다. 이때 사용하실 수 있는 객체가 옵션객체입니다. 옵션객체에는 지정한 상품의 잔존일을 리턴해 주는 함수(Option1.GetRemainDays(nCallPut, nATMLevel))가 있으므로 옵션 거래를 하지 않는 전략이더라도 만기일을 알고자 하는 경우에는 옵션객체를 추가해서 잔존일 리턴받아 이용하시면 됩니다.
1.
전략내용
만기일이면 15시 15분에 보유종목 시장가로 일괄청산 만기일이 아니면 15시 30분에 보유종목 일괄 청산
2.
스크립트 객체화면 설정
a.
옵션객체 옵션객체 추가 후 속성에서 객체명은 Option1, 상품은 코스피200옵션으로 지정
b.
계좌객체
계좌객체를 추가한 후 속성에서 객체명은 Account1로 지정하고 주문 낼 계좌번호를 지정합니다.
3.
스팟수식
function Main_OnStart() { Main.SetTimer(1, 10000); //10초 타이머 } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1) { var Month = d.getMonth()+1; var Remain = Option1.GetRemainDays(0, 0); ////잔존일 1이면 옵션만기일 var 만기일 = Remain == 1; //선물만기이면 //var 만기일 = Remain == 1 && Month%3 == 0; Main.MessageList(HHMMSS,만기일,3%3); if ((만기일 == true && HHMMSS >= 151500) || (만기일 == false && HHMMSS >= 153000)) { Main.KillTimer(1); Main.MessageList(HHMMSS,"시장가 일괄청산"); var num = Account1.GetTheNumberOfBalances(); for(var i = 0; i < num; i++) { Account1.SetBalance(i) if (Account1.Balance.position == 1) { Account1.OrderBuy(A1.Balance.code,Account1.Balance.count,0,1); } if (Account1.Balance.position == 2) { Account1.OrderSell(A1.Balance.code,Account1.Balance.count,0,1); } } } } }
JavaScript
복사