커뮤니티

옵션 만기일 거래 시스템

프로필 이미지
몬스터
2019-04-15 09:27:31
2846
글번호 224804
답변완료
수고하십니다. 아래의 옵션매매 시스템을 보완하고 싶습니다. 1. 장개시시 잔고종목 및 수량 확인 2. 청산신호시 잔고수량을 확인하여 전체 잔고 종목 및 수량을 청산 3. 만기일 1500시이후 옵션 당월물 보유수량 전체를 청산하고 차월물 진입 ---------------------------------------------------------------------- var Start; var BuyC1_code; var BuyC2_code; var BuyP1_code; var BuyP2_code; var SellC1_code; var SellC2_code; var SellP1_code; var SellP2_code; function Main_OnStart() { Main.MessageLog("시작"); Start = 0; } function Chart1_OnRiseSignal(Signal) { Main.MessageLog("신호완성/"+Signal.signalKind); //Buy 신호발생 if (Signal.signalKind == 1 ) { Start = 1; SellP1_code = Option.GetATMPutRecent(0,0); //풋 ATM 종목코드 var SellP1_price = Option.GetBidByCode(SellP1_code,2); var Vol = Signal.count; //신호수량 Account1.OrderSell(SellP1_code, Vol, SellP1_price, 0); Main.MessageLog("상방합성선물매수"); } //매수청산신호 if (Start == 1 && Signal.signalKind == 3 ) { var BxP1_price = Option.GetAskByCode(SellP1_code, 2); var Vol = Signal.count; //신호수량 Account1.OrderBuy(SellP1_code, Vol, BxP1_price, 0); Main.MessageLog("상방합성선물매수청산"); } //Sell 신호발생 if (Signal.signalKind == 3 ) { Start = 1; SellC1_code = Option.GetATMCallRecent(0,0); //콜 ATM 종목코드 var SellC1_price = Option.GetBidByCode(SellC1_code,2); var Vol = Signal.count; //신호수량 Account1.OrderSell(SellC1_code, Vol, SellC1_price , 0); Main.MessageLog("하방합성선물매도"); } //매도청산신호 if (Start == 1 && Signal.signalKind == 1 ) { var SxC1_price = Option.GetAskByCode(SellC1_code, 2); var Vol = Signal.count; //신호수량 Account1.OrderBuy(SellC1_code, Vol, SxC1_price, 0); Main.MessageLog("하방합성선물매도청산"); } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2019-04-24 13:58:56

안녕하세요 예스스탁입니다. 청산시에 잔고확인해 잔고에 있는 수량과 신호발생 중 낮은 수량으로 청산하게 수정하고 만기일에는 15시에 보유수량 모두 청산하고 동일행사가의 콜풋으로 진입하게 작성했습니다. 스팟답변은 가이드입니다. 내용 참고하셔서 수정보완하시기 바랍니다. var Start; var BuyC1_code; var BuyC2_code; var BuyP1_code; var BuyP2_code; var SellC1_code; var SellC2_code; var SellP1_code; var SellP2_code; function Main_OnStart() { Main.MessageLog("시작"); Start = 0; //옵션 만기일이면 타이머셋팅 5초간격 if (Option.GetRemainDays(0,0) == 1) { Main.SetTimer(1, 5000); } } function Chart1_OnRiseSignal(Signal) { Main.MessageLog("신호완성/"+Signal.signalKind); //Buy 신호발생 if (Signal.signalKind == 1 ) { Start = 1; SellP1_code = Option.GetATMPutRecent(0,0); //풋 ATM 종목코드 var SellP1_price = Option.GetBidByCode(SellP1_code,2); var Vol = Signal.count; //신호수량 Account1.OrderSell(SellP1_code, Vol, SellP1_price, 0); Main.MessageLog("상방합성선물매수"); } //매수청산신호 if (Start == 1 && Signal.signalKind == 3 ) { Account1.SetBalance(SellP1_code, 0) if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { var BxP1_price = Option.GetAskByCode(Account1.Balance.code, 2); Account1.OrderBuy(Account1.Balance.code,Math.min(Account1.Balance.count,Signal.count), BxP1_price, 0); } Main.MessageLog("상방합성선물매수청산"); } //Sell 신호발생 if (Signal.signalKind == 3 ) { Start = 1; SellC1_code = Option.GetATMCallRecent(0,0); //콜 ATM 종목코드 var SellC1_price = Option.GetBidByCode(SellC1_code,2); var Vol = Signal.count; //신호수량 Account1.OrderSell(SellC1_code, Vol, SellC1_price , 0); Main.MessageLog("하방합성선물매도"); } //매도청산신호 if (Start == 1 && Signal.signalKind == 1 ) { Account1.SetBalance(SellC1_code, 0): if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { var SxC1_price = Option.GetAskByCode(Account1.Balance.code, 2); Account1.OrderBuy(Account1.Balance.code,Math.min(Account1.Balance.count,Signal.count), SxC1_price, 0); } Main.MessageLog("하방합성선물매도청산"); } } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //15시 이후이면 if (nEventID == 1 && HHMMSS >= 150000) { //타이머종료 Main.KillTimer(1); //전체 종목수 var num = Account1.GetTheNumberOfBalances(); //전체 종목 중 옵션만 청산하고 차월물로 진입 for(var i = 0 ; i < num ; i++) { //잔고셋팅 Account1.SetBalance(i); //옵션함수로 해당 종목이 옵션인지 확인 if (Option.GetCurrent(Account1.Balance.code) > 0 && Account1.Balance.count > 0) { //종목코드 var cc = Account1.Balance.code; //잔고수량 var vv = Account1.Balance.count; //매도포지션이면 if (Account1.Balance.position == 1) { //청산 Account1.OrderBuy(cc, vv,Option.GetAsk(cc, 5),0); //차근월물 코드 찾기 var strike = Option.GetExercisePrice(cc); //잔고종목이 콜이면 if (cc == Option.GetCodeByExercisePrice(0,strike)) var NextMonth = Option.GetCodeByExercisePrice(2, strike); else //잔고종목이 풋이면 var NextMonth = Option.GetCodeByExercisePrice(3, strike); //동일행사가의 차근월물 매도주문 Account1.OrderSell(NextMonth,vv,Option.GetBid(NextMonth,5),0); } //매수포지션이면 if (Account1.Balance.position == 2) { //청산 Account1.OrderSell(cc, vv,Option.GetBid(cc, 5),0); //차근월물 코드 찾기 var strike = Option.GetExercisePrice(cc); //잔고종목이 콜이면 if (cc == Option.GetCodeByExercisePrice(0,strike)) var NextMonth = Option.GetCodeByExercisePrice(2, strike); else //잔고종목이 풋이면 var NextMonth = Option.GetCodeByExercisePrice(3, strike); //동일행사가의 차근월물 매수주문 Account1.OrderBuy(NextMonth,vv,Option.GetAsk(NextMonth,5),0); } } } } } 즐거운 하루되세요 > 몬스터 님이 쓴 글입니다. > 제목 : 옵션 만기일 거래 시스템 > 수고하십니다. 아래의 옵션매매 시스템을 보완하고 싶습니다. 1. 장개시시 잔고종목 및 수량 확인 2. 청산신호시 잔고수량을 확인하여 전체 잔고 종목 및 수량을 청산 3. 만기일 1500시이후 옵션 당월물 보유수량 전체를 청산하고 차월물 진입 ---------------------------------------------------------------------- var Start; var BuyC1_code; var BuyC2_code; var BuyP1_code; var BuyP2_code; var SellC1_code; var SellC2_code; var SellP1_code; var SellP2_code; function Main_OnStart() { Main.MessageLog("시작"); Start = 0; } function Chart1_OnRiseSignal(Signal) { Main.MessageLog("신호완성/"+Signal.signalKind); //Buy 신호발생 if (Signal.signalKind == 1 ) { Start = 1; SellP1_code = Option.GetATMPutRecent(0,0); //풋 ATM 종목코드 var SellP1_price = Option.GetBidByCode(SellP1_code,2); var Vol = Signal.count; //신호수량 Account1.OrderSell(SellP1_code, Vol, SellP1_price, 0); Main.MessageLog("상방합성선물매수"); } //매수청산신호 if (Start == 1 && Signal.signalKind == 3 ) { var BxP1_price = Option.GetAskByCode(SellP1_code, 2); var Vol = Signal.count; //신호수량 Account1.OrderBuy(SellP1_code, Vol, BxP1_price, 0); Main.MessageLog("상방합성선물매수청산"); } //Sell 신호발생 if (Signal.signalKind == 3 ) { Start = 1; SellC1_code = Option.GetATMCallRecent(0,0); //콜 ATM 종목코드 var SellC1_price = Option.GetBidByCode(SellC1_code,2); var Vol = Signal.count; //신호수량 Account1.OrderSell(SellC1_code, Vol, SellC1_price , 0); Main.MessageLog("하방합성선물매도"); } //매도청산신호 if (Start == 1 && Signal.signalKind == 1 ) { var SxC1_price = Option.GetAskByCode(SellC1_code, 2); var Vol = Signal.count; //신호수량 Account1.OrderBuy(SellC1_code, Vol, SxC1_price, 0); Main.MessageLog("하방합성선물매도청산"); } }