Котирование не срабатывает
Atom Ответить
05.11.2011


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

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

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

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

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



Спасибо:




3 Ответов
pehas

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


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

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


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

Sergey Masyura

Фотография
Автор статей
Дата: 07.11.2011
Ответить


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

            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 надо вызывать один раз при старте, либо до старта стратегии. В таком виде при повторной регистрации сразу же получите исключение, что данный тайм-фрейм уже зарегистрирован по данному инструменту, соотвественно тестирование нагнется.
Спасибо:

pehas

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


sergey.masyura Перейти


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



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

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


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

loading
clippy