S# 4.1.6 Работа с Quik. Брокер Уралсиб. В режиме RealTimeEmlationTrader ордера выставляются, и информация о их выполнении поступает в лог, strategy.PositionManager.Position показывает позицию.
Когда переключаюсь с эмулятора на реальный QuikTrader. Ордер выставляется, но похоже события изменения состояния не вызываются, соответственно strategy.PositionManager.Position показывает 0. Может кто подать идею, в какой стороне мне копать?
И при работе через эмулятор похоже часть событий не активируется по крайней мере NewMyTrade, но так как strategy.PositionManager.Position обновляется работать можно.
Комментарии (14)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
например событие strategy.OrderChanged.
И следующий код никогда не исполняется (то что внутри цикла foreach) хотя ордера выставляются.
такое впечатление что у меня событийная модель не работает.
Попробую сделать упрощеный тестовый примерчик.
Откуда то срисовал. Поменял на _trader.Orders.Any(o => o == t.Order), но все равно результат тот же, так как само событие NewMyTrades не вызывается.
Попробовал поставил, выполнение до цикла просто не доходит. Не вызывается совсем этот обработчик события NewMyTrades.
Если на реальном Quik (снят комментарий с #undef EMULATOR) то сделки совершаются но событие OrderChanged не срабатывает. не показывает Status.Text = _strategy.ProcessState.ToString(); не показывает PnL.Content = _strategy.PnLManager.PnL; не показывает Slippage.Content = _strategy.SlippageManager.Slippage; не показывает Position.Content = _strategy.PositionManager.Position; не показывает Latency.Content = _strategy.Latency;
Основной код:
Код стратегии (выставляет ордера по нажатии кнопок в форме ) :
Несколько замечаний по коду.
Добавьте на форму ComboBox с двумя Item. Что нибудь типа:
И потом в коде, в зависимости от того что выбранно создавать или QuikTrader или RTET<QuikTrader>
Рекомендую прочитать серию статей от FinDirector, почерпнете для себя много интересного.
В инициализаторе уже задано значение св-ва IsAsyncMode, нет смысла делать это еще раз.
Можно заменить на
Запуск/остановка экспорта
Если на экспорт запускаются все таблицы StartExport(), то нет смысла потом перечислять какие именно надо таблицы остановить.
Проще вызвать StopDde() или напрямую _trader.StopExport();
Дублируется base.OnClosing(e); Не смертельно, но все же.
Сначала подумал что в этом причина почему не срабатывает событие NewMyTrade, т.к. не совершается сделка. По идее не должно работать. Должно прийти сообщение об ошибке, что то типа цена ордера вне диапазона. Чтобы были цены планок лучше добавить соответствующие колонки в квик таблице "Инструменты" и потом добавить их в коде. Экспорт доп. колонок
Потом увидел что ценник выставляется по другому
И методы BuyAtmarket и SellAtMarket не используются. Да и вы пишете что сделки совершаются.
Тогда не понятно в чем может быть причина.
Попробуйте максимально упростить код, чтобы проверить отрабатывает ли событие NewMyTrade. Один шлюз, минимум кода в стратегии. Попробуйте на последней сборке с codeplex, возможно причина в S#.
для стратегии:
Может это как то проясняет дело. Простейший код в котором просто соединение с Quik выдает страную ошибку про какой-то инструмент😳
Ошибка в лог валится такая:2013/02/26 14:43:51.544|Debug |QuikTrader|Соединились 2013/02/26 14:43:53.367|Error |QuikTrader|System.InvalidOperationException: Инструмент с кодом RU000A0JPWC3 для бумажной позиции не найден. в StockSharp.Quik.QuikTrader.#=qjrOBFov$lIae$ZMCQLx7P1fQAe2X2s16$DxZRnv$aqU=.#=qjGe1xZF5fvarq_$jrR3XCQ==(IList
1 #=qKG6nGjj9uhl1Ndb5IDukAw==, Func2 #=qdrbWxV4uORvFCQd5d$c6og==) в #=qU8C8kAMUmJ0kPIeEJrF68f3NMymXDukMNgL4Dc7ffmr7PRgVzknJ3atY_n0PucT4.#=qB09_IBYvsxLb_dLzMi2NWQ==(DdeTable #=qOgXoydWCvsq2gXlddKoo0w==, IList1 #=qMeYWUEb44NrXcAvbPuNfiQ==, Action2 #=qolGBgTssErk3vXo538xxsQ==, Action`1 #=qIfmNdbFGgLtG9ybpXuosbQ==, Boolean #=qe3W9$GyIKMHUi59wvLuQeA==) 2013/02/26 14:43:53.441| |QuikTrader|Экспорт запущен. Мистика. 🤬Понял, сам дурак. Просто давно завис в облигациях РБК. Валяются в портфеле. А в таблицах (сделок, заявок и т.п) облигации отфильтрованы.
Включил фильтр на таблицу позиции по бумагам. Оставил одни фьючи. Ура. Все заработало. События на которые жаловался стали прилетать.
Похоже у вас не логируются исключения фоновых потоков. Это можно делать например так: