Гарантированное снятие заявки
Atom Ответить
07.09.2011


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

Фотография
Дата: 07.09.2011
Ответить


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

a.dobryn

Фотография
Дата: 08.09.2011
Ответить


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

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

if(order.State == OrderStates.Active)
  ....
Автор топика
Спасибо:

Alexander

Фотография
Дата: 08.09.2011
Ответить


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

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

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



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

lesser

Фотография
Дата: 19.02.2012
Ответить


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

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

Код

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

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

Спасибо:

lesser

Фотография
Дата: 19.02.2012
Ответить


Неужели никто не делал такое ?
Спасибо:

Serg

Фотография
Дата: 19.02.2012
Ответить


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

lesser

Фотография
Дата: 19.02.2012
Ответить


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


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


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy