커뮤니티

매수매도 수량 확인후 청산

프로필 이미지
후따오
2021-08-12 07:13:09
2149
글번호 225524
답변완료
매수매도가 체결되었는지 확인후 매수매도 청산하기 위해서 아래 프로그램을 사용하고자 합니다. 해외선물에서 지정가,+/_2호가로 매수매도를 위해서 BID = Account1.OrderBuy(Main.GetOrderCode(Signal.code),2,MarketData1.Bid(2),2); SID = Account1.OrderSell(Main.GetOrderCode(Signal.code),2,MarketData1.Ask(2),2); 로 하였는데 맞게 된 건가요? ====================== 예제 =================== var BID,SID,BNum,SNum; function Main_OnStart() { Main.MessageList("Start") } function Chart1_OnRiseSignal(Signal) { if (Signal.signalKind == 1) { BID = Account1.OrderBuy(Main.GetOrderCode(Signal.code),2,MarketData1.Bid(1),2); Main.SetTimer(1,60000); } if (Signal.signalKind == 2) { Account1.SetUnfill(BNum); if ( Account1.Unfill.count > 0 ) { Account1.OrderCancel(Bnum); } Account1.SetBalance(Main.GetOrderCode(Signal.code), 2); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Ask(1),0) } } if (Signal.signalKind == 3) { SID = Account1.OrderSell(Main.GetOrderCode(Signal.code),2,MarketData1.Ask(2),2); Main.SetTimer(2,60000); } if (Signal.signalKind == 4) { Account1.SetUnfill(SNum); if ( Account1.Unfill.count > 0) { Account1.OrderCancel(Snum); } Account1.SetBalance(Main.GetOrderCode(Signal.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Bid(1),2) } } } function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == BID) { BNum = OrderResponse.orderNum; } if (OrderResponse.orderID == SID) { SNum = OrderResponse.orderNum; } } function Main_OnTimer(nEventID) { if (nEventID == 1) { Main.KillTimer(1); Account1.SetUnfill(BNum); if (Account1.Unfill.count > 0) { BID = Account1.OrderReplacePrice(Bnum,MarketData1.Ask(4); } } if (nEventID == 2) { Main.KillTimer(2); Account1.SetUnfill(SNum); if (Account1.Unfill.count > 0) { SID = Account1.OrderReplacePrice(Snum,MarketData1.Bid(4)); } } }
답변 2
프로필 이미지

예스스탁 예스스탁 답변

2021-08-24 16:49:50

안녕하세요 예스스탁입니다. 1 예 맞습니다. 주문함수에서 지정가는 네번째 매개변수가 2입니다. 시장가는 1입니다. 2 Account1.OrderSell(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Ask(1),0) 수식에 지정가인데 0으로 지정된 부분이 있어 아래 수정했습니다. 3 해외선물의 스팟스튜디오의 객체정보에서 계좌객체의 함수 확인하시기 바랍니다. 해외선물 프로그램에는 Account1.SetUnfill, Account1.SetBalance 함수가 없으므로 Account1.SetUnfillOrderNumber, Account1.SetBalanceItem함수를 이용하셔야 합니다. 4 var BID,SID,BNum,SNum; function Main_OnStart() { Main.MessageList("Start") } function Chart1_OnRiseSignal(Signal) { if (Signal.signalKind == 1) { BID = Account1.OrderBuy(Main.GetOrderCode(Signal.code),2,MarketData1.Bid(1),2); Main.SetTimer(1,60000); } if (Signal.signalKind == 2) { Account1.SetUnfillOrderNumber(BNum); if ( Account1.Unfill.count > 0 ) { Account1.OrderCancel(Bnum); } Account1.SetBalanceItem(Main.GetOrderCode(Signal.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Ask(1),2) } } if (Signal.signalKind == 3) { SID = Account1.OrderSell(Main.GetOrderCode(Signal.code),2,MarketData1.Ask(2),2); Main.SetTimer(2,60000); } if (Signal.signalKind == 4) { Account1.SetUnfillOrderNumber(SNum); if ( Account1.Unfill.count > 0) { Account1.OrderCancel(Snum); } Account1.SetBalanceItem(Main.GetOrderCode(Signal.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Bid(1),2) } } } function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == BID) { BNum = OrderResponse.orderNum; } if (OrderResponse.orderID == SID) { SNum = OrderResponse.orderNum; } } function Main_OnTimer(nEventID) { if (nEventID == 1) { Main.KillTimer(1); Account1.SetUnfillOrderNumber(BNum); if (Account1.Unfill.count > 0) { BID = Account1.OrderReplacePrice(Bnum,MarketData1.Ask(4); } } if (nEventID == 2) { Main.KillTimer(2); Account1.SetUnfillOrderNumber(SNum); if (Account1.Unfill.count > 0) { SID = Account1.OrderReplacePrice(Snum,MarketData1.Bid(4)); } } } 즐거운 하루되세요 > 후따오 님이 쓴 글입니다. > 제목 : 매수매도 수량 확인후 청산 > 매수매도가 체결되었는지 확인후 매수매도 청산하기 위해서 아래 프로그램을 사용하고자 합니다. 해외선물에서 지정가,+/_2호가로 매수매도를 위해서 BID = Account1.OrderBuy(Main.GetOrderCode(Signal.code),2,MarketData1.Bid(2),2); SID = Account1.OrderSell(Main.GetOrderCode(Signal.code),2,MarketData1.Ask(2),2); 로 하였는데 맞게 된 건가요? ====================== 예제 =================== var BID,SID,BNum,SNum; function Main_OnStart() { Main.MessageList("Start") } function Chart1_OnRiseSignal(Signal) { if (Signal.signalKind == 1) { BID = Account1.OrderBuy(Main.GetOrderCode(Signal.code),2,MarketData1.Bid(1),2); Main.SetTimer(1,60000); } if (Signal.signalKind == 2) { Account1.SetUnfill(BNum); if ( Account1.Unfill.count > 0 ) { Account1.OrderCancel(Bnum); } Account1.SetBalance(Main.GetOrderCode(Signal.code), 2); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Ask(1),0) } } if (Signal.signalKind == 3) { SID = Account1.OrderSell(Main.GetOrderCode(Signal.code),2,MarketData1.Ask(2),2); Main.SetTimer(2,60000); } if (Signal.signalKind == 4) { Account1.SetUnfill(SNum); if ( Account1.Unfill.count > 0) { Account1.OrderCancel(Snum); } Account1.SetBalance(Main.GetOrderCode(Signal.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Bid(1),2) } } } function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == BID) { BNum = OrderResponse.orderNum; } if (OrderResponse.orderID == SID) { SNum = OrderResponse.orderNum; } } function Main_OnTimer(nEventID) { if (nEventID == 1) { Main.KillTimer(1); Account1.SetUnfill(BNum); if (Account1.Unfill.count > 0) { BID = Account1.OrderReplacePrice(Bnum,MarketData1.Ask(4); } } if (nEventID == 2) { Main.KillTimer(2); Account1.SetUnfill(SNum); if (Account1.Unfill.count > 0) { SID = Account1.OrderReplacePrice(Snum,MarketData1.Bid(4)); } } }
프로필 이미지

후따오

2021-08-25 18:11:25

계좌가 2개이고 계좌별로 2개의 신호를 적용하고자합니다. 종목은 2종목입니다. 아래와 같이 작성하였는데 올바로 적용된 것인지 확인 부탁드립니다. var BID1,SID1,BNum1,SNum1; var BID2,SID2,BNum2,SNum2; var BID3,SID3,BNum3,SNum3; var BID4,SID4,BNum4,SNum4; function Main_OnStart() { Main.MessageList("Start") } function Chart1_OnRiseSignal(Signal) { if (Signal.signalKind == 1) //매수 신호 { BID1 = Account1.OrderBuy(Main.GetOrderCode(Signal.code),1,MarketData1.Bid(2),2); //지정가,매수2호가 매수 Main.SetTimer(1,60000); // 60초 } if (Signal.signalKind == 2) // 매수 청산 { Account1.SetUnfillOrderNumber(BNum1) // if ( Account1.Unfill.count > 0 ) // 미체결건수가 있으면 { Account1.OrderCancel(Bnum1); //취소처리 } Account1.SetBalanceItem(Main.GetOrderCode(Signal.code), 2); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Ask(2),2) } } if (Signal.signalKind == 3) { SID1 = Account1.OrderSell(Main.GetOrderCode(Signal.code),1,MarketData1.Ask(2),2); Main.SetTimer(2,60000); } if (Signal.signalKind == 4) { Account1.SetUnfillOrderNumber(SNum1) if ( Account1.Unfill.count > 0) { Account1.OrderCancel(Snum1); } Account1.SetBalanceItem(Main.GetOrderCode(Signal.code), 2); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Bid(2),2) } } } function Chart2_OnRiseSignal(Signal) { if (Signal.signalKind == 1) { BID2 = Account2.OrderBuy(Main.GetOrderCode(Signal.code),2,MarketData1.Bid(2),2); Main.SetTimer(1,120000); } if (Signal.signalKind == 2) { Account2.SetUnfillOrderNumber(BNum2) if ( Account2.Unfill.count > 0 ) { Account2.OrderCancel(Bnum2); } Account2.SetBalanceItem(Main.GetOrderCode(Signal.code), 2); if (Account2.Balance.count > 0 && Account2.Balance.position == 2) { Account2.OrderSell(Main.GetOrderCode(Signal.code),Account2.Balance.count,MarketData1.Ask(2),2) } } if (Signal.signalKind == 3) { SID2 = Account2.OrderSell(Main.GetOrderCode(Signal.code),2,MarketData1.Ask(2),2); Main.SetTimer(2,120000); } if (Signal.signalKind == 4) { Account2.SetUnfillOrderNumber(SNum2) if ( Account2.Unfill.count > 0) { Account2.OrderCancel(Snum2); } Account2.SetBalanceItem(Main.GetOrderCode(Signal.code), 0); if (Account2.Balance.count > 0 && Account2.Balance.position == 1) { Account2.OrderBuy(Main.GetOrderCode(Signal.code),Account2.Balance.count,MarketData1.Bid(2),2) } } } function Chart3_OnRiseSignal(Signal) { if (Signal.signalKind == 1) //매수 신호 { BID3 = Account1.OrderBuy(Main.GetOrderCode(Signal.code),1,MarketData1.Bid(2),2); //지정가,매수2호가 매수 Main.SetTimer(1,60000); // 60초 } if (Signal.signalKind == 2) // 매수 청산 { Account1.SetUnfillOrderNumber(BNum3) // if ( Account1.Unfill.count > 0 ) // 미체결건수가 있으면 { Account1.OrderCancel(Bnum3); //취소처리 } Account1.SetBalanceItem(Main.GetOrderCode(Signal.code), 2); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Ask(2),2) } } if (Signal.signalKind == 3) { SID3 = Account1.OrderSell(Main.GetOrderCode(Signal.code),1,MarketData1.Ask(2),2); Main.SetTimer(2,60000); } if (Signal.signalKind == 4) { Account1.SetUnfillOrderNumber(SNum3) if ( Account1.Unfill.count > 0) { Account1.OrderCancel(Snum3); } Account1.SetBalanceItem(Main.GetOrderCode(Signal.code), 2); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Bid(2),2) } } } function Chart4_OnRiseSignal(Signal) { if (Signal.signalKind == 1) { BID4 = Account2.OrderBuy(Main.GetOrderCode(Signal.code),2,MarketData1.Bid(2),2); Main.SetTimer(1,120000); } if (Signal.signalKind == 2) { Account2.SetUnfillOrderNumber(BNum4) if ( Account2.Unfill.count > 0 ) { Account2.OrderCancel(Bnum4); } Account2.SetBalanceItem(Main.GetOrderCode(Signal.code), 2); if (Account2.Balance.count > 0 && Account2.Balance.position == 2) { Account2.OrderSell(Main.GetOrderCode(Signal.code),Account2.Balance.count,MarketData1.Ask(2),2) } } if (Signal.signalKind == 3) { SID4 = Account2.OrderSell(Main.GetOrderCode(Signal.code),2,MarketData1.Ask(2),2); Main.SetTimer(2,120000); } if (Signal.signalKind == 4) { Account2.SetUnfillOrderNumber(SNum4) if ( Account2.Unfill.count > 0) { Account2.OrderCancel(Snum4); } Account2.SetBalanceItem(Main.GetOrderCode(Signal.code), 0); if (Account2.Balance.count > 0 && Account2.Balance.position == 1) { Account2.OrderBuy(Main.GetOrderCode(Signal.code),Account2.Balance.count,MarketData1.Bid(2),2) } } } function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == BID1) { BNum1 = OrderResponse.orderNum; } if (OrderResponse.orderID == SID1) { SNum1 = OrderResponse.orderNum; } if (OrderResponse.orderID == BID3) { BNum3 = OrderResponse.orderNum; } if (OrderResponse.orderID == SID4) { SNum4 = OrderResponse.orderNum; } } function Main_OnTimer(nEventID) { if (nEventID == 1) { Main.KillTimer(1); Account1.SetUnfillOrderNumber(BNum1) Account2.SetUnfillOrderNumber(BNum2) Account1.SetUnfillOrderNumber(BNum3) Account2.SetUnfillOrderNumber(BNum4) if (Account1.Unfill.count > 0) { BID1 = Account1.OrderReplacePrice(Bnum1,MarketData1.Ask(2)); BID3 = Account1.OrderReplacePrice(Bnum3,MarketData1.Ask(2)); } if (Account2.Unfill.count > 0) { BID2 = Account2.OrderReplacePrice(Bnum2,MarketData1.Ask(2)); BID4 = Account2.OrderReplacePrice(Bnum4,MarketData1.Ask(2)); } } if (nEventID == 2) { Main.KillTimer(2); Account1.SetUnfillOrderNumber(SNum1) Account2.SetUnfillOrderNumber(SNum2) Account1.SetUnfillOrderNumber(SNum3) Account2.SetUnfillOrderNumber(SNum4) if (Account1.Unfill.count > 0) { SID1 = Account1.OrderReplacePrice(Snum1,MarketData1.Bid(2)); SID3 = Account1.OrderReplacePrice(Snum3,MarketData1.Bid(2)); } if (Account2.Unfill.count > 0) { SID2 = Account2.OrderReplacePrice(Snum2,MarketData1.Bid(2)); SID4 = Account2.OrderReplacePrice(Snum4,MarketData1.Bid(2)); } } } ================================================================================= > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 매수매도 수량 확인후 청산 > 안녕하세요 예스스탁입니다. 1 예 맞습니다. 주문함수에서 지정가는 네번째 매개변수가 2입니다. 시장가는 1입니다. 2 Account1.OrderSell(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Ask(1),0) 수식에 지정가인데 0으로 지정된 부분이 있어 아래 수정했습니다. 3 해외선물의 스팟스튜디오의 객체정보에서 계좌객체의 함수 확인하시기 바랍니다. 해외선물 프로그램에는 Account1.SetUnfill, Account1.SetBalance 함수가 없으므로 Account1.SetUnfillOrderNumber, Account1.SetBalanceItem함수를 이용하셔야 합니다. 4 var BID,SID,BNum,SNum; function Main_OnStart() { Main.MessageList("Start") } function Chart1_OnRiseSignal(Signal) { if (Signal.signalKind == 1) { BID = Account1.OrderBuy(Main.GetOrderCode(Signal.code),2,MarketData1.Bid(1),2); Main.SetTimer(1,60000); } if (Signal.signalKind == 2) { Account1.SetUnfillOrderNumber(BNum); if ( Account1.Unfill.count > 0 ) { Account1.OrderCancel(Bnum); } Account1.SetBalanceItem(Main.GetOrderCode(Signal.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Ask(1),2) } } if (Signal.signalKind == 3) { SID = Account1.OrderSell(Main.GetOrderCode(Signal.code),2,MarketData1.Ask(2),2); Main.SetTimer(2,60000); } if (Signal.signalKind == 4) { Account1.SetUnfillOrderNumber(SNum); if ( Account1.Unfill.count > 0) { Account1.OrderCancel(Snum); } Account1.SetBalanceItem(Main.GetOrderCode(Signal.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Bid(1),2) } } } function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == BID) { BNum = OrderResponse.orderNum; } if (OrderResponse.orderID == SID) { SNum = OrderResponse.orderNum; } } function Main_OnTimer(nEventID) { if (nEventID == 1) { Main.KillTimer(1); Account1.SetUnfillOrderNumber(BNum); if (Account1.Unfill.count > 0) { BID = Account1.OrderReplacePrice(Bnum,MarketData1.Ask(4); } } if (nEventID == 2) { Main.KillTimer(2); Account1.SetUnfillOrderNumber(SNum); if (Account1.Unfill.count > 0) { SID = Account1.OrderReplacePrice(Snum,MarketData1.Bid(4)); } } } 즐거운 하루되세요 > 후따오 님이 쓴 글입니다. > 제목 : 매수매도 수량 확인후 청산 > 매수매도가 체결되었는지 확인후 매수매도 청산하기 위해서 아래 프로그램을 사용하고자 합니다. 해외선물에서 지정가,+/_2호가로 매수매도를 위해서 BID = Account1.OrderBuy(Main.GetOrderCode(Signal.code),2,MarketData1.Bid(2),2); SID = Account1.OrderSell(Main.GetOrderCode(Signal.code),2,MarketData1.Ask(2),2); 로 하였는데 맞게 된 건가요? ====================== 예제 =================== var BID,SID,BNum,SNum; function Main_OnStart() { Main.MessageList("Start") } function Chart1_OnRiseSignal(Signal) { if (Signal.signalKind == 1) { BID = Account1.OrderBuy(Main.GetOrderCode(Signal.code),2,MarketData1.Bid(1),2); Main.SetTimer(1,60000); } if (Signal.signalKind == 2) { Account1.SetUnfill(BNum); if ( Account1.Unfill.count > 0 ) { Account1.OrderCancel(Bnum); } Account1.SetBalance(Main.GetOrderCode(Signal.code), 2); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Ask(1),0) } } if (Signal.signalKind == 3) { SID = Account1.OrderSell(Main.GetOrderCode(Signal.code),2,MarketData1.Ask(2),2); Main.SetTimer(2,60000); } if (Signal.signalKind == 4) { Account1.SetUnfill(SNum); if ( Account1.Unfill.count > 0) { Account1.OrderCancel(Snum); } Account1.SetBalance(Main.GetOrderCode(Signal.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Bid(1),2) } } } function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == BID) { BNum = OrderResponse.orderNum; } if (OrderResponse.orderID == SID) { SNum = OrderResponse.orderNum; } } function Main_OnTimer(nEventID) { if (nEventID == 1) { Main.KillTimer(1); Account1.SetUnfill(BNum); if (Account1.Unfill.count > 0) { BID = Account1.OrderReplacePrice(Bnum,MarketData1.Ask(4); } } if (nEventID == 2) { Main.KillTimer(2); Account1.SetUnfill(SNum); if (Account1.Unfill.count > 0) { SID = Account1.OrderReplacePrice(Snum,MarketData1.Bid(4)); } } }