S# 4.1.5: перестало срабатывать правило WhenNewMyTrades()

S# 4.1.5: перестало срабатывать правило WhenNewMyTrades()
Atom
16.10.2012
Ant.On.


Напишу сразу несколько проблем с которыми столкнулся при переходе на новые версии.
Выкачал с 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.PriorityQueue`2.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.RealTimeEmulationTrader`1.#=qfiTYh07Tf3X0oetJXF6rUxRfV7XLv04MClyynJxpMZ8=(IEnumerable`1 #=q4rrcDObcvigkYsB8qiYEmA==)
at Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)
at Ecng.ComponentModel.EventsContainer`1.Raise(IEnumerable`1 items)


Также с версии 4.1.3 (раньше был на 4.0) не работают правила Security.WhenBestBidPriceLess() и Security.WhenBestAskPriceLess(); - тоже просто не заходит в обработчик.
Может быть это просто связано с какими то изменениями и надо стратегии/правила/EmulationTrader как-то по-другому запускать?
Заранее спасибо!

Теги:


Спасибо:


< 1 2 
pyhta4og

Фотография
Дата: 19.10.2012
Ответить


tony_inv
Да, экспорт стакана запущен. Пробовал применять правило как
Код
sec.WhenBestBidPriceLess(sec.ShrinkPrice(price / (1 + treshold / 100))).Do(ReQuote).Apply(this);

так и:
Код
sec.GetMarketDepth().WhenBestBidPriceLess(sec.ShrinkPrice(price / (1 + treshold / 100))).Do(ReQuote).Apply(this);


Возможно когда правило применяется к конкретному инструменту то нужно что-то еще указать?
В логах не пишет ничего. Вроде режим логгирования поставил Debug (LogLevels.Debug). Хочется, чтобы когда бид падает ниже определнной цены запускался обработчик ReQuote(). Логов и полного кода сейчас дать не могу, т.к. нет доступа к компу с системой (собственно по этой причине и юзер новый и с эмулятором еще нет ответа). Что именно нужно - лог стратегии? лог трейдера? я приводил полные логи фактически выше...




Логи трейдера нужны. В режиме Debug должно писаться куча сообщений о создании и активации правил. И куча сообщений типа "IN/OUT/EM" по всем данным которые поступали или исходили из эмулятора.

Вы уверены что логи RealTimeEmulationTrader стоят в DEBUG? Как вы его создаете (кусочек кода?)
Спасибо:

tony_inv

Фотография
Дата: 20.10.2012
Ответить


