Котирование не срабатывает

Котирование не срабатывает
Atom
11/5/2011
pehas


Использую EmulationTrader.
Генерирую стакан и сделки. Стратегия выставляет заявки при пробое ценового канала
Если заявка выставляется через котирование, то генерируется тонна заявок, которые затем снимаются.
История логов снизу-вверх (неполная)

Если выставлять заявки через RegisterOrder(order),
Code

var order = this.CreateOrder(Direction, this.Security.GetMarketPrice(Direction), 1);
this.RegisterOrder(order);

то вылетает exception на строке с this.RegisterOrder(order);
"Цена лимитной заявки не может быть равной 0."

В чем может быть проблема??



Thanks:


pehas

Avatar
Date: 11/8/2011
Reply


Разобрался вроде. Проблема была в том, что на момент обработки свечей, стакан не был подгружен. Заработало, как только стал регистрировать свечи по событию обновления стакана
Code

            CandleToken CMToken = null;
            this._trader.QuotesChanged += depths =>
            {
                if (CMToken == null && depths.FirstOrDefault(d => d.Security == security) != null)
                    CMToken = this._cm.RegisterTimeFrameCandles(security, this._timeFrame);
            };


Однако, непонятно, как стратегия может не видеть стакан, если она уже видит свечи?
Thanks:

Sergey Masyura

Avatar
Date: 11/8/2011
Reply


pehas
Разобрался вроде. Проблема была в том, что на момент обработки свечей, стакан не был подгружен. Заработало, как только стал регистрировать свечи по событию обновления стакана
Code

            CandleToken CMToken = null;
            this._trader.QuotesChanged += depths =>
            {
                if (CMToken == null && depths.FirstOrDefault(d => d.Security == security) != null)
                    CMToken = this._cm.RegisterTimeFrameCandles(security, this._timeFrame);
            };


Однако, непонятно, как стратегия может не видеть стакан, если она уже видит свечи?


RegisterTimeFrameCandles надо вызывать один раз при старте, либо до старта стратегии. В таком виде при повторной регистрации сразу же получите исключение, что данный тайм-фрейм уже зарегистрирован по данному инструменту, соотвественно тестирование нагнется.
Thanks:

pehas

Avatar
Date: 11/8/2011
Reply


sergey.masyura


RegisterTimeFrameCandles надо вызывать один раз при старте, либо до старта стратегии. В таком виде при повторной регистрации сразу же получите исключение, что данный тайм-фрейм уже зарегистрирован по данному инструменту, соотвественно тестирование нагнется.



В моем примере регистрация происходит только один раз при первом вызове события QuotesChanged. Так что ошибки не будет. Но получается все равно не красиво. А если вызывать RegisterTimeFrameCandles только один раз вне этого события, то почему-то стратегия видит свечи, но при обработке свечи метод this.Security.GetMarketPrice(Direction) возвращает 0, соответственно при регистрации лимитного ордера вылетает exception

Сейчас уже не вспомню, возможно вызывал registerTimeFrameCandles после инициализации стратегии. Могло ли это быть проблемой из за которой this.Security.GetMarketPrice(Direction) возвращал 0?
Thanks:


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy