Пытаюсь выставлять заявки через котирование. Создаю заявку, передаю ее на котирование. Все отлично работает, если заявка успешно регистрируется, если же при регистрации возникли ошибки, например попробовал продать в шорт на тестовом квике, то возникают проблеммы. Все как положено вызывается событие Trader.OrdersFailed, обрабатывается, после этого MarketQuotingStrategy как бы стопорится, не завершает свою работу, метод onProcess родительской стратегии больше не вызывается, и MarketQuotingStrategy тоже ничего не делает. Т.е. алгоритм подвисает, как можно принудительно завершить работу MarketQuotingStrategy и передать управление родительской тратегии в таких случаях? Попробовать делать это из события OrdersFailed?
Комментарии (8)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
Забыл Асинхронный режим, S# 2.1
Попытался остановить котирование, в случае ошибки, из события OrdersFailed, не останавливается, статус меняется на stopping, в итоге управление родительской стратегии так и не передается!
MarketQuotingStrategy что выводит в лог? какой статус у нее ProcessState
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? Режим сменил на синхронный.
Ок, понял. Подтверждаю, бага. Буду думать как исправлять.
Как обходной путь переодпределить OnProcess
protected override OnProcess() { if (base.ProcessState == Running) return base.OnProcess(); else { if (order is failed) return false; else return base.OnProcess(); }
Ок, спасибо, будем пробовать!
Переопределить надо MarketQuotingStrategy.OnProcess ? Можно уточнить что значит "order is failed"? Failed не нашел ни в состояниях ни в статусах. Пора делать две версии либы бета и релиз:)