sergun
|
Date: 10/21/2010
sergunMikhail Sukhovsergun Михаил, обращаю Ваше внимание, что проблема решилась отказом от асинхронного режима.. (проблема заключалась в том что не возникали события OrdersChanged, NewMyTrades.. Только NewOrders) Трудно предположить, что я его не так использую, т.к. в предыдущих версиях квикшарпа им успешно пользовался. Если баг, с Вас пиво )))
В асинхронном режиме не возникали события у ITrader или у Strategy? Или у тех и у тех? У стратегии 100% ни разу не возникали. У трейдера подписывался только на NewMyTrades.. Обработчик вызвался только как-то один раз. Кстати по задумке NewOrders вызывается и нужен только для асинхронного режима?
|
|
Thanks:
|
|
|
|
|
Mikhail Sukhov
|
Date: 10/21/2010
sergunКстати по задумке NewOrders вызывается и нужен только для асинхронного режима? Нет, для обоих... Я проверил сценарий. Все вызывается. Можете как-то локализовать проблему? Потому что, если я создаю стратегию, и регистрирую в ней заявку по рыночной цене, то все события вызыываются на ура. IsAsyncMode = true. Есть еще подозрения, что может быть где-то обработчик на данные события еще есть и он кидает исключение. А с событиями такая ситуация. Если впереди стоящий в цепочке подписки выбросил исключение, то дальше уже никто событие не получит. Если не в этом дело, то надо выделать проблемное место путем тестов.
|
|
Thanks:
|
|
|
|
|
Dmitriy Klimov
|
Date: 10/22/2010
Михаил, после выставления через Strategy.RegisterOrder условной заявки типа QuikStopConditionTypes.TakeProfitStopLimit, стратегия не получает события о совершении сделки по этой заявки. Как заставить стратегию, PositionManager и другие менеджеры учитывать эти сделки?
Я так понимаю, стратегия отслеживает исполнения только тех заявок, которые она сама выставляет. А так как условная заявка генерирует свои заявки после выполнения заданного условия, то такие сделки стратегия игнорирует. Как вы посоветуете решать такие задачи? Самому подписываться на BaseTrader.NewMyTrades? Тогда как быть с расчетом позиции и профита в стратегии?
|
|
Thanks:
|
|
|
|
|
Mikhail Sukhov
|
Date: 10/24/2010
Strategy умеет отслеживать появления заявок по стоп-заявкам. Тоесть, если через Strategy.RegisterOrder зарегистрировать стоп заявку, то при ее активации в Strategy.Order появится производная заявка. А вот сделки я не проверял, но, судя по коду, и это должно работать. Лучше начнем с простого. Приходил ли событие Strategy.NewOrder для производной заявки?
|
|
Thanks:
|
|
|
|
|
Dmitriy Klimov
|
Date: 10/24/2010
Mikhail SukhovStrategy умеет отслеживать появления заявок по стоп-заявкам. Тоесть, если через Strategy.RegisterOrder зарегистрировать стоп заявку, то при ее активации в Strategy.Order появится производная заявка. А вот сделки я не проверял, но, судя по коду, и это должно работать. Лучше начнем с простого. Приходил ли событие Strategy.NewOrder для производной заявки? Регистрирую через Strategy.RegisterOrder. При этом такая заявка не попадает в Strategy.StopOrders и при осуществлении сделок по этим заявкам событие Strategy.NewMyTrades не возникает. Strategy.NewOrder не проверял, завтра проверю...
|
|
Thanks:
|
|
|
|
|
Dmitriy Klimov
|
Date: 10/24/2010
Нашел лог с последних торгов. Strategy.NewOrder от условных стоп-заявок тоже не возникает...
|
|
Thanks:
|
|
|
|
|
Mikhail Sukhov
|
Date: 10/24/2010
Dmitriy KlimovРегистрирую через Strategy.RegisterOrder. При этом такая заявка не попадает в Strategy.StopOrders
В StopOrders она попадет после успешной регистрации, то есть когда будет событие Strategy.NewStopOrder.
|
|
Thanks:
|
|
|
|
|
Dmitriy Klimov
|
Date: 10/24/2010
Mikhail SukhovВ StopOrders она попадет после успешной регистрации, то есть когда будет событие Strategy.NewStopOrder. Проверял при возникновении события BaseTrader.StopOrdersChanged. По идее, раз это событие возникает, то в Strategy.StopOrders что-то должно быть. Но массив был всегда пустой....
|
|
Thanks:
|
|
|
|
|
Mikhail Sukhov
|
Date: 10/24/2010
Dmitriy KlimovMikhail SukhovВ StopOrders она попадет после успешной регистрации, то есть когда будет событие Strategy.NewStopOrder. Проверял при возникновении события BaseTrader.StopOrdersChanged. По идее, раз это событие возникает, то в Strategy.StopOrders что-то должно быть. Но массив был всегда пустой.... Приведите весь код проверки. Такое быть не может. В начале идет добавление в коллекцию Strategy.StopOrders, затем уже вызов события. Хоть что-то, но должно быть. Иначе и вызова не будет.
|
|
Thanks:
|
|
|
|
|
Dmitriy Klimov
|
Date: 10/24/2010
Mikhail SukhovПриведите весь код проверки. Такое быть не может. В начале идет добавление в коллекцию Strategy.StopOrders, затем уже вызов события. Хоть что-то, но должно быть. Иначе и вызова не будет. Делаю так: Code class MyStrategy : Strategy { protected override void OnRunning() { Trader.StopOrdersChanged += OnStopOrderChanged;
base.OnRunning(); }
private void OnStopOrderChanged(IEnumerable<Order> orders) { File.AppendAllText("StopOrders.txt", "Stop orders: " + base.StopOrders.Count.ToString() + Environment.NewLine); } }
До этого еще пытался подписываться на Strategy.StopOrderChanged, но это событие так ни разу и не возникло. Условные стоп-заявки в Квике выставляются и исполняются нормально, только вот мой робот об этом ничего не знает [confused] Что-то делаю не так?
|
|
Thanks:
|
|
|
|