커뮤니티

외가격 풋옵션 매수

프로필 이미지
좌오비우오비
2026-07-02 18:05:14
123
글번호 232662
답변완료

아래 내용이 처리될 수 있도록 수식 부탁드립니다.


데이트레이딩

외가격 PUT 옵션 매수 플레이


  순서

1.  사전조건 : 코스피200지수선물 고점에서 50포인트 하락 발생

2. 140000 이후 PUT옵션 0.02 체결 발생한 행사가에 0.03(1틱 높은 주문 ) 1개 매수 (141459까지 체결 없으면 주문 취소)

3. 141500 이후 PUT옵션 0.03 체결 발생한 행사가에 0.04(1틱 높은 주문 ) 1개 매수(142959까지 체결 없으면 주문 취소)

4. 143000 이후 PUT옵션 0.05 체결 발생한 행사가에 0.06(1틱 높은 주문 ) 1개 매수(144459까지 체결 없으면 주문 취소)

5. 144500 이후  PUT옵션 0.07 체결 발생한 행사가에 0.08(1틱 높은 주문 ) 1개 매수(145959까지 체결 없으면 주문 취소)

6.   익절

        140000~141459 체결 건 :  8.90

        141500~142959 체결 건 :  7.90

        143000~144459 체결 건 : 6.90

        144500~145959 체결 건 : 5.90


7.    end of day : 151800 (익절이 없을 경우 미결제 모두 청산)



항상 고맙습니다.


답변 1
프로필 이미지

예스스탁 예스스탁 답변

2026-07-10 10:32:16

안녕하세요 예스스탁입니다. 아래 내용 참고하시기 바랍니다. //옵션객체 Option1 //계좌객체 Account1 //종목객체 MarketData1, 선물 var HHMMSS,HHMMSS1; var S1 = 140000, E1 = 141459, CP1 = 0.02, OP1 = 0.03, TP1 = 8.90; var S2 = 141500, E2 = 142959, CP2 = 0.03, OP2 = 0.04, TP2 = 7.90; var S3 = 143000, E3 = 144459, CP3 = 0.05, OP3 = 0.06, TP3 = 6.90; var S4 = 144500, E4 = 145959, CP4 = 0.07, OP4 = 0.08, TP4 = 5.90; var XT = 1501800; var Order1, OC1, BID1, BNUM1; var Order2, OC2, BID2, BNUM2; var Order3, OC3, BID3, BNUM3; var Order4, OC4, BID4, BNUM4; function Main_OnStart() { Main.SetTimer(1, 1000); Order1 = 0; Order2 = 0; Order3 = 0; Order4 = 0; } function Main_OnTimer(nEventID) { var d = new Date(); HHMMSS1 = HHMMSS; HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1 ) { //14:00:00~14:14:59 //진입1 if (Order1 == 0 && HHMMSS >= S1 && HHMMSS <= E1 && MarketData1.current <= MarketData1.high - 50) { for(var i = -Option1.lowersATM; i <= Option1.uppersATM; i++) { if (Option1.GetCurrent(1,-i) == CP1) { OC1 = Option1.GetATMPutRecent(-i); BID1 = Account1.OrderBuy(OC1, 1, OP1,0); Order1 = 1; Main.MessageList(HHMMSS,"|매수주문1 발생:",OC1,CP1,OP1); break; } } } //진입주문1 취소 if (Order1 == 2 && HHMMSS >= E1 && HHMMSS1 < E1) { Account1.OrderCancel(BNUM1); if (Account1.Unfill.count > 0) { Main.MessageList(HHMMSS,"|진입주문1 취소"); Order1 = -1; } } //익절1 if (Order1 == 3 && HHMMSS < XT && Option1.GetCurrent(OC1) >= TP1) { Order1 = 4; Account1.SetBalance(OC1, 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(OC1,1,Option1.GetBid(OC1,5),0); Main.MessageList(HHMMSS,"|익절주문1 발생:",OC1,TP1,Option1.GetBid(OC1,5)); } } //14:15:00~14:29:59 //진입2 if (Order2 == 0 && HHMMSS >= S2 && HHMMSS <= E2 && MarketData1.current <= MarketData1.high - 50) { for(var i = -Option1.lowersATM; i <= Option1.uppersATM; i++) { if (Option1.GetCurrent(1,-i) == CP2) { OC2 = Option1.GetATMPutRecent(-i); BID2 = Account1.OrderBuy(OC2, 1, OP2,0); Order2 = 1; Main.MessageList(HHMMSS,"|매수주문2 발생:",OC2,CP2,OP2); break; } } } //진입주문2 취소 if (Order2 == 2 && HHMMSS >= E2 && HHMMSS1 < E2) { Account1.OrderCancel(BNUM2); if (Account1.Unfill.count > 0) { Main.MessageList(HHMMSS,"|진입주문2 취소"); Order2 = -1; } } //익절2 if (Order2 == 3 && HHMMSS < XT && Option1.GetCurrent(OC2) >= TP2) { Order2 = 4; Account1.SetBalance(OC2, 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(OC2,1,Option1.GetBid(OC2,5),0); Main.MessageList(HHMMSS,"|익절주문2 발생:",OC2,TP2,Option1.GetBid(OC2,5)); } } //14:30:00~14:44:59 //진입3 if (Order3 == 0 && HHMMSS >= S3 && HHMMSS <= E3 && MarketData1.current <= MarketData1.high - 50) { for(var i = -Option1.lowersATM; i <= Option1.uppersATM; i++) { if (Option1.GetCurrent(1,-i) == CP3) { OC3 = Option1.GetATMPutRecent(-i); BID3 = Account1.OrderBuy(OC3, 1, OP3,0); Order3 = 1; Main.MessageList(HHMMSS,"|매수주문3 발생:",OC3,CP3,OP3); break; } } } //진입주문3 취소 if (Order3 == 2 && HHMMSS >= E3 && HHMMSS1 < E3) { Account1.OrderCancel(BNUM3); if (Account1.Unfill.count > 0) { Main.MessageList(HHMMSS,"|진입주문3 취소"); Order3 = -1; } } //익절3 if (Order3 == 3 && HHMMSS < XT && Option1.GetCurrent(OC3) >= TP3) { Order3 = 4; Account1.SetBalance(OC3, 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(OC3,1,Option1.GetBid(OC3,5),0); Main.MessageList(HHMMSS,"|익절주문3 발생:",OC3,TP3,Option1.GetBid(OC3,5)); } } //14:45:00~14:59:59 //진입4 if (Order4 == 0 && HHMMSS >= S4 && HHMMSS <= E4 && MarketData1.current <= MarketData1.high - 50) { for(var i = -Option1.lowersATM; i <= Option1.uppersATM; i++) { if (Option1.GetCurrent(1,-i) == CP4) { OC4 = Option1.GetATMPutRecent(-i); BID4 = Account1.OrderBuy(OC4, 1, OP4,0); Order4 = 1; Main.MessageList(HHMMSS,"|매수주문4 발생:",OC4,CP4,OP4); break; } } } //진입주문4 취소 if (Order4 == 2 && HHMMSS >= E4 && HHMMSS1 < E4) { Account1.OrderCancel(BNUM4); if (Account1.Unfill.count > 0) { Main.MessageList(HHMMSS,"|진입주문4 취소"); Order4 = -1; } } //익절4 if (Order4 == 3 && HHMMSS < XT && Option1.GetCurrent(OC4) >= TP4) { Order4 = 4; Account1.SetBalance(OC4, 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(OC4,1,Option1.GetBid(OC4,5),0); Main.MessageList(HHMMSS,"|익절주문4 발생:",OC4,TP4,Option1.GetBid(OC4,5)); } } if (HHMMSS >= XT) { //타이머 종료 Main.KillTimer(1); //주문접수 후 미체결되었으면 모두 취소 if (Order1 == 2) { Account1.SetUnfill(BNUM1); if (Account1.Unfill.count > 0) { Account1.OrderCancel(BNUM1); Main.MessageList(HHMMSS,"|진입1 미체결취소:"); } } if (Order2 == 2) { Account1.SetUnfill(BNUM2); if (Account1.Unfill.count > 0) { Account1.OrderCancel(BNUM2); Main.MessageList(HHMMSS,"|진입2 미체결취소:"); } } if (Order3 == 2) { Account1.SetUnfill(BNUM3); if (Account1.Unfill.count > 0) { Account1.OrderCancel(BNUM3); Main.MessageList(HHMMSS,"|진입3 미체결취소:"); } } if (Order4 == 2) { Account1.SetUnfill(BNUM4); if (Account1.Unfill.count > 0) { Account1.OrderCancel(BNUM4); Main.MessageList(HHMMSS,"|진입4 미체결취소:"); } } //진입체결되고 익절되지 않았으면 모두 청산 if (Order1 == 3) { Account1.SetBalance(OC1, 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(OC1, 1, Option1.GetBid(OC1, 5),0); Main.MessageList(HHMMSS,"|진입1 XT청산"); } } if (Order2 == 3) { Account1.SetBalance(OC2, 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(OC2, 1, Option1.GetBid(OC2, 5),0); Main.MessageList(HHMMSS,"|진입2 XT청산"); } } if (Order3 == 3) { Account1.SetBalance(OC3, 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(OC3, 1, Option1.GetBid(OC3, 5),0); Main.MessageList(HHMMSS,"|진입3 XT청산"); } } if (Order4 == 3) { Account1.SetBalance(OC4, 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(OC4, 1, Option1.GetBid(OC4, 5),0); Main.MessageList(HHMMSS,"|진입4 XT청산"); } } } } } //접수통보 function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == BID1) { if (OrderResponse.isNormal == true) { Order1 = 2; BNUM1 = OrderResponse.orderNum; } else { Main.MessageList("진입1 주문접수에러 - 주문거부등 확인요망"); } Main.MessageList("Order1",Order1); } if (OrderResponse.orderID == BID2) { if (OrderResponse.isNormal == true) { Order2 = 2; BNUM2 = OrderResponse.orderNum; } else { Main.MessageList("진입2 주문접수에러 - 주문거부등 확인요망"); } } if (OrderResponse.orderID == BID3) { if (OrderResponse.isNormal == true) { Order3 = 2; BNUM3 = OrderResponse.orderNum; } else { Main.MessageList("진입3 주문접수에러 - 주문거부등 확인요망"); } } if (OrderResponse.orderID == BID4) { if (OrderResponse.isNormal == true) { Order4 = 2; BNUM4 = OrderResponse.orderNum; } else { Main.MessageList("진입4 주문접수에러 - 주문거부등 확인요망"); } } } //체결통보 function Main_OnNotifyFill(NotifyFill) { if (NotifyFill.orderNum == BNUM1) { Order1 = 3; } if (NotifyFill.orderNum == BNUM2) { Order2 = 3; } if (NotifyFill.orderNum == BNUM3) { Order3 = 3; } if (NotifyFill.orderNum == BNUM4) { Order4 = 3; } } 즐거운 하루되세요