커뮤니티

시간정정주문 문의드립니다

프로필 이미지
재령
2013-07-17 19:45:00
1330
글번호 222454
답변완료
항상수고 많으십니다 선물챠트의 시그널을 이용해 옵션 등가 양매도 전략을 구사 할려고 합니다 진입 및 청산로직은 최초 우선1호가 -> 1차정정 우선1호가 -> 2차정정 현재가 -> 3차정정 상대2호가 체결입니다. 최초주문은 우선1호가에 잘들어가나 진입시 1차정정 청산시 2차정정주문이 들어 가지 않습니다. 틀린부분 지적 부탁드립니다. var Start; var BuyCallCode; var BuyPutCode; var SellCallCode; var SellPutCode; var SellCallPrice; var SellPutPrice; var BxCallPrice; var BxPutPrice; var ExCallNum; var ExPutNum; var SellCallNum; var SellPutNum; var CallInID; var PutExID; var CallExID; var PutInID; function Main_OnStart() { Main.MessageLog("시작"); Start = 0; } function C1_OnRiseSignal(Signal) { if (Signal.signalKind == 1 ) { Start = 1; SellPutCode = Option.GetATMPutRecent(0); SellPutPrice = Option.GetAskByCode(SellPutCode,1); PutInID = A1.OrderSell(SellPutCode, 1, SellPutPrice, 0); Main.SetTimer(21, 10000); Main.SetTimer(22, 20000); Main.SetTimer(23, 30000); } if (Start == 1 && Signal.signalKind == 2 ) { BxPutPrice = Option.GetBidByCode(SellCallCode,1); PutExID = A1.OrderBuy(SellPutCode, 1, BxPutPrice, 0); Main.SetTimer(31, 60000); Main.SetTimer(32, 120000); Main.SetTimer(33, 170000); } if (Signal.signalKind == 3 ) { Start = 1; SellCallCode = Option.GetATMCallRecent(0); SellCallPrice = Option.GetAskByCode(SellCallCode,1); CallInID = A1.OrderSell(SellCallCode, 1, SellCallPrice, 0); Main.SetTimer(1, 10000); Main.SetTimer(2, 20000); Main.SetTimer(3, 30000); } if (Start == 1 && Signal.signalKind == 4 ) { BxCallPrice = Option.GetBidByCode(SellCallCode,1); CallExID = A1.OrderBuy(SellCallCode, 1, BxCallPrice, 0); Main.SetTimer(11, 60000); Main.SetTimer(12, 120000); Main.SetTimer(13, 170000); } } //PUT매도진입 function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == PutInID) { SellPutNum = OrderResponse.orderNum; } } function Main_OnTimer(nEventID) { if (nEventID == 21) { Main.KillTimer(21); A1.SetUnfillOrderNumber(SellPutNum); if (A1.Unfill.count > 0) { PutInID = A1.OrderReplacePrice(SellPutNum,Option.GetAskByCode(SellPutCode,1)); } } if (nEventID == 22) { Main.KillTimer(22); A1.SetUnfillOrderNumber(SellPutNum); if (A1.Unfill.count > 0) { PutInID = A1.OrderReplacePrice(SellPutNum,Option.GetCurrentByCode(SellPutCode)); } } if (nEventID == 23) { Main.KillTimer(23); A1.SetUnfillOrderNumber(SellPutNum); if (A1.Unfill.count > 0) { PutInID = A1.OrderReplacePrice(SellPutNum,Option.GetBidByCode(SellPutCode,2)); } } } //PUT 매도청산 function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == PutExID) { ExPutNum = OrderResponse.orderNum; } } function Main_OnTimer(nEventID) { if (nEventID == 31) { Main.KillTimer(31); A1.SetUnfillOrderNumber(ExPutNum); if (A1.Unfill.count > 0) { PutExID = A1.OrderReplacePrice(ExPutNum,Option.GetBidByCode(SellPutCode,1)); } } if (nEventID == 32) { Main.KillTimer(32); A1.SetUnfillOrderNumber(ExPutNum); if (A1.Unfill.count > 0) { PutExID = A1.OrderReplacePrice(ExPutNum,Option.GetCurrentByCode(SellPutCode)); } } if (nEventID == 33) { Main.KillTimer(33); A1.SetUnfillOrderNumber(ExPutNum); if (A1.Unfill.count > 0) { PutExID = A1.OrderReplacePrice(ExPutNum,Option.GetAskByCode(SellPutCode,2)); } } } //CALL 매도 function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == CallInID) { SellCallNum = OrderResponse.orderNum; } } function Main_OnTimer(nEventID) { if (nEventID == 1) { Main.KillTimer(1); A1.SetUnfillOrderNumber(SellCallNum); if (A1.Unfill.count > 0) { CallInID = A1.OrderReplacePrice(SellCallNum,Option.GetAskByCode(SellCallCode,1)); } } if (nEventID == 2) { Main.KillTimer(2); A1.SetUnfillOrderNumber(SellCallNum); if (A1.Unfill.count > 0) { CallInID = A1.OrderReplacePrice(SellCallNum,Option.GetCurrentByCode(SellCallCode)); } } if (nEventID == 3) { Main.KillTimer(3); A1.SetUnfillOrderNumber(SellCallNum); if (A1.Unfill.count > 0) { CallInID = A1.OrderReplacePrice(SellCallNum,Option.GetBidByCode(SellCallCode,2)); } } } //CALL 매도청산 function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == CallExID) { ExCallNum = OrderResponse.orderNum; } } function Main_OnTimer(nEventID) { if (nEventID == 11) { Main.KillTimer(11); A1.SetUnfillOrderNumber(ExCallNum); if (A1.Unfill.count > 0) { CallExID = A1.OrderReplacePrice(ExCallNum,Option.GetBidByCode(SellCallCode,1)); } } if (nEventID == 12) { Main.KillTimer(12); A1.SetUnfillOrderNumber(ExCallNum); if (A1.Unfill.count > 0) { CallExID = A1.OrderReplacePrice(ExCallNum,Option.GetCurrentByCode(SellCallCode)); } } if (nEventID == 13) { Main.KillTimer(13); A1.SetUnfillOrderNumber(ExCallNum); if (A1.Unfill.count > 0) { CallExID = A1.OrderReplacePrice(ExCallNum,Option.GetAskByCode(SellCallCode,2)); } } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2013-07-19 10:53:27