Блин, щас еще раз посмотрел как создаю, и понял что логгировал не EmulationTrader а его Underlying. Переключил, логи пошли как вы говорите, - но к сожалению, торгов нет - проверить не могу:( Спасибо за комментарий. А создавал так:
Код
                            trader = new RealTimeEmulationTrader<QuikTrader>(new QuikTrader(Path.Text) { IsAsyncMode = true });
                            ((RealTimeEmulationTrader<QuikTrader>)trader).LogLevel = LogLevels.Debug;
                            _logManager.Sources.Add(((RealTimeEmulationTrader<QuikTrader>)trader).UnderlyingTrader);

теперь так:
Код
                            trader = new RealTimeEmulationTrader<QuikTrader>(new QuikTrader(Path.Text) { IsAsyncMode = true });
                            ((RealTimeEmulationTrader<QuikTrader>)trader).LogLevel = LogLevels.Debug;
                            _logManager.Sources.Add(trader);
Спасибо:

tony_inv

Фотография
Дата: 23.10.2012
Ответить


Итак, привожу куски логов, как мне кажется наиболее релевантные (сам лог файл очень большой). Кусок, в котором видно, что заявка выставляется:
Цитата:
2012/10/22 19:43:01.211|Debug |RealTimeEmulationTrader`1|IN:MarketDepth, T=19:43:01.211Бид 9469 11/Оффер 9471 4(1)@19:43:01.211[1,0]
2012/10/22 19:43:01.211|Debug |RealTimeEmulationTrader`1|EM:Registering,T=19:43:00.322,70958764/0 Покупка Цена=9464 Объем=1 Сост=None Бал=1@19:43:00.322[1,0]
2012/10/22 19:43:01.211|Debug |RealTimeEmulationTrader`1|OUT:Registered,T=19:43:00.322,70958764/1 Покупка Цена=9464 Объем=1 Сост=Active Бал=1
@19:43:00.322[1,0]
2012/10/22 19:43:01.211|Debug |RealTimeEmulationTrader`1|PUT 70958764/1 Покупка Цена=9464 Объем=1 Сост=Active Бал=1 REST 1
2012/10/22 19:43:01.226|Debug |RealTimeEmulationTrader`1|CL:Registered,T=19:43:00.322,70958764/1 Покупка Цена=9464 Объем=1 Сост=Active Бал=1
@19:43:00.322[1,0]
2012/10/22 19:43:01.242|Debug |RealTimeEmulationTrader`1|EM:MarketDepth, T=19:43:01.211Бид 9469 11/Оффер 9471 4(1)@19:43:01.211[0,0]
2012/10/22 19:43:01.242|Debug |RealTimeEmulationTrader`1|OUT:MarketDepth, T=19:43:01.211Бид 9469 11/Оффер 9471 4(1)@19:43:01.211[0,0]
2012/10/22 19:43:01.242|Debug |RealTimeEmulationTrader`1|CL:MarketDepth, T=19:43:01.211Бид 9469 11/Оффер 9471 4(1)@19:43:01.211[0,0]

Кусок, в котором видно, что офер в стакане был ниже чем 9464:
Цитата:
2012/10/22 20:00:37.692|Debug |RealTimeEmulationTrader`1|EM:MarketDepth, T=20:00:37.692Бид 9465 9/Оффер 9466 88(1)@20:00:37.692[0,0]
2012/10/22 20:00:37.692|Debug |RealTimeEmulationTrader`1|OUT:MarketDepth, T=20:00:37.692Бид 9465 9/Оффер 9466 88(1)@20:00:37.692[0,0]
2012/10/22 20:00:37.692|Debug |RealTimeEmulationTrader`1|CL:MarketDepth, T=20:00:37.692Бид 9465 9/Оффер 9466 88(1)@20:00:37.692[0,0]
2012/10/22 20:00:38.690|Debug |RealTimeEmulationTrader`1|IN:MarketDepth, T=20:00:38.690Бид 9465 5/Оффер 9466 70(1)@20:00:38.690[0,0]
2012/10/22 20:00:38.690|Debug |RealTimeEmulationTrader`1|EM:MarketDepth, T=20:00:38.690Бид 9465 5/Оффер 9466 70(1)@20:00:38.690[0,0]
2012/10/22 20:00:38.690|Debug |RealTimeEmulationTrader`1|OUT:MarketDepth, T=20:00:38.690Бид 9465 5/Оффер 9466 70(1)@20:00:38.690[0,0]
2012/10/22 20:00:38.690|Debug |RealTimeEmulationTrader`1|CL:MarketDepth, T=20:00:38.690Бид 9465 5/Оффер 9466 70(1)@20:00:38.690[0,0]
2012/10/22 20:00:39.688|Debug |RealTimeEmulationTrader`1|IN:MarketDepth, T=20:00:39.688Бид 9463 1/Оффер 9464 11(1)@20:00:39.688[0,0]
2012/10/22 20:00:39.688|Debug |RealTimeEmulationTrader`1|EM:MarketDepth, T=20:00:39.688Бид 9463 1/Оффер 9464 11(1)@20:00:39.688[0,0]
2012/10/22 20:00:39.688|Debug |RealTimeEmulationTrader`1|OUT:MarketDepth, T=20:00:39.688Бид 9463 1/Оффер 9464 11(1)@20:00:39.688[0,0]
2012/10/22 20:00:39.688|Debug |RealTimeEmulationTrader`1|CL:MarketDepth, T=20:00:39.688Бид 9463 1/Оффер 9464 11(1)@20:00:39.688[0,0]
2012/10/22 20:00:40.687|Debug |RealTimeEmulationTrader`1|IN:MarketDepth, T=20:00:40.687Бид 9463 1/Оффер 9464 11(1)@20:00:40.687[0,0]
2012/10/22 20:00:40.687|Debug |RealTimeEmulationTrader`1|EM:MarketDepth, T=20:00:40.687Бид 9463 1/Оффер 9464 11(1)@20:00:40.687[0,0]
2012/10/22 20:00:40.687|Debug |RealTimeEmulationTrader`1|OUT:MarketDepth, T=20:00:40.687Бид 9463 1/Оффер 9464 11(1)@20:00:40.687[0,0]
2012/10/22 20:00:40.687|Debug |RealTimeEmulationTrader`1|CL:MarketDepth, T=20:00:40.687Бид 9463 1/Оффер 9464 11(1)@20:00:40.687[0,0]
2012/10/22 20:00:41.685|Debug |RealTimeEmulationTrader`1|IN:MarketDepth, T=20:00:41.685Бид 9463 1/Оффер 9464 8(1)@20:00:41.685[0,0]

Больше в логах эта заявка не упоминается... Лог стратегии:
Цитата:
2012/10/22 19:43:00.758| |PTC_SBRF-12.12@RTS_SPBFUT00360|Стратегия запущена. [0,-1]. Позиция при старте 0.
2012/10/22 19:43:00.790| |Q_SBRF-12.12@RTS_SPBFUT00360|Стратегия запущена. [0,1]. Позиция при старте 0.
2012/10/22 19:43:00.836| |BS_SBRF-12.12@RTS_SPBFUT00360|Стратегия запущена. [1,1]. Позиция при старте 0.

Этого достаточно? если нет, могу послать лог файл весь...
Что необходимо показать для решения проблемы с работой правила WhenBestBidPriceLess?
Спасибо:

esper

Фотография
Дата: 23.10.2012
Ответить


Попробуйте использовать правило так:
Код
s.WhenBestBidPriceLess(new Unit(price, UnitTypes.Limit)).Do()
Спасибо: tony_inv

pyhta4og

Фотография
Дата: 23.10.2012
Ответить


Попробуйте подписаться на Trader.SecurityChanged - они будут вам приходить в стратегию?
Спасибо:

tony_inv

Фотография
Дата: 24.10.2012
Ответить


Спасибо,
Код
s.WhenBestBidPriceLess(new Unit(price, UnitTypes.Limit)).Do()

Это работает.
Спасибо:
< 1 2 

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy