예스스탁
예스스탁 답변
2013-10-30 18:48:36
안녕하세요
예스스탁입니다.
수식에 문제는 없어 보입니다.
테스트 결과 값이 정상적으로 발생합니다.
스팟에서 옵션데이터를 사용하기 위해서는
스크립트 객체화면에서 옵션객체를 추가하셔야 합니다.
또한 종합환경설정에서 스팟에서 옵션데이터 사용여부를
사용(거래소민감도)나 사용(로컬민감도)으로 선택하셔야
실제 옵션데이터가 스팟으로 제공됩니다.
수식에서 사용된 변수들의 선언에도 유의하시기 바랍니다.
이벤트 안에서 처리되면 해당 이벤트안에서만 값이 유효하고
다른 이벤트에서는 유효하지 않습니다.
변수에 값을 저장하고 사용하실때
다른 이벤트에서도 사용한다면 전역변수로
아니면 지역변수로 선언해 사용하시면 됩니다.
아래는 테스트한 식입니다.
이벤트에 대한 내용이 없어
타이머 이벤트를 사용했습니다.
스팟 적용후 5초후에 진입, 10초후 청산입니다.
var CC;
var CallOrderCode;
function Main_OnStart()
{
Main.MessageLog("시작");
Main.SetTimer(1, 5000);
Main.SetTimer(2, 10000);
}
function Main_OnTimer(nEventID)
{
if ( nEventID == 1)
{
Main.KillTimer(1);
//옵션 3.0 이하 종목 중 3.0 에 가장 가까운 콜/풋 종목을 찾음
var UNum = Option.uppersATM;
var LNum = Option.lowersATM;
var CallCode = new Array(UNum+LNum+1);
var CallPrice = new Array(UNum+LNum+1);
// 콜종목 찾기
for (var i = -LNum; i <= UNum; i++)
{
//값이 3.0 이하이면
if (Option.GetCurrent(0, i) <= 3.0)
{
CallPrice[i+LNum] = Option.GetCurrent(0, i);
CallCode[i+LNum] = Option.GetATMCallRecent(i);
}
else //값이 3.0 보다 크면
{
CallPrice[i+LNum] = -1;
CallCode[i+LNum] = -1;
}
}
CC = -1;
CallOrderCode = -1;
for (var iii = -LNum; iii <= UNum; iii++)
{
if (CallPrice[iii+LNum] > CC)
{
CC = CallPrice[iii+LNum];
CallOrderCode = CallCode[iii+LNum];
}
}
if (CC > -1)
{
Main.MessageList("CALL옵션 매수신호 발생");
Account1.OrderBuy(CallOrderCode, 1, Option.GetCurrentByCode(CallOrderCode), 0);
Main.MessageList("CALL옵션 신규매수 진입",CallOrderCode,Option.GetCurrentByCode(CallOrderCode),1);
}
}
if (nEventID == 2)
//콜매수 청산 (이때 디버깅창에서 청산되는 옵션종목(진입했던)) 과 그 청산가격을 확인하고자
//다음과 같이 "CallOrderCode" 와 Option.GetCurrentByCode(CallOderCode)를
//메세지리스트에 삽입하여 출력하는데 defined 나 NaN 이라는 에러메세지만
//뜹니다.)
{
Main.KillTimer(2);
Main.MessageList("CALL옵션 매수청산신호 발생");
Account1.OrderSell(CallOrderCode, 1, Option.GetCurrentByCode(CallOrderCode), 0);
Main.MessageList("CALL옵션 매수청산 실행",CallOrderCode,Option.GetCurrentByCode(CallOrderCode),1);
}
}
즐거운 하루되세요
> 마루아빠 님이 쓴 글입니다.
> 제목 : 선물지수로 옵션종목찾아서 진입,청산 하고 있는데..
> /*스크립트시작-----------------------------------------------------*/
var Vol;
var UNum; var LNum;
var CallCode; var CallPrice;
var PutCode; var PutPrice;
var CC; var PP;
var CallOrderCode; var PutOrderCode;
//선물지수 차트의 진입/청산 기준을 이용하여
//프리미엄 3.0 이하의 콜옵션과 풋옵션중에 3.0 에 가장 근접하는 콜/풋 종목을 찾고
//선물지수 차트의 기준에 따라 매매할려고 하는데,
//3.0 이하에서 가장 3.0 에 근접하는 종목이 찾아져서 매매에 적용되는지?
//또한 적용된 옵션의 진입/청산가격은 선물지수차트의 기준대로 실행되는지를
//검증하려고 다음과 같이 수식을 만들었습니다.
//테스트를 해 본 결과
//3.0 이하의 종목중 3.0 에 가장 근접하는 작업은 잘 이루어 지는 듯 한데
//그 진입종목과 진입가격 또는 청산종목과 청산가격이 제대로 출력이 안 되는 듯 합니다.
function Main_OnStart()
{
Main.MessageLog("시작");
}
if ( 콜옵션 신규진입조건~~~)
{ //옵션 3.0 이하 종목 중 3.0 에 가장 가까운 콜/풋 종목을 찾음
UNum = Option.uppersATM;
LNum = Option.lowersATM;
CallCode = new Array(UNum+LNum+1);
CallPrice = new Array(UNum+LNum+1);
PutCode = new Array(UNum+LNum+1);
PutPrice = new Array(UNum+LNum+1);
// 콜종목 찾기
for (var i = -LNum; i <= UNum; i++)
{
//값이 3.0 이하이면
if (Option.GetCurrent(0, i) <= 3.0)
{
CallPrice[i+LNum] = Option.GetCurrent(0, i);
CallCode[i+LNum] = Option.GetATMCallRecent(i);
}
else //값이 3.0 보다 크면
{
CallPrice[i+LNum] = -1;
CallCode[i+LNum] = -1;
}
}
var CC = -1;
var CallOrderCode = -1;
for (var iii = -LNum; iii <= UNum; iii++)
{
if (CallPrice[iii+LNum] > CC)
{
CC = CallPrice[iii+LNum];
CallOrderCode = CallCode[iii+LNum];
}
}
//콜매수(이때 디버깅창에서 진입옵션종목 과 그 진입가격을 확인하고자
//다음과 같이 "CallOrderCode" 와 Option.GetCurrentByCode(CallOderCode)를
//메세지리스트에 삽입하여 출력하는데 defined 나 NaN 이라는 에러메세지만
//뜹니다.)
if (CC > -1)
{
Main.MessageList("CALL옵션 매수신호 발생");
Account1.OrderBuy(CallOrderCode, Vol, Option.GetCurrentByCode(CallOrderCode), 0);
Main.MessageList("CALL옵션 신규매수 진입",CallOrderCode,Option.GetCurrentByCode(CallOrderCode),Vol);
}
}
if (콜옵션 매수청산 조건~~~)
//콜매수 청산 (이때 디버깅창에서 청산되는 옵션종목(진입했던)) 과 그 청산가격을 확인하고자
//다음과 같이 "CallOrderCode" 와 Option.GetCurrentByCode(CallOderCode)를
//메세지리스트에 삽입하여 출력하는데 defined 나 NaN 이라는 에러메세지만
//뜹니다.)
{
Main.MessageList("CALL옵션 매수청산신호 발생");
Account1.OrderSell(CallOrderCode, Vol, Option.GetCurrentByCode(CallOrderCode), 0);
Main.MessageList("CALL옵션 매수청산 실행",CallOrderCode,Option.GetCurrentByCode(CallOrderCode),Vol);
}
}