커뮤니티
외가격 콜옵션 매수
2026-07-02 17:25:34
98
글번호 232660
아래 내용이 처리될 수 있도록 수식 부탁드립니다.
데이트레이딩
외가격 call 옵션 매수 플레이
순서
1. 사전조건 : 코스피200지수선물 저점에서 50포인트 상승 발생
2. 140000 이후 call옵션 0.02 체결 발생한 행사가에 0.03(1틱 높은 주문 ) 1개 매수 (141459까지 체결 없으면 주문 취소)
3. 141500 이후 call옵션 0.03 체결 발생한 행사가에 0.04(1틱 높은 주문 ) 1개 매수(142959까지 체결 없으면 주문 취소)
4. 143000 이후 call옵션 0.05 체결 발생한 행사가에 0.06(1틱 높은 주문 ) 1개 매수(144459까지 체결 없으면 주문 취소)
5. 144500 이후 call옵션 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 (익절이 없을 경우 미결제 모두 청산)
항상 고맙습니다.
답변 2
예스스탁
2026-07-10 10:20:35
관리자님에 의해 삭제된 답변입니다.
예스스탁 예스스탁 답변
2026-07-10 10:22:53
안녕하세요
예스스탁입니다.
아래 내용 참고하시기 바랍니다.
//옵션객체 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.low + 50)
{
for(var i = -Option1.lowersATM; i <= Option1.uppersATM; i++)
{
if (Option1.GetCurrent(0,i) == CP1)
{
OC1 = Option1.GetATMCallRecent(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.low + 50)
{
for(var i = -Option1.lowersATM; i <= Option1.uppersATM; i++)
{
if (Option1.GetCurrent(0,i) == CP2)
{
OC2 = Option1.GetATMCallRecent(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.low + 50)
{
for(var i = -Option1.lowersATM; i <= Option1.uppersATM; i++)
{
if (Option1.GetCurrent(0,i) == CP3)
{
OC3 = Option1.GetATMCallRecent(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.low + 50)
{
for(var i = -Option1.lowersATM; i <= Option1.uppersATM; i++)
{
if (Option1.GetCurrent(0,i) == CP4)
{
OC4 = Option1.GetATMCallRecent(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;
}
}
즐거운 하루되세요
다음글
이전글