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


Гарантированное снятие заявки
Atom
9/7/2011


Иногда почему-то не снимается заявка. Пробовала и просто CancelOrder, и GuarantyCancelOrder
получается такое
Quote:

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)


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

Tags:


Thanks:


Alexander

Avatar
Date: 9/7/2011
Reply


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

a.dobryn

Avatar
Date: 9/8/2011
Reply


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

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

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

Alexander

Avatar
Date: 9/8/2011
Reply


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

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

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



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

lesser

Avatar
Date: 2/19/2012
Reply


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

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

Code

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

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

Thanks:

lesser

Avatar
Date: 2/19/2012
Reply


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

Serg

Avatar
Date: 2/19/2012
Reply


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

lesser

Avatar
Date: 2/19/2012
Reply


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


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


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy