Иногда почему-то не снимается заявка. Пробовала и просто CancelOrder, и GuarantyCancelOrder получается такое
System.ArgumentException: Транзакции 'CLASSCODE=QJSIM; SECCODE=SBER03; TRANS_ID=46477555; ACTION=KILL_ORDER; ORDER_KEY=1378049270;' не была зарегистрирована. Причина 'Не удалось снять заявку с номером 1378049270'. Parameter name: transactionTxt at #=q6_bJnTxTmM4Bv8VAkuzX16N9kITey0Q0shlRx5OmuCI=.#=q1iLknz8rGYO9SBN12KWkKW0hW33_WQyPCNDIYTa5dVQ=(String #=qyenVG1VmCVlQ2Y5yHJeYWw==, OrderStatus& #=qW9HFfQY0dx9a8RYk5sclrA==, UInt32& #=qfMdlXyqqy$mDcndJDOE0LA==, Int64& #=q9nZ9jT4E3sMUzEif1u51Aw==, String& #=qt$j1$s8gZYfOsf7TeSDU4w==) at StockSharp.Quik.QuikTrader.#=qd_OODXhbYctbuybxgNIvuFY9080SZ7RrdqPxsrjKge4=(Order #=qVKlVeoIIr6HU9O9oWnMYJA==, TransactionBuilder #=q3MHOzpll3tBupKAIV8IL_A==) at StockSharp.Quik.QuikTrader.OnCancelOrder(Order order) at StockSharp.Algo.BaseTrader.CancelOrder(Order order) at StockSharp.Algo.TraderHelper.GuarantyCancelOrder(Order order, TimeSpan timeOut) at StockSharp.Algo.TraderHelper.GuarantyCancelOrder(Order order)
Перед тем как снимать, статус проверяю, снимаю, только если активна.
Kommentare (7)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Как проверяете статус? Приведите участок кода, распечатайте сам Order перед снятием.
хм, видимо, заявка исполнялась прямо в момент снятия, вот и получалось так
проверялось так:
if(order.State == OrderStates.Active) ....
Как все-же сделать гарантированное снятие заявки ?
Будет ли правильно работать такое :
Неужели никто не делал такое ?
что значит гарантированно? если заявка не снялась с первого раза то она скорее всего уже не снимется( это же квик)
Это почему ? может просто команда на снятие заявки не дошла или была отброшена биржей, или разрыв соединения в момент подачи команды CancelOrder. Если у заявки статус Active значит ее можно снять . Нужно как-то проверить результат исполнения _trader.CancelOrder(order) и если резульльтат ошибка сделать еще раз _trader.CancelOrder(order), но сделать это нужно в отдельном потоке чтобы не задерживать исполнение алгоритма.