예스스탁
예스스탁 답변
2015-04-15 11:57:14
안녕하세요
예스스탁입니다.
2.0에 가장가까운 옵션종목을 거래하게 수정했습니다.
var CallOrderCode,PutOrderCode;
function Main_OnStart()
{
T = 0;
}
function Chart1_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, 5), 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, 5), 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, 5), 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, 5), 0);
}
}
즐거운 하루되세요
> 탄젠트80 님이 쓴 글입니다.
> 제목 : 예스스팟 수식문의
>
안녕하세요 언제나 훌륭한 답변해 주셔서 감사합니다.
예스스팟 메뉴얼에 있는 예제5번 합성선물에 관한 사항인데요
예제.선물차트에서 매수신호가 발생하면 ATM 콜매수+풋매도
선물차트에서 매수청산신호가 발생하면 매수신호시 주문종목 청산
선물차트에서 매도신호가 발생하면 ATM 콜매도+풋매수
선물차트에서 매도청산신호가 발생하면 매도신호시 주문종목 청산
상기 예제를 ATM 등가격이 아닌 프리미엄 2.0 에 가장 가까운 옵션 종목으로 진입청산하고
싶습니다. 진입가격은 +-5호가 입니다.
초보라 하나하나 따라서 하는데 쉽지가 않네요 아래는 메뉴얼에 있는 로직입니다.
========================= 예제로직 ===============================
/*스크립트시작-----------------------------------------------------*/
var Start;
var BuyCallCode;
var BuyPutCode;
var SellCallCode;
var SellPutCode;
function Main_OnStart()
{
Main.MessageLog("시작");
Start = 0;
}
function C1_OnRiseSignal(Signal)
{
Main.MessageLog("신호완성/"+Signal.signalKind);
if (Signal.signalKind == 1 )
{
Start = 1;
BuyCallCode = Option.GetATMCallRecent(0);
BuyPutCode = Option.GetATMPutRecent(0);
var BuyCallPrice = Option.GetAskByCode(BuyCallCode,2);
var BuyPutPrice = Option.GetBidByCode(BuyPutCode,2);
A1.OrderBuy(BuyCallCode, Vol, BuyCallPrice, 0);
A1.OrderSell(BuyPutCode, Vol, BuyPutPrice, 0);
Main.MessageLog("합성선물매수");
}
if (Start == 1 && Signal.signalKind == 2 )
{
var BxCallPrice = Option.GetBidByCode(BuyCallCode, 2);
var BxPutPrice = Option.GetAskByCode(BuyPutCode, 2);
A1.OrderSell(BuyCallCode, Vol, BxCallPrice, 0);
A1.OrderBuy(BuyPutCode, Vol, BxPutPrice, 0);
Main.MessageLog("합성선물매수청산");
}
if (Signal.signalKind == 3 )
{
Start = 1;
SellCallCode = Option.GetATMCallRecent(0);
SellPutCode = Option.GetATMPutRecent(0);
var SellCallPrice = Option.GetBidByCode(SellCallCode,2);
var SellPutPrice = Option.GetAskByCode(SellPutCode,2);
A1.OrderSell(SellCallCode, Vol, SellCallPrice , 0);
A1.OrderBuy(SellPutCode, Vol, SellPutPrice, 0);
Main.MessageLog("합성선물매도");
}
if (Start == 1 && Signal.signalKind == 4 )
{
var SxCallPrice = Option.GetAskByCode(SellCallCode, 2);
var SxPutPrice = Option.GetBidByCode(SellPutCode, 2);
A1.OrderBuy(SellCallCode, Vol, SxCallPrice, 0);
A1.OrderSell(SellPutCode, Vol, SxPutPrice, 0);
Main.MessageLog("합성선물매도청산");
}
}
/*스크립트끝-------------------------------------------------------*/
========================= 로 직 끝 ===============================
소중한 답변 기다리겠습니다. 수고하세요