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

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


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

... TS | 01.09.2009 00:00:00.000 | | Стратегия запущена. MQS | 01.09.2009 00:34:59.990 | Внимание | Заявка 60480894 не имеет состояния. MQS | 01.09.2009 00:34:59.990 | | Заявка 60480894 на Sell отправлена с ценой 1500 объемом 1. EmulationTrader | 01.09.2009 00:34:59.990 | | RegisterOrder: TransactionId=60480894, Id=4, Price=1500, Balance=1, Security=UXZ1@FUTUX, State=Done MQS | 01.09.2009 00:34:59.990 | | Регистрация новой заявки на Sell с ценой 1500 и объемом 1. MQS | 01.09.2009 00:34:59.990 | | Отмена заявки 60480893 прошло успешно. MQS | 01.09.2009 00:29:59.990 | | Отмена заявки 60480893. EmulationTrader | 01.09.2009 00:29:59.990 | | CancelOrder: TransactionId=60480893, Id=3, Price=1495, Balance=1, Security=UXZ1@FUTUX, State=Done MQS | 01.09.2009 00:29:59.990 | | Котирование заявки 60480893 на Sell с ценой 1495 объемом 1. MQS | 01.09.2009 00:29:59.990 | | Лучший бид 1420 и лучший аск 1465. MQS | 01.09.2009 00:29:59.990 | | Цена текущей 1495 и лучшей 1465. MQS | 01.09.2009 00:24:59.990 | | Обработка Limit заявки 60480893 на Sell с номером 3. TS | 01.09.2009 00:24:59.990 | | Обработка Limit заявки 60480893 на Sell с номером 3. EmulationTrader | 01.09.2009 00:24:59.990 | | New order: TransactionId=60480893, Id=3, Price=1495, Balance=1, Security=UXZ1@FUTUX, State=Done MQS | 01.09.2009 00:19:59.990 | Внимание | Заявка 60480893 не имеет состояния. MQS | 01.09.2009 00:19:59.990 | | Заявка 60480893 на Sell отправлена с ценой 1495 объемом 1. EmulationTrader | 01.09.2009 00:19:59.990 | | RegisterOrder: TransactionId=60480893, Id=3, Price=1495, Balance=1, Security=UXZ1@FUTUX, State=Done MQS | 01.09.2009 00:19:59.990 | | Регистрация новой заявки на Sell с ценой 1495 и объемом 1. MQS | 01.09.2009 00:19:59.990 | | Отмена заявки 60480892 прошло успешно. MQS | 01.09.2009 00:14:59.990 | | Отмена заявки 60480892. EmulationTrader | 01.09.2009 00:14:59.990 | | CancelOrder: TransactionId=60480892, Id=2, Price=1460, Balance=1, Security=UXZ1@FUTUX, State=Done MQS | 01.09.2009 00:14:59.990 | | Котирование заявки 60480892 на Sell с ценой 1460 объемом 1. MQS | 01.09.2009 00:14:59.990 | | Лучший бид 1455 и лучший аск 1495. MQS | 01.09.2009 00:14:59.990 | | Цена текущей 1460 и лучшей 1495. MQS | 01.09.2009 00:14:59.990 | | Обработка Limit заявки 60480892 на Sell с номером 2. TS | 01.09.2009 00:14:59.990 | | Обработка Limit заявки 60480892 на Sell с номером 2. EmulationTrader | 01.09.2009 00:14:59.990 | | New order: TransactionId=60480892, Id=2, Price=1460, Balance=1, Security=UXZ1@FUTUX, State=Done MQS | 01.09.2009 00:09:59.990 | Внимание | Заявка 60480892 не имеет состояния. MQS | 01.09.2009 00:09:59.990 | | Заявка 60480892 на Sell отправлена с ценой 1460 объемом 1. EmulationTrader | 01.09.2009 00:09:59.990 | | RegisterOrder: TransactionId=60480892, Id=2, Price=1460, Balance=1, Security=UXZ1@FUTUX, State=Done MQS | 01.09.2009 00:09:59.990 | | Регистрация новой заявки на Sell с ценой 1460 и объемом 1. MQS | 01.09.2009 00:09:59.990 | | Отмена заявки 60480891 прошло успешно. MQS | 01.09.2009 00:04:59.990 | | Отмена заявки 60480891. EmulationTrader | 01.09.2009 00:04:59.990 | | CancelOrder: TransactionId=60480891, Id=1, Price=1450, Balance=1, Security=UXZ1@FUTUX, State=Done MQS | 01.09.2009 00:04:59.990 | | Котирование заявки 60480891 на Sell с ценой 1450 объемом 1. MQS | 01.09.2009 00:04:59.990 | | Лучший бид 1445 и лучший аск 1460. MQS | 01.09.2009 00:04:59.990 | | Цена текущей 1450 и лучшей 1460. MQS | 01.09.2009 00:04:59.990 | | Обработка Limit заявки 60480891 на Sell с номером 1. TS | 01.09.2009 00:04:59.990 | | Обработка Limit заявки 60480891 на Sell с номером 1. EmulationTrader | 01.09.2009 00:04:59.990 | | New order: TransactionId=60480891, Id=1, Price=1450, Balance=1, Security=UXZ1@FUTUX, State=Done MQS | 31.08.2009 23:59:59.990 | | Заявка 60480891 на Sell отправлена с ценой 1450 объемом 1. EmulationTrader | 31.08.2009 23:59:59.990 | | RegisterOrder: TransactionId=60480891, Id=1, Price=1450, Balance=1, Security=UXZ1@FUTUX, State=Done MQS | 31.08.2009 23:59:59.990 | | Регистрация новой заявки на Sell с ценой 1450 и объемом 1. MQS | 01.09.2009 00:25:00.000 | | Стратегия запущена. TS | 01.09.2009 00:25:00.000 | | Пробой канала (6) Sell Время: 01.09.2009 0:25:00

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


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


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


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

        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