← 返回

Гарантированное снятие заявки

Иногда почему-то не снимается заявка. Пробовала и просто 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)

Перед тем как снимать, статус проверяю, снимаю, только если активна.

本主题对您有帮助吗?

分享主题

评论 (7)

登录创建账户, 登录或注册以发表评论

Alexander
Alexander

Как проверяете статус? Приведите участок кода, распечатайте сам Order перед снятием.

a.dobryn
a.dobryn 作者

хм, видимо, заявка исполнялась прямо в момент снятия, вот и получалось так

проверялось так:


if(order.State == OrderStates.Active)
  ....

Alexander
Alexander

D_Alex: хм, видимо, заявка исполнялась прямо в момент снятия, вот и получалось так

проверялось так:

if(order.State == OrderStates.Active) ....



бывает. квик не шибко быстро порой реагирует :)
lesser
lesser

Как все-же сделать гарантированное снятие заявки ?

Будет ли правильно работать такое :


        MainWindow.Instance.GuiAsync(() =>  CancelOrder(my_order));

        private void CancelOrder(Order order)
        {
            _trader.CancelOrder(order);
            while (order.State == OrderStates.Active)
            {
                order.CancelFailed().Cancel(order);
            }
        }


lesser
lesser

Неужели никто не делал такое ?

Serg
Serg

что значит гарантированно? если заявка не снялась с первого раза то она скорее всего уже не снимется( это же квик)

lesser
lesser

Serg: что значит гарантированно? если заявка не снялась с первого раза то она скорее всего уже не снимется( это же квик)

Это почему ? может просто команда на снятие заявки не дошла или была отброшена биржей, или разрыв соединения в момент подачи команды CancelOrder. Если у заявки статус Active значит ее можно снять . Нужно как-то проверить результат исполнения _trader.CancelOrder(order) и если резульльтат ошибка сделать еще раз _trader.CancelOrder(order), но сделать это нужно в отдельном потоке чтобы не задерживать исполнение алгоритма.