Напишу сразу несколько проблем с которыми столкнулся при переходе на новые версии. Выкачал с codeplex из trunk версию S# (4.1.5 видимо) и стратегия перестала заходить в функцию обработчик правила WhenNewMyTrades(). Правило добавляю так: this.WhenNewMyTrades().Do(Proc).Apply(this); Сделки в системе есть. В логах ничего, и ошибок не выдает. На версиях 4.1.4 и 4.1.3 работало.
Еще RealTimeEmulationTrader при работе выкидывает Exception:
|Error |QuikTrader|System.InvalidOperationException: Priority queue is empty at Ecng.Collections.PriorityQueue
2.Peek() at Ecng.Collections.PriorityQueue2.PeekValue() at StockSharp.Algo.Testing.MarketEmulator.#=qJBGOJSwSh1TIzfSCaBP_NjwG2KLTkF4SftYzOjliS5k=.#=qyHleL509f0chKkK2FQrqgg==() at StockSharp.Algo.Testing.MarketEmulator.Emulate(Message msg) at StockSharp.Algo.Testing.MarketEmulator.UpdateQuotes(MarketDepth marketDepth, MarketDepth delta) at StockSharp.Algo.Testing.RealTimeEmulationTrader1.#=qfiTYh07Tf3X0oetJXF6rUxRfV7XLv04MClyynJxpMZ8=(IEnumerable1 #=q4rrcDObcvigkYsB8qiYEmA==) at Ecng.Common.DelegateHelper.SafeInvoke(Action1 handler, T arg) at Ecng.ComponentModel.EventsContainer1.Raise(IEnumerable`1 items)
Также с версии 4.1.3 (раньше был на 4.0) не работают правила Security.WhenBestBidPriceLess() и Security.WhenBestAskPriceLess(); - тоже просто не заходит в обработчик. Может быть это просто связано с какими то изменениями и надо стратегии/правила/EmulationTrader как-то по-другому запускать? Заранее спасибо!
Comments (16)
Login or Create account, Log in or register to leave a comment
Это все на эмуляторе?
нет, на эмуляторе сделки не проходят. Это на реальных сделках не работает
🤨 Все же не понял, где именно не работает? Лог нужен в любом случае.
Есть 3 проблемы:
а вот лог если ставить лимитки( цена проходила через них)
3.не работает правило Security.WhenBestAskPriceLess(); Раньше его не использовал и не могу сказать работало ли оно на 4.0. Но на 4.1.х у меня не запускается...
Привет,
Что касается WhenNewMyTrades, посмотрите тему http://www.stocksharp.com/forum/3042/Nie-prikhodit-sobytiie-OnNewMyTrades/. Для заявок, размещаемых через котирование, попробуйте выставлять WaitAllTrades=true. Свойство было введено в 4.1.4.
На КП лежит фикс с доп логами. Можете включить прогнать свой код еще раз с новыми сборками? При этом надо включить у RTEmuTrader режим логирования Debug.
Проблема 2 была решена - спасибо. правило WhenNewMyTrades работает как надо. Проблема 1. Эмулятор еще не запускал, - завтра напишу результаты. Проблема 3 осталась: правило WhenBid/AskPriceLess/More не срабатывает. В логах ничего (правда режим логгирования был не дебаг здесь)
Больше подробностей. Код, логи, что ожидается, что в реальности, как проверяется.
А почему юзер новый?
Да, экспорт стакана запущен. Пробовал применять правило как
так и:
Возможно когда правило применяется к конкретному инструменту то нужно что-то еще указать? В логах не пишет ничего. Вроде режим логгирования поставил Debug (LogLevels.Debug). Хочется, чтобы когда бид падает ниже определнной цены запускался обработчик ReQuote(). Логов и полного кода сейчас дать не могу, т.к. нет доступа к компу с системой (собственно по этой причине и юзер новый и с эмулятором еще нет ответа). Что именно нужно - лог стратегии? лог трейдера? я приводил полные логи фактически выше...
sec.WhenBestBidPriceLess(sec.ShrinkPrice(price / (1 + treshold / 100))).Do(ReQuote).Apply(this);
Логи трейдера нужны. В режиме Debug должно писаться куча сообщений о создании и активации правил. И куча сообщений типа "IN/OUT/EM" по всем данным которые поступали или исходили из эмулятора.
Вы уверены что логи RealTimeEmulationTrader стоят в DEBUG? Как вы его создаете (кусочек кода?)
Блин, щас еще раз посмотрел как создаю, и понял что логгировал не EmulationTrader а его Underlying. Переключил, логи пошли как вы говорите, - но к сожалению, торгов нет - проверить не могу:( Спасибо за комментарий. А создавал так:
теперь так:
Итак, привожу куски логов, как мне кажется наиболее релевантные (сам лог файл очень большой). Кусок, в котором видно, что заявка выставляется:
Попробуйте подписаться на Trader.SecurityChanged - они будут вам приходить в стратегию?
Попробуйте использовать правило так:```csharp s.WhenBestBidPriceLess(new Unit(price, UnitTypes.Limit)).Do()
Спасибо,
Это работает.