커뮤니티

개장전 주문

프로필 이미지
목마와숙녀
2026-09-08 05:49:11
107
글번호 233539
답변완료

개장전 주문을 하고 싶습니다.

콜옵션 수식 1개,  풋옵션 수식 1개

전략 내용은 같습니다.


1.  주문시간 : 083000 (개장전)


2. 옵션 행사가선택

     - 야간선물 종가기준 외가격 행사가 20개 선정

     - 야간선물 사용안되면 어제 주간선물 종가기준 외가격 행사가 40개 선정

     

3. 행사가별 가격 및 수량 세팅

      - 20개 행사가 전부 같음

      -  0.01 / 수량 4개


4. 익절

      -  20개 행사가 전부 같음

      -  당일 하이로우 50포인트 보다 크면

           4.9(1개),  3.9(1개),  2.9(1개),  1.9(1개)

      -  당일 하이로우 50포인트 보다 작으면

           3.4(1개),  2.4(1개),  1.4(1개),  0.4(1개)


5. Endofday

      -  150000에 모든 미결제 청산

      -  매도1호가 주문 , 60초 후 매수1호가 주문

           

고맙습니다


답변 1
프로필 이미지

예스스탁 예스스탁 답변

2026-09-18 13:41:08

안녕하세요 예스스탁입니다. 아래식 참고하시기 바랍니다. 계좌객체 Account1, 옵션객체 Option1입니다. 1 . 콜 var BuyTime = 83000; var ExitTime = 150000; var ATMLevel = 20; var BuyPrice = 0.01; var Vol = 4; var Target = []; var TP = []; var Code = []; var BID = [],SID = []; var BNUM = [],SNUM = []; var FV = []; var B,FNC,FNR = 0; function Main_OnStart() { var d = new Date(); var HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); //9시 전 if (HHMMSS < BuyTime) { B = 0; Main.MessageList("BuyTime이전 -> 차트객체 요청"); //기본종목셋팅({연결선물 야간장},일봉 300개, 갭보정안함, 수정주가처리 안함) var item = {code:"00000000", marketKind:CHART_MARKET_NIGHT} var ChartSet = new ReqChartItem(item,0,CHART_PERIOD_DAILY,300, CHART_REQCOUNT_BAR, false, false); Main.ReqChartEx(ChartSet); } else { Main.MessageList("BuyTime이후 -> 수행 안함"); } } function Main_OnRcvChartEx(ChartEx) { if (ChartEx.GetCode(1) == "00000000") { Main.MessageList("차트객체 생성완료:",ChartEx.GetCode(1)); CT = ChartEx; FNC = CT.GetClose(1,0); FNR = CT.GetHigh(1,0)-CT.GetLow(1,0); if (FNR < 50) { Target = [0.4,1.4,2.4,3.4]; } else { Target = [1.9,2.9,3.9,4.9]; } Main.MessageList("야간선물가격:",FNC," 야간선물폭:",CT.GetHigh(1,0),CT.GetLow(1,0),FNR); B = 1; //1초 타이머 셋팅 Main.SetTimer(1,1000); } } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); if (nEventID == 1) { if (HHMMSS >= BuyTime && HHMMSS < ExitTime) { //매수실행 if (B == 1) { B = 2; var A1 = FNC; var A2 = Math.floor(A1/2.5)*2.5; var ATM = A2; if (A1-A2 >= 1.25) { ATM = A2+2.5; } Main.MessageList(HHMMSS,"|선물가격기준 ATM:",ATM); for (var i = 1; i <= ATMLevel; i++) { var ItemCode = Option1.GetCodeByExercisePrice(0,ATM+2.5*i); var Current = Option1.GetCurrent(ItemCode); Main.MessageList(HHMMSS,"|행사가:",ATM+2.5*i,"|종목:",ItemCode,"현재가:",Current); if (Current > 0) { Code[i] = ItemCode; BID[i] = Account1.OrderBuy(ItemCode,Vol,BuyPrice,0); FV[i] = 0; TP[i] = 0; Main.MessageList(HHMMSS,"|매수:",BID[i],ItemCode,Vol,BuyPrice); } else { Main.MessageList(HHMMSS,"|해당 행사가 없음"); } } Main.MessageList(HHMMSS,"|매수:",Code.length,Code); } else { if (B == 2 && HHMMSS >= 84500) { for (var i = 1; i < Code.length; i++) { var a = TP[i]; if (a < Target.length && Option1.GetCurrent(Code[i]) >= Target[a]) { Main.MessageList(HHMMSS,"|익절조건 충족",a,"단계:",Code[i],Option1.GetCurrent(Code[i]),Target[a]); if (FV[i] > a) { Account1.OrderSell(Code[i], 1, Target[a], 0); Main.MessageList(HHMMSS,"|익절실행:",a,"단계 매도:",Code[i],1,Target[a]); TP[i] = TP[i]+1; } else { Main.MessageList(HHMMSS,"|익절불가-체결수량부족:",a,"단계 매도:",Code[i],1,Target[a]); } } } } } } if (B == 2 && HHMMSS >= ExitTime) { Main.KillTimer(1); B = 3; //Code에 저장된 종목코드 미체결 모두 취소 var UF = Account1.GetTheNumberOfUnfills(); Main.MessageList(HHMMSS,"|전체미체결 취소:",UF); if (UF > 0) { for (var i = UF - 1; i >= 0; i--) { Account1.SetUnfill(i); for (var x = 1; x < Code.length; x++) { if (Account1.Unfill.count > 0 && Account1.Unfill.code == Code[x]) { Account1.OrderCancel(Account1.Unfill.orderNum); break; } } } } //Code에 저장된 종목코드 보유 종목 매도 청산 var F = Account1.GetTheNumberOfBalances(); if (F > 0) { Main.MessageList(HHMMSS,"|보유종목:",F); for (var i = 0; i < F; i++) { Account1.SetBalance(i) for (var x = 1; x < Code.length; x++) { if (Account1.Balance.count > 0 && Account1.Balance.position == 2 && Account1.Balance.code == Code[x]) { Main.MessageList(HHMMSS,"|청산:",Account1.Balance.code, Account1.Balance.count); SID[x] = Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, Option1.GetBid(Account1.Balance.code, 1),0); break; } } } //60초 타이머 Main.SetTimer(2,60000); } } } if (nEventID == 2) { Main.KillTimer(2); Main.MessageList(HHMMSS,"|청산 정정주문"); for (var i = 1; i < Code.length; i++) { //SNUM주문 미체결체크 Account1.SetUnfill(SNUM[i]); //미체결 있으면 if (Account1.Unfill.count > 0) { //매수1호가로 정정 var OP = Option1.GetBid(Account1.Unfill.code, 1) if (OP != Account1.Unfill.price) { Account1.OrderReplacePrice(SNUM[i],OP) } } } } } function Main_OnOrderResponse(OrderResponse) { var d = new Date(); var HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); if (B == 2 && OrderResponse.isNormal == true ) { for (var i = 1; i <= ATMLevel; i++) { if (OrderResponse.orderID == BID[i]) { BNUM[i] = OrderResponse.orderNum; Main.MessageList(HHMMSS,"|OnOrderResponse",i,OrderResponse.orderID,BNUM[i]); return; } } } if (B == 3 && OrderResponse.isNormal == true ) { for (var i = 1; i <= ATMLevel; i++) { if (OrderResponse.orderID == SID[i]) { SNUM[i] = OrderResponse.orderNum; Main.MessageList(HHMMSS,"|OnOrderResponse",i,OrderResponse.orderID,SNUM[i]); return; } } } } function Main_OnNotifyFill(NotifyFill) { var d = new Date(); var HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); for (var i = 1; i <= ATMLevel; i++) { if (NotifyFill.orderNum == BNUM[i] && NotifyFill.orderKind == 2) { FV[i] = FV[i]+1; Main.MessageList(HHMMSS,"|OnNotifyFill",i,FV[i]); } } } 2 풋 var BuyTime = 83000; var ExitTime = 150000; var ATMLevel = 20; var BuyPrice = 0.01; var Vol = 4; var Target = []; var TP = []; var Code = []; var BID = [],SID = []; var BNUM = [],SNUM = []; var FV = []; var B,FNC,FNR = 0; function Main_OnStart() { var d = new Date(); var HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); //9시 전 if (HHMMSS < BuyTime) { B = 0; Main.MessageList("BuyTime이전 -> 차트객체 요청"); //기본종목셋팅({연결선물 야간장},일봉 300개, 갭보정안함, 수정주가처리 안함) var item = {code:"00000000", marketKind:CHART_MARKET_NIGHT} var ChartSet = new ReqChartItem(item,0,CHART_PERIOD_DAILY,300, CHART_REQCOUNT_BAR, false, false); Main.ReqChartEx(ChartSet); } else { Main.MessageList("BuyTime이후 -> 수행 안함"); } } function Main_OnRcvChartEx(ChartEx) { if (ChartEx.GetCode(1) == "00000000") { Main.MessageList("차트객체 생성완료:",ChartEx.GetCode(1)); CT = ChartEx; FNC = CT.GetClose(1,0); FNR = CT.GetHigh(1,0)-CT.GetLow(1,0); if (FNR < 50) { Target = [0.4,1.4,2.4,3.4]; } else { Target = [1.9,2.9,3.9,4.9]; } Main.MessageList("야간선물가격:",FNC," 야간선물폭:",CT.GetHigh(1,0),CT.GetLow(1,0),FNR); B = 1; //1초 타이머 셋팅 Main.SetTimer(1,1000); } } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); if (nEventID == 1) { if (HHMMSS >= BuyTime && HHMMSS < ExitTime) { //매수실행 if (B == 1) { B = 2; var A1 = FNC; var A2 = Math.floor(A1/2.5)*2.5; var ATM = A2; if (A1-A2 >= 1.25) { ATM = A2+2.5; } Main.MessageList(HHMMSS,"|선물가격기준 ATM:",ATM); for (var i = 1; i <= ATMLevel; i++) { var ItemCode = Option1.GetCodeByExercisePrice(1,ATM-2.5*i); var Current = Option1.GetCurrent(ItemCode); Main.MessageList(HHMMSS,"|행사가:",ATM+2.5*i,"|종목:",ItemCode,"현재가:",Current); if (Current > 0) { Code[i] = ItemCode; BID[i] = Account1.OrderBuy(ItemCode,Vol,BuyPrice,0); FV[i] = 0; TP[i] = 0; Main.MessageList(HHMMSS,"|매수:",BID[i],ItemCode,Vol,BuyPrice); } else { Main.MessageList(HHMMSS,"|해당 행사가 없음"); } } Main.MessageList(HHMMSS,"|매수:",Code.length,Code); } else { if (B == 2 && HHMMSS >= 84500) { for (var i = 1; i < Code.length; i++) { var a = TP[i]; if (a < Target.length && Option1.GetCurrent(Code[i]) >= Target[a]) { Main.MessageList(HHMMSS,"|익절조건 충족",a,"단계:",Code[i],Option1.GetCurrent(Code[i]),Target[a]); if (FV[i] > a) { Account1.OrderSell(Code[i], 1, Target[a], 0); Main.MessageList(HHMMSS,"|익절실행:",a,"단계 매도:",Code[i],1,Target[a]); TP[i] = TP[i]+1; } else { Main.MessageList(HHMMSS,"|익절불가-체결수량부족:",a,"단계 매도:",Code[i],1,Target[a]); } } } } } } if (B == 2 && HHMMSS >= ExitTime) { Main.KillTimer(1); B = 3; //Code에 저장된 종목코드 미체결 모두 취소 var UF = Account1.GetTheNumberOfUnfills(); Main.MessageList(HHMMSS,"|전체미체결 취소:",UF); if (UF > 0) { for (var i = UF - 1; i >= 0; i--) { Account1.SetUnfill(i); for (var x = 1; x < Code.length; x++) { if (Account1.Unfill.count > 0 && Account1.Unfill.code == Code[x]) { Account1.OrderCancel(Account1.Unfill.orderNum); break; } } } } //Code에 저장된 종목코드 보유 종목 매도 청산 var F = Account1.GetTheNumberOfBalances(); if (F > 0) { Main.MessageList(HHMMSS,"|보유종목:",F); for (var i = 0; i < F; i++) { Account1.SetBalance(i) for (var x = 1; x < Code.length; x++) { if (Account1.Balance.count > 0 && Account1.Balance.position == 2 && Account1.Balance.code == Code[x]) { Main.MessageList(HHMMSS,"|청산:",Account1.Balance.code, Account1.Balance.count); SID[x] = Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, Option1.GetBid(Account1.Balance.code, 1),0); break; } } } //60초 타이머 Main.SetTimer(2,60000); } } } if (nEventID == 2) { Main.KillTimer(2); Main.MessageList(HHMMSS,"|청산 정정주문"); for (var i = 1; i < Code.length; i++) { //SNUM주문 미체결체크 Account1.SetUnfill(SNUM[i]); //미체결 있으면 if (Account1.Unfill.count > 0) { //매수1호가로 정정 var OP = Option1.GetBid(Account1.Unfill.code, 1) if (OP != Account1.Unfill.price) { Account1.OrderReplacePrice(SNUM[i],OP) } } } } } function Main_OnOrderResponse(OrderResponse) { var d = new Date(); var HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); if (B == 2 && OrderResponse.isNormal == true ) { for (var i = 1; i <= ATMLevel; i++) { if (OrderResponse.orderID == BID[i]) { BNUM[i] = OrderResponse.orderNum; Main.MessageList(HHMMSS,"|OnOrderResponse",i,OrderResponse.orderID,BNUM[i]); return; } } } if (B == 3 && OrderResponse.isNormal == true ) { for (var i = 1; i <= ATMLevel; i++) { if (OrderResponse.orderID == SID[i]) { SNUM[i] = OrderResponse.orderNum; Main.MessageList(HHMMSS,"|OnOrderResponse",i,OrderResponse.orderID,SNUM[i]); return; } } } } function Main_OnNotifyFill(NotifyFill) { var d = new Date(); var HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); for (var i = 1; i <= ATMLevel; i++) { if (NotifyFill.orderNum == BNUM[i] && NotifyFill.orderKind == 2) { FV[i] = FV[i]+1; Main.MessageList(HHMMSS,"|OnNotifyFill",i,FV[i]); } } } 즐거운 하루되세요