커뮤니티

문의드립니다

프로필 이미지
tktmsl
2026-03-12 09:17:17
41
글번호 231060
답변완료

아래 수식은 선물신호 발생시 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

안녕하세요 예스스탁입니다. 올리신 수식에서 옵션 객체명은 Option입니다. 스크립트 객체화면에서 옵션객체 추가하시고 객체명을 선택하면 속성에서 변경하실 수 있습니다. 객체명을 Option으로 지정해 주시고 상품종류 지정하시면 됩니다.

즐거운 하루되세요