안녕하세요 예스스탁입니다. 1. 식상 잘못작성하신 부분이 있습니다. 자바스크립트에서 하나의 수식에서 특정이벤트는 한번만 사용하셔야 합니다. 간단하게 아래식 테스트 해보시면 가장 아래에 메세지만 찍히는 것을 보실수 있습니다. function Main_OnStart() { Main.SetTimer(1, 5000); } function Main_OnTimer(nEventID) { if (nEventID == 1) Main.MessageList("1"); } function Main_OnTimer(nEventID) { if (nEventID == 1) Main.MessageList("2"); } function Main_OnTimer(nEventID) { if (nEventID == 1) Main.MessageList("3"); } 2. 정정주문은 정정주문할 가격과 원주문의 가격이 동일할 경우 발생할 수가 없습니다. 정정주문시에 정정가격과 같은지를 확인하는 작업이 필요합니다 3. 아래는 수정한 식입니다 최초 우선1호가로 주문후에 1차정정 - 현재 우선1호가가 주문가격과 동일하지 않으면 정정주문 동일하면 패스. 2차정정 - 현재가격이 주문가격과 동일하지 않으면 정정주문 동일하면 패스. 3차정정 - 상대2호가가 주문가격과 동일하지 않으면 정정주문 동일하면 패스. 위와 같은 구조로 변경했습니다. var Start; var BuyCallCode; var BuyPutCode; var SellCallCode; var SellPutCode; var SellCallPrice; var SellPutPrice; var BxCallPrice; var BxPutPrice; var ExCallNum; var ExPutNum; var SellCallNum; var SellPutNum; var CallInID; var PutExID; var CallExID; var PutInID; function Main_OnStart() { Main.MessageLog("시작"); Start = 0; } function C1_OnRiseSignal(Signal) { if (Signal.signalKind == 1 ) { Start = 1; SellPutCode = Option.GetATMPutRecent(0); SellPutPrice = Option.GetAskByCode(SellPutCode,1); PutInID = A1.OrderSell(SellPutCode, 1, SellPutPrice, 0); Main.SetTimer(21, 10000); Main.SetTimer(22, 20000); Main.SetTimer(23, 30000); } if (Start == 1 && Signal.signalKind == 2 ) { BxPutPrice = Option.GetBidByCode(SellCallCode,1); PutExID = A1.OrderBuy(SellPutCode, 1, BxPutPrice, 0); Main.SetTimer(31, 60000); Main.SetTimer(32, 120000); Main.SetTimer(33, 170000); } if (Signal.signalKind == 3 ) { Start = 1; SellCallCode = Option.GetATMCallRecent(0); SellCallPrice = Option.GetAskByCode(SellCallCode,1); CallInID = A1.OrderSell(SellCallCode, 1, SellCallPrice, 0); Main.SetTimer(1, 10000); Main.SetTimer(2, 20000); Main.SetTimer(3, 30000); } if (Start == 1 && Signal.signalKind == 4 ) { BxCallPrice = Option.GetBidByCode(SellCallCode,1); CallExID = A1.OrderBuy(SellCallCode, 1, BxCallPrice, 0); Main.SetTimer(11, 60000); Main.SetTimer(12, 120000); Main.SetTimer(13, 170000); } } function Main_OnOrderResponse(OrderResponse) { //PUT매도진입 if (OrderResponse.orderID == PutInID) { SellPutNum = OrderResponse.orderNum; } //PUT 매도청산 if (OrderResponse.orderID == PutExID) { ExPutNum = OrderResponse.orderNum; } //CALL 매도 if (OrderResponse.orderID == CallInID) { SellCallNum = OrderResponse.orderNum; } //CALL 매도청산 if (OrderResponse.orderID == CallExID) { ExCallNum = OrderResponse.orderNum; } } function Main_OnTimer(nEventID) { //PUT매도진입 타이머 동작 if (nEventID == 21) { Main.KillTimer(21); A1.SetUnfillOrderNumber(SellPutNum); var SellPutRePrice1 = Option.GetAskByCode(SellPutCode,1); if (A1.Unfill.count > 0 && A1.Unfill.Price != SellPutRePrice1) { PutInID = A1.OrderReplacePrice(SellPutNum, SellPutRePrice1); } } if (nEventID == 22) { Main.KillTimer(22); A1.SetUnfillOrderNumber(SellPutNum); var SellPutRePrice2 = Option.GetCurrentByCode(SellPutCode); if (A1.Unfill.count > 0 && A1.Unfill.Price != SellPutRePrice2) { PutInID = A1.OrderReplacePrice(SellPutNum,SellPutRePrice2); } } if (nEventID == 23) { Main.KillTimer(23); A1.SetUnfillOrderNumber(SellPutNum); var SellPutRePrice3 = Option.GetBidByCode(SellPutCode,2); if (A1.Unfill.count > 0 && A1.Unfill.Price != SellPutRePrice3) { PutInID = A1.OrderReplacePrice(SellPutNum,SellPutRePrice3); } } //PUT 매도청산 타이머동작 if (nEventID == 31) { Main.KillTimer(31); A1.SetUnfillOrderNumber(ExPutNum); var ExPutRePrice1 = Option.GetBidByCode(SellPutCode,1); if (A1.Unfill.count > 0 && A1.Unfill.Price != ExPutRePrice1) { PutExID = A1.OrderReplacePrice(ExPutNum,ExPutRePrice1); } } if (nEventID == 32) { Main.KillTimer(32); A1.SetUnfillOrderNumber(ExPutNum); var ExPutRePrice2 = Option.GetCurrentByCode(SellPutCode); if (A1.Unfill.count > 0 && A1.Unfill.Price != ExPutRePrice2) { PutExID = A1.OrderReplacePrice(ExPutNum, ExPutRePrice2); } } if (nEventID == 33) { Main.KillTimer(33); A1.SetUnfillOrderNumber(ExPutNum); var ExPutRePrice3 = Option.GetAskByCode(SellPutCode,2); if (A1.Unfill.count > 0 && A1.Unfill.Price != ExPutRePrice3) { PutExID = A1.OrderReplacePrice(ExPutNum,ExPutRePrice3); } } //CALL 매도 타이머동작 if (nEventID == 1) { Main.KillTimer(1); A1.SetUnfillOrderNumber(SellCallNum); var SellCallRePrice1 = Option.GetAskByCode(SellCallCode,1); if (A1.Unfill.count > 0 && A1.Unfill.Price != SellCallRePrice1) { CallInID = A1.OrderReplacePrice(SellCallNum,SellCallRePrice1); } } if (nEventID == 2) { Main.KillTimer(2); A1.SetUnfillOrderNumber(SellCallNum); var SellCallRePrice2 = Option.GetCurrentByCode(SellCallCode); if (A1.Unfill.count > 0 && A1.Unfill.Price != SellCallRePrice2) { CallInID = A1.OrderReplacePrice(SellCallNum,SellCallRePrice2); } } if (nEventID == 3) { Main.KillTimer(3); A1.SetUnfillOrderNumber(SellCallNum); var SellCallRePrice3 = Option.GetBidByCode(SellCallCode,2); if (A1.Unfill.count > 0 && A1.Unfill.Price != SellCallRePrice3) { CallInID = A1.OrderReplacePrice(SellCallNum,Option.SellCallRePrice3); } } //CALL 매도청산 타이머 동작 if (nEventID == 11) { Main.KillTimer(11); A1.SetUnfillOrderNumber(ExCallNum); var ExCallRePrice1 = Option.GetBidByCode(SellCallCode,1); if (A1.Unfill.count > 0 && A1.Unfill.Price != ExCallRePrice1) { CallExID = A1.OrderReplacePrice(ExCallNum,ExCallRePrice1); } } if (nEventID == 12) { Main.KillTimer(12); A1.SetUnfillOrderNumber(ExCallNum); var ExCallRePrice2 = Option.GetCurrentByCode(SellCallCode); if (A1.Unfill.count > 0 && A1.Unfill.Price != ExCallRePrice2) { CallExID = A1.OrderReplacePrice(ExCallNum,Option.ExCallRePrice2); } } if (nEventID == 13) { Main.KillTimer(13); A1.SetUnfillOrderNumber(ExCallNum); var ExCallRePrice3 = Option.GetAskByCode(SellCallCode,2); if (A1.Unfill.count > 0 && A1.Unfill.Price != ExCallRePrice3) { CallExID = A1.OrderReplacePrice(ExCallNum,ExCallRePrice3); } } } 즐거운 하루되세요 > 재령 님이 쓴 글입니다. > 제목 : 시간정정주문 문의드립니다 > 항상수고 많으십니다 선물챠트의 시그널을 이용해 옵션 등가 양매도 전략을 구사 할려고 합니다 진입 및 청산로직은 최초 우선1호가 -> 1차정정 우선1호가 -> 2차정정 현재가 -> 3차정정 상대2호가 체결입니다. 최초주문은 우선1호가에 잘들어가나 진입시 1차정정 청산시 2차정정주문이 들어 가지 않습니다. 틀린부분 지적 부탁드립니다. var Start; var BuyCallCode; var BuyPutCode; var SellCallCode; var SellPutCode; var SellCallPrice; var SellPutPrice; var BxCallPrice; var BxPutPrice; var ExCallNum; var ExPutNum; var SellCallNum; var SellPutNum; var CallInID; var PutExID; var CallExID; var PutInID; function Main_OnStart() { Main.MessageLog("시작"); Start = 0; } function C1_OnRiseSignal(Signal) { if (Signal.signalKind == 1 ) { Start = 1; SellPutCode = Option.GetATMPutRecent(0); SellPutPrice = Option.GetAskByCode(SellPutCode,1); PutInID = A1.OrderSell(SellPutCode, 1, SellPutPrice, 0); Main.SetTimer(21, 10000); Main.SetTimer(22, 20000); Main.SetTimer(23, 30000); } if (Start == 1 && Signal.signalKind == 2 ) { BxPutPrice = Option.GetBidByCode(SellCallCode,1); PutExID = A1.OrderBuy(SellPutCode, 1, BxPutPrice, 0); Main.SetTimer(31, 60000); Main.SetTimer(32, 120000); Main.SetTimer(33, 170000); } if (Signal.signalKind == 3 ) { Start = 1; SellCallCode = Option.GetATMCallRecent(0); SellCallPrice = Option.GetAskByCode(SellCallCode,1); CallInID = A1.OrderSell(SellCallCode, 1, SellCallPrice, 0); Main.SetTimer(1, 10000); Main.SetTimer(2, 20000); Main.SetTimer(3, 30000); } if (Start == 1 && Signal.signalKind == 4 ) { BxCallPrice = Option.GetBidByCode(SellCallCode,1); CallExID = A1.OrderBuy(SellCallCode, 1, BxCallPrice, 0); Main.SetTimer(11, 60000); Main.SetTimer(12, 120000); Main.SetTimer(13, 170000); } } //PUT매도진입 function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == PutInID) { SellPutNum = OrderResponse.orderNum; } } function Main_OnTimer(nEventID) { if (nEventID == 21) { Main.KillTimer(21); A1.SetUnfillOrderNumber(SellPutNum); if (A1.Unfill.count > 0) { PutInID = A1.OrderReplacePrice(SellPutNum,Option.GetAskByCode(SellPutCode,1)); } } if (nEventID == 22) { Main.KillTimer(22); A1.SetUnfillOrderNumber(SellPutNum); if (A1.Unfill.count > 0) { PutInID = A1.OrderReplacePrice(SellPutNum,Option.GetCurrentByCode(SellPutCode)); } } if (nEventID == 23) { Main.KillTimer(23); A1.SetUnfillOrderNumber(SellPutNum); if (A1.Unfill.count > 0) { PutInID = A1.OrderReplacePrice(SellPutNum,Option.GetBidByCode(SellPutCode,2)); } } } //PUT 매도청산 function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == PutExID) { ExPutNum = OrderResponse.orderNum; } } function Main_OnTimer(nEventID) { if (nEventID == 31) { Main.KillTimer(31); A1.SetUnfillOrderNumber(ExPutNum); if (A1.Unfill.count > 0) { PutExID = A1.OrderReplacePrice(ExPutNum,Option.GetBidByCode(SellPutCode,1)); } } if (nEventID == 32) { Main.KillTimer(32); A1.SetUnfillOrderNumber(ExPutNum); if (A1.Unfill.count > 0) { PutExID = A1.OrderReplacePrice(ExPutNum,Option.GetCurrentByCode(SellPutCode)); } } if (nEventID == 33) { Main.KillTimer(33); A1.SetUnfillOrderNumber(ExPutNum); if (A1.Unfill.count > 0) { PutExID = A1.OrderReplacePrice(ExPutNum,Option.GetAskByCode(SellPutCode,2)); } } } //CALL 매도 function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == CallInID) { SellCallNum = OrderResponse.orderNum; } } function Main_OnTimer(nEventID) { if (nEventID == 1) { Main.KillTimer(1); A1.SetUnfillOrderNumber(SellCallNum); if (A1.Unfill.count > 0) { CallInID = A1.OrderReplacePrice(SellCallNum,Option.GetAskByCode(SellCallCode,1)); } } if (nEventID == 2) { Main.KillTimer(2); A1.SetUnfillOrderNumber(SellCallNum); if (A1.Unfill.count > 0) { CallInID = A1.OrderReplacePrice(SellCallNum,Option.GetCurrentByCode(SellCallCode)); } } if (nEventID == 3) { Main.KillTimer(3); A1.SetUnfillOrderNumber(SellCallNum); if (A1.Unfill.count > 0) { CallInID = A1.OrderReplacePrice(SellCallNum,Option.GetBidByCode(SellCallCode,2)); } } } //CALL 매도청산 function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == CallExID) { ExCallNum = OrderResponse.orderNum; } } function Main_OnTimer(nEventID) { if (nEventID == 11) { Main.KillTimer(11); A1.SetUnfillOrderNumber(ExCallNum); if (A1.Unfill.count > 0) { CallExID = A1.OrderReplacePrice(ExCallNum,Option.GetBidByCode(SellCallCode,1)); } } if (nEventID == 12) { Main.KillTimer(12); A1.SetUnfillOrderNumber(ExCallNum); if (A1.Unfill.count > 0) { CallExID = A1.OrderReplacePrice(ExCallNum,Option.GetCurrentByCode(SellCallCode)); } } if (nEventID == 13) { Main.KillTimer(13); A1.SetUnfillOrderNumber(ExCallNum); if (A1.Unfill.count > 0) { CallExID = A1.OrderReplacePrice(ExCallNum,Option.GetAskByCode(SellCallCode,2)); } } }