커뮤니티

예스스팟 수식문의

프로필 이미지
탄젠트80
2015-04-10 12:28:59
1800
글번호 223418
답변완료
안녕하세요 언제나 훌륭한 답변해 주셔서 감사합니다. 예스스팟 메뉴얼에 있는 예제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("합성선물매도청산"); } } /*스크립트끝-------------------------------------------------------*/ ========================= 로 직 끝 =============================== 소중한 답변 기다리겠습니다. 수고하세요
답변 1
프로필 이미지

예스스탁 예스스탁 답변

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("합성선물매도청산"); } } /*스크립트끝-------------------------------------------------------*/ ========================= 로 직 끝 =============================== 소중한 답변 기다리겠습니다. 수고하세요