커뮤니티

옵션 손절 로직 부탁드립니다.

프로필 이미지
영원한자유
2014-11-29 22:23:33
1614
글번호 223246
답변완료
아래는 선물 차트의 매도신호를 보고 풋옵션 등가를 매수하는 로직입니다. 제가 궁금한 것은 풋옵션 매수후 그때 체결가격을 기준으로 -6호가로 떨어지면 청산하는 것과 스탑로스 4%손실발생시 청산하는 것을 구현하고자 합니다. 아래 로직중에 entryprice를 아래와 같이 구현하는 것이 맞는지요? [ BuyEntryPrice = Signal.price // 매수가격 저장 ] 부탁합니다. var vol; var Start; var PutCode; var BuyPutPrice; var Cash; var StopPutPrice; var BuyEntryPirce; function Main_OnStart() { Start = 0; } function Chart1_OnRiseSignal(Signal) { //차트에서 Sell신호 발생하면 주문가능현금에서 최대수량계산해 옵션 매수3호가로 매수주문 if ( Signal.signalKind == 3) { Start = 1; PutCode = Option.GetATMPutRecent(0); //주문종목 : ATM풋 종목 코드 BuyPutPrice = Option.GetAskByCode(SellPutCode,3); //주문가격 : 매도3호가 StopPutPice = Option.GetAskByCode(SellPutCode,6); //주문가격 : 매도6호가 Cash = 1000000; vol = Math.floor(Cash/BuyPutPrice*100000) if (vol > 0) { Account1.Orderbuy(BuyPutCode,vol,BuyPutPrice,0); BuyEntryPrice = Signal.price // 매수가격 저장 Main.MessageList("buy",BuyPutPrice,Cash,vol); } } //차트에서 ExitShort신호 발생하면 매수3호가로 매도주주문 if ( Start == 1 && Signal.signalKind == 4) { Account1.OrderSell(BuyPutCode,vol,Option.GetBidByCode(PutCode,3),0); Main.MessageList("Exitshort",vol); } if ( BuyEntryPirce < StopPutPrice) { Account1.OrderSell(BuyPutCode,vol,Option.GetBidByCode(PutCode,3),0); Main.MessageList("Exitshort StopLoss",vol); } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2014-12-16 15:42:50

안녕하세요 예스스탁입니다. 1. BuyEntryPrice = Signal.price 위 내요은 신호가격을 저장하는 것입니다. 체결가격이 아니므로 체결응답 받을때 가격 저장하고 사용하셔야 합니다. 2. 손절식을 신호이벤트에서 같이 처리하시면 차트에서 신호가 발생할때만 해당 조건을 판단하게 됩니다. 1초단위로 현재가와 체결가격을 비교해서 청산하게 작성되었습니다. 참고하시기 바랍니다. var Start; var PutCode; var BuyPutPrice; var Cash; var vol; var StopPutPrice; var BuyEntryPirce; function Main_OnStart() { Start = 0; } function Chart1_OnRiseSignal(Signal) { //차트에서 Sell신호 발생하면 주문가능현금에서 최대수량계산해 옵션 매수3호가로 매수주문 if ( Signal.signalKind == 3) { Start = 1; PutCode = Option.GetATMPutRecent(0); //주문종목 : ATM풋 종목 코드 BuyPutPrice = Option.GetAskByCode(PutCode,3); //주문가격 : 매도3호가 Cash = 1000000; vol = Math.floor(Cash/BuyPutPrice*100000) if (vol > 0) { BID = Account1.OrderBuy(PutCode,vol,BuyPutPrice,0); Main.MessageList("buy",BuyPutPrice,Cash,vol); //주문하고 체결가격을 넣는 변수는 0으로 초기화 BuyFillPrice = 0; } } //차트에서 ExitShort신호 발생하면 매수3호가로 매도주주문 if ( Start == 1 && Signal.signalKind == 4) { Account1.OrderSell(PutCode,vol,Option.GetBidByCode(PutCode,3),0); Main.MessageList("Exitshort",vol); Main.KillTimer(1); } } //주문응답 수신되면 //수신된 주문응답과 주문의 아이디가 동일한지 비교후에 //동일하면 주문번호 저장 function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == BID) Bnum = OrderResponse.orderNum; } //체결응답 수신되면 //주문응답에서 저장한 주문번호와 같으면 //BuyFillPrice에 체결가격 저장하고 1번 타이머 실행 function Main_OnNotifyFill(NotifyFill) { if (NotifyFill.orderNum == Bnum) { //체결가 BuyFillPrice = NotifyFill.fillPrice; //체결가 -6틱 가격 계산 if (BuyFillPrice > 0 && BuyFillPrice < 3.0) { StopPutPrice = BuyFillPrice-0.06; } if (BuyFillPrice > 3.0) { StopPutPrice = BuyFillPrice; for(var i = 1; i <= 6; i++) { if (StopPutPrice > 3.0) { StopPutPrice = Math.floor((StopPutPrice-0.05)*100)/100; } if (StopPutPrice <= 3.0) { StopPutPrice = Math.floor((StopPutPrice-0.01)*100)/100; } } } Main.SetTimer(1, 1000);//1번, 1초 타이머 } } function Main_OnTimer(nEventID) { //1번 타이머 동작하면 if (nEventID == 1) { //현재가가 체결가 +4% 이상이면 매도 if (Option.GetCurrent(PutCode) >= BuyFillPrice*1.04) { Account1.OrderSell(PutCode,vol,Option.GetBidByCode(PutCode,3),0); Main.KillTimer(nEventID) } //현재가가 체결가-6틱 이하이면 매도 if (BuyFillPrice > 0 && Option.GetCurrent(PutCode) <= StopPutPrice) { Account1.OrderSell(PutCode,vol,Option.GetBidByCode(PutCode,3),0); Main.KillTimer(nEventID) } } } 즐거운 하루되세요 > 영원한자유 님이 쓴 글입니다. > 제목 : 옵션 손절 로직 부탁드립니다. > 아래는 선물 차트의 매도신호를 보고 풋옵션 등가를 매수하는 로직입니다. 제가 궁금한 것은 풋옵션 매수후 그때 체결가격을 기준으로 -6호가로 떨어지면 청산하는 것과 스탑로스 4%손실발생시 청산하는 것을 구현하고자 합니다. 아래 로직중에 entryprice를 아래와 같이 구현하는 것이 맞는지요? [ BuyEntryPrice = Signal.price // 매수가격 저장 ] 부탁합니다. var vol; var Start; var PutCode; var BuyPutPrice; var Cash; var StopPutPrice; var BuyEntryPirce; function Main_OnStart() { Start = 0; } function Chart1_OnRiseSignal(Signal) { //차트에서 Sell신호 발생하면 주문가능현금에서 최대수량계산해 옵션 매수3호가로 매수주문 if ( Signal.signalKind == 3) { Start = 1; PutCode = Option.GetATMPutRecent(0); //주문종목 : ATM풋 종목 코드 BuyPutPrice = Option.GetAskByCode(SellPutCode,3); //주문가격 : 매도3호가 StopPutPice = Option.GetAskByCode(SellPutCode,6); //주문가격 : 매도6호가 Cash = 1000000; vol = Math.floor(Cash/BuyPutPrice*100000) if (vol > 0) { Account1.Orderbuy(BuyPutCode,vol,BuyPutPrice,0); BuyEntryPrice = Signal.price // 매수가격 저장 Main.MessageList("buy",BuyPutPrice,Cash,vol); } } //차트에서 ExitShort신호 발생하면 매수3호가로 매도주주문 if ( Start == 1 && Signal.signalKind == 4) { Account1.OrderSell(BuyPutCode,vol,Option.GetBidByCode(PutCode,3),0); Main.MessageList("Exitshort",vol); } if ( BuyEntryPirce < StopPutPrice) { Account1.OrderSell(BuyPutCode,vol,Option.GetBidByCode(PutCode,3),0); Main.MessageList("Exitshort StopLoss",vol); } }