Search
📝

예제14. 특정 가격 이하의 콜/풋 옵션 중 가장 높은 가격의 종목을 선정

아래 예제는 1.0 이하의 콜과 풋 종목 중에 가장 높은 가격의 콜과 풋 종목을 찾아 주문하는 식입니다.
1.
전략내용
차트에서 매수신호가 발생하면 콜과 풋의 현재가를 기준으로 1.0이하의 종목을 찾아 매수합니다.
2.
스크립트 객체화면 설정
차트객체 : 객체명 Chart1 → 속성에서 차트와 동일 아이디 지정 옵션객체 : 객체명 Option → 속성에서 주가지수옵션을 지정 계좌객체 : 객체명 Account1 → 속성에서 계좌번호 선택
3.
스팟수식
var 기준값 = 3.0; var CallPrice,CallCode; var PutPrice,PutCode; //차트에서 신호가 발생하면 function Chart1_OnRiseSignal(Signal) { //해당 신호가 매수신호이면 if (Signal.signalKind == 1) { Main.MessageList("--------------------------------------------"); Main.MessageList("매수신호 발생"); //1.0이하 중 가장 큰 가격을 가지는 종목을 찾음 //ATM위 행사가 갯수 var UNum = Option1.uppersATM; //ATM아래 행사가 갯수 var LNum = Option1.lowersATM; //콜풋 종목 찾기 CallPrice = 0; CallCode = ""; PutPrice = 0; PutCode = ""; //UNum,LNum은 ATM기준 위아래 행사가 갯수이므로 //for문은 LNum의 역수부터 시작해서 UNum까지 1씩 증가하면서 변수에 반환하도록 하고 for (var i = -LNum; i <= UNum; i++) { //콜옵션은 ATM기준 위행사가 +단계, 아래가 -단계이므로 //콜함수는 i값 그대로 사용해서 종목을 지정 var CP = Option1.GetCurrent(0, i); //콜종목 현재가가 기준값이하이고 //첫 1.0이하인 종목은 해당 종목으로 CallPrice와 CallOrderCode지정하고 //1.0이하인 두번째 종목부터는 기준 저장된 CallPrice보다 현재가가 더 크면 지정 if (CP <= 기준값 && (CallPrice == 0 || (CallPrice > 0 && CP > CallPrice))) { CallPrice = CP; CallCode = Option1.GetATMCallRecent(i, 0); Main.MessageList("콜:",i,CP,CallPrice); } //풋옵션은 ATM기준 위행사가 -단계, 아래가 +단계이므로 //콜함수는 i값의 역수를 취해서 종목을 지정 var PP = Option1.GetCurrent(1, -i); //풋종목 현재가가 기준값이하이고 //첫 1.0이하인 종목은 해당 종목으로 PutPrice와 PutOrderCode 지정하고 //1.0이하인 두번째 종목부터는 기준 저장된 CallPrice보다 현재가가 더 크면 지정 if (PP <= 기준값 && (PutPrice == 0 || (PutPrice > 0 && PP > PutPrice))) { PutPrice = PP; PutCode = Option1.GetATMPutRecent(-i, 0); //Main.MessageList("풋:",-i,PP,PutPrice); } } Main.MessageList("콜종목코드:",CallCode,"|콜현재가 :",CallPrice); Main.MessageList("풋종목코드:",PutCode,"|풋현재가 :",PutPrice); if (CallPrice > 0 && PutPrice > 0) { Main.MessageList("콜풋 모두 기준값 이하의 종목이 있을때 매수"); //콜옵션종목 매수 Account1.OrderBuy(CallCode, 1, Option1.GetAskByCode(CallCode, 2), 1); //콜옵션종목 매수 Account1.OrderBuy(PutCode, 1, Option1.GetAskByCode(PutCode, 2), 1); } else { if (CallPrice == 0) { Main.MessageList(기준값,"이하 콜종목없음"); } if (PutPrice == 0) { Main.MessageList(기준값,"이하 풋종목없음"); } } } }
JavaScript
복사