아래 예제는 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
복사
