← Назад

MarketQuotingStrategy не передает управление?

Пытаюсь выставлять заявки через котирование. Создаю заявку, передаю ее на котирование. Все отлично работает, если заявка успешно регистрируется, если же при регистрации возникли ошибки, например попробовал продать в шорт на тестовом квике, то возникают проблеммы. Все как положено вызывается событие Trader.OrdersFailed, обрабатывается, после этого MarketQuotingStrategy как бы стопорится, не завершает свою работу, метод onProcess родительской стратегии больше не вызывается, и MarketQuotingStrategy тоже ничего не делает. Т.е. алгоритм подвисает, как можно принудительно завершить работу MarketQuotingStrategy и передать управление родительской тратегии в таких случаях? Попробовать делать это из события OrdersFailed?

Комментарии (8)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

Garry
Garry Автор

Забыл Асинхронный режим, S# 2.1

Garry
Garry Автор

Попытался остановить котирование, в случае ошибки, из события OrdersFailed, не останавливается, статус меняется на stopping, в итоге управление родительской стратегии так и не передается!

Mikhail Sukhov
Mikhail Sukhov

MarketQuotingStrategy что выводит в лог? какой статус у нее ProcessState

Garry
Garry Автор

MQS_SBER03 запущена. Runned Регистрация новой заявки на Sell с ценой 80,55 и объемом 1. Runned System.ArgumentException: Транзакции 'ACCOUNT=SPBFUT00491; CLIENT_CODE=XXX; TYPE=L; TRANS_ID=60642140; CLASSCODE=QJSIM; SECCODE=SBER03; ACTION=NEW_ORDER; OPERATION=S; QUANTITY=1; PRICE=80,55; EXECUTION_CONDITION=PUT_IN_QUEUE;' не была зарегистрирована. Причина 'Вам запрещена работа по данному торговому счету'. Имя параметра: transactionTxt в . (String , OrderStatus& , UInt32& , Double& , String& ) в Ecng.Trading.Quik.QuikTrader. (Order , TransactionBuilder , Boolean , Boolean ) в Ecng.Trading.Quik.QuikTrader.RegisterOrder(Order order) в Ecng.Trading.Algo.Strategy.RegisterOrder(Order order) в Ecng.Trading.Algo.QuotingStrategy.OnProcess() в Ecng.Trading.Algo.Strategy. () Runned MQS_SBER03 останавливается. Stopping Котирование заканчивается на заявке 60642140. Stopping Заявка 60642140 не имеет состояния. Котирование продолжается. Stopping Котирование заканчивается на заявке 60642140. Stopping Заявка 60642140 не имеет состояния. Котирование продолжается. Stopping Котирование заканчивается на заявке 60642140. Stopping Заявка 60642140 не имеет состояния. Котирование продолжается. Stopping Котирование заканчивается на заявке 60642140. Stopping Заявка 60642140 не имеет состояния. Котирование продолжается. Stopping Котирование заканчивается на заявке 60642140. Stopping

Это лог, и изменение статуса Как и говорил MarketQuotingStrategy.Stop() не помогает из сбытия OrdersFailed. Пмогает только удаление MarketQuotingStrategy из ChildStrategies базовой стратегии, может как то можно правильно обработать эту ситуацию из события Log MarketQuotingStrategy? Режим сменил на синхронный.

Mikhail Sukhov
Mikhail Sukhov

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

Mikhail Sukhov
Mikhail Sukhov

Как обходной путь переодпределить OnProcess

protected override OnProcess() { if (base.ProcessState == Running) return base.OnProcess(); else { if (order is failed) return false; else return base.OnProcess(); }

Garry
Garry Автор

Ок, спасибо, будем пробовать!

artemox
artemox

Переопределить надо MarketQuotingStrategy.OnProcess ? Можно уточнить что значит "order is failed"? Failed не нашел ни в состояниях ни в статусах. Пора делать две версии либы бета и релиз:)