커뮤니티
문의드립니다
아래 수식은 선물신호 발생시 2.0 가격에 근접한 옵션을 찾아서 매매하는 수식입니다
라는 오류가 뜹니다
잘못 된 부분을 수정 부탁드립니다
감사합니다
var T;
var CC, CallOrderCode;
var PP, PutOrderCode;
function Main_OnStart()
{
T = 0;
}
function C1_OnRiseSignal(Signal)
{
if (T <= 0 && Signal.signalKind == 1)
{
T = 1;
Main.MessageList("--------------------------------------------");
Main.MessageList("Buy신호 발생");
var UNum = Option.uppersATM;
var LNum = Option.lowersATM;
//콜옵션중 2.0에 가장 가까운 종목
//콜옵션 모든 종목을 현재가-2.0을 해서 절대값을 취해 저장
var CallCode = new Array(UNum+LNum+1);
var CallPrice = new Array(UNum+LNum+1);
for (var i = -LNum; i <= UNum; i++)
{
CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-2.0);
CallCode[i+LNum] = Option.GetATMCallRecent(i);
}
//저장된 절대값중 가장 작은 종목의 값과 종목코드 계산
var CC = 99999999;
CallOrderCode = "";
for (var i = -LNum; i <= UNum; i++)
{
if (CallPrice[i+LNum] < CC)
{
CC = CallPrice[i+LNum];
CallOrderCode = CallCode[i+LNum]
}
}
//풋옵션중 2.0에 가장 가까운 종목
//풋옵션 모든 종목을 현재가-2.0을 해서 절대값을 취해 저장
var PutCode = new Array(UNum+LNum+1);
var PutPrice = new Array(UNum+LNum+1);
for (var i = -UNum; i <= LNum; i++)
{
PutPrice[i+UNum] = Math.abs(Option.GetCurrent(1, i)-2.0);
PutCode[i+UNum] = Option.GetATMPutRecent(i);
}
//저장된 절대값중 가장 작은 종목의 값과 종목코드 계산
var PP = 99999999;
PutOrderCode = "";
for (var i = -UNum; i <= LNum; i++)
{
if (PutPrice[i+UNum] < PP)
{
PP = PutPrice[i+UNum];
PutOrderCode = PutCode[i+UNum];
}
}
//종목을 찾았으면
if (CC < 99999999 && PP < 99999999)
{
Account1.OrderBuy(CallOrderCode, 1, Option.GetAsk(CallOrderCode, 3), 0);
//Account1.OrderSell(PutOrderCode, 1, Option.GetBid(PutOrderCode, 5), 0);
}
}
if (T == 1 && Signal.signalKind == 2)
{
Main.MessageList("--------------------------------------------");
Main.MessageList("ExitLong신호 발생");
T = 0;
Account1.OrderSell(CallOrderCode, 1, Option.GetBid(CallOrderCode, 3), 0);
//Account1.OrderBuy(PutOrderCode, 1, Option.GetAsk(PutOrderCode, 5), 0);
}
if (T >= 0 && Signal.signalKind == 3)
{
T = -1;
Main.MessageList("--------------------------------------------");
Main.MessageList("Sell신호 발생");
var UNum = Option.uppersATM;
var LNum = Option.lowersATM;
//콜옵션중 2.0에 가장 가까운 종목
//콜옵션 모든 종목을 현재가-2.0을 해서 절대값을 취해 저장
var CallCode = new Array(UNum+LNum+1);
var CallPrice = new Array(UNum+LNum+1);
for (var i = -LNum; i <= UNum; i++)
{
CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-2.0);
CallCode[i+LNum] = Option.GetATMCallRecent(i);
}
//저장된 절대값중 가장 작은 종목의 값과 종목코드 계산
var CC = 99999999;
CallOrderCode = "";
for (var i = -LNum; i <= UNum; i++)
{
if (CallPrice[i+LNum] < CC)
{
CC = CallPrice[i+LNum];
CallOrderCode = CallCode[i+LNum]
}
}
//풋옵션중 2.0에 가장 가까운 종목
//풋옵션 모든 종목을 현재가-2.0을 해서 절대값을 취해 저장
var PutCode = new Array(UNum+LNum+1);
var PutPrice = new Array(UNum+LNum+1);
for (var i = -UNum; i <= LNum; i++)
{
PutPrice[i+UNum] = Math.abs(Option.GetCurrent(1, i)-2.0);
PutCode[i+UNum] = Option.GetATMPutRecent(i);
}
//저장된 절대값중 가장 작은 종목의 값과 종목코드 계산
var PP = 99999999;
PutOrderCode = "";
for (var i = -UNum; i <= LNum; i++)
{
if (PutPrice[i+UNum] < PP)
{
PP = PutPrice[i+UNum];
PutOrderCode = PutCode[i+UNum];
}
}
//종목을 찾았으면
if (CC < 99999999 && PP < 99999999)
{
//Account1.OrderSell(CallOrderCode, 1, Option.GetBid(CallOrderCode, 5), 0);
Account1.OrderBuy(PutOrderCode, 1, Option.GetAsk(PutOrderCode, 3), 0);
}
}
if (T == -1 && Signal.signalKind == 4)
{
Main.MessageList("--------------------------------------------");
Main.MessageList("ExitShort신호 발생");
T = 0;
//Account1.OrderBuy(CallOrderCode, 1, Option.GetAsk(CallOrderCode, 5), 0);
Account1.OrderSell(PutOrderCode, 1, Option.GetBid(PutOrderCode, 3), 0);
}
}
답변 1
예스스탁 예스스탁 답변
2026-03-23 16:59:36