← Atrás

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

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

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

¿Le resultó útil este tema?

Compartir tema

Comentarios (7)

Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario

Alexander
Alexander

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

a.dobryn
a.dobryn Autor

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

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


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), но сделать это нужно в отдельном потоке чтобы не задерживать исполнение алгоритма.