MarketQuotingStrategy не ждет сделки
Atom Ответить
23.11.2012


Столкнулся со следующей проблемой: иногда правило WhenStopped() для MarketQuotingStrategy срабатывает позже чем правило WhenNewMyTrades(), что нелогично при выставленным флаге WaitAllTrades=true;

Код
                        q = new MarketQuotingStrategy(OrderDirections.Buy, volume);
                    q.Volume = q.QuotingVolume;
                    q.CancelOrdersWhenStopping = false; //to eliminate useless cancelation on stoping
                    q.PriceOffset = new Unit(1, UnitTypes.Step);
                    q.BestPriceOffset = new Unit(1, UnitTypes.Step);
                    q.WaitAllTrades = true;
                    q.WhenNewMyTrades().Do(()=>this.AddInfoLog("trade...")).Apply(this);
                    q.DisposeOnStop = true;

                    q.WhenStopped().Do(() =>
                    {
                        this.AddInfoLog("quoting complete");
                    }).Once().Apply(this);
q.Start()


в чем может быть дело? логов пока нет, т.к. ошибка проявляется не всегда...

Теги:


Спасибо:




7 Ответов
esper

Фотография
Программист
Дата: 23.11.2012
Ответить


Когда срабатывает правило WhenStopped, в стратегию котирования пришли уже все сделки?
Спасибо:

Ant.On.

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


нет. как раз проблема в том, что коллекция q.MyTrades пуста
Автор топика
Спасибо:

esper

Фотография
Программист
Дата: 23.11.2012
Ответить


На какой версии проверяете?
Спасибо:

Ant.On.

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


4.1.5 которая на сайте в box лежит (от 23 Октября)
Автор топика
Спасибо:

Alexander

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


Используйте свежую версию - 4.1.6 или 4.1.7
Спасибо:

Ant.On.

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


скачал с codeplex trunk. Проблема осталась.
Код:
Код
                    q.Volume = q.QuotingVolume;
                    q.CancelOrdersWhenStopping = false; //to eliminate useless cancelation on stoping
                    q.PriceOffset = new Unit(1, UnitTypes.Step);
                    q.BestPriceOffset = new Unit(1, UnitTypes.Step);
                    q.WaitAllTrades = true;

                    //q.DisposeOnStop = true;

                    q.WhenStopped().Do(() =>
                    {
                        var tmp = this.securities.FirstOrDefault(sec => sec.getCode() == q.Security.Code);

                        this.AddInfoLog("{0}: Computing enter price. Quoter's position is {1}, average price of the trades is {2}, position in security is {3}", tmp.getCode(), q.PositionManager.Position, q.MyTrades.GetAveragePrice(), tmp.position);
                    }).Once().Apply(this);
                    bs.ChildStrategies.Add(q);


Логи:
[quote]2012/11/23 15:05:30.655| |MQS_VTBR-12.12@RTS_SPBFUT00360|Стратегия запущена. [0,2]. Позиция при старте 0.
2012/11/23 15:05:30.655| |MQS_VTBR-12.12@RTS_SPBFUT00360|Котирование на Buy объема 1.
2012/11/23 15:05:30.655| |MQS_VTBR-12.12@RTS_SPBFUT00360|Приостановка правил. _rulesSuspendCount 1.
2012/11/23 15:05:30.655| |MQS_VTBR-12.12@RTS_SPBFUT00360|Возобновление правил. _rulesSuspendCount 0.
2012/11/23 15:05:30.655| |MQS_VTBR-12.12@RTS_SPBFUT00360|Цена текущей NULL и лучшей 5224.
2012/11/23 15:05:30.655| |MQS_VTBR-12.12@RTS_SPBFUT00360|Лучший бид 5223 и лучший аск 5226.
2012/11/23 15:05:30.655| |MQS_VTBR-12.12@RTS_SPBFUT00360|Регистрация новой заявки на Buy с ценой 5224 и объемом 1.
2012/11/23 15:05:30.655| |QuikTrader|RegisterOrder: 53424961/0 Покупка Цена=5224 Объем=1 Сост=None Бал=1
2012/11/23 15:05:30.936| |QuikTrader|New order: 53424961/9496997436 Покупка Цена=5224 Объем=1 Сост=Active Бал=1
2012/11/23 15:05:30.936| |MQS_VTBR-12.12@RTS_SPBFUT00360|Заявка 53424961 принята биржей.
2012/11/23 15:05:30.936| |MQS_VTBR-12.12@RTS_SPBFUT00360|Сброс счетчика ошибок регистрации с 0 до нуля.
2012/11/23 15:05:30.936| |QuikTrader|Order changed: 53424961/9496997436 Покупка Цена=5224 Объем=1 Сост=Active Бал=1
2012/11/23 15:06:26.342| |MQS_VTBR-12.12@RTS_SPBFUT00360|Цена текущей 5224 и лучшей 5226.
2012/11/23 15:06:26.342| |MQS_VTBR-12.12@RTS_SPBFUT00360|Лучший бид 5225 и лучший аск 5226.
2012/11/23 15:06:26.342| |MQS_VTBR-12.12@RTS_SPBFUT00360|Котирование заявки 53424961 на Buy с ценой 5224 объемом 1.
2012/11/23 15:06:26.342| |MQS_VTBR-12.12@RTS_SPBFUT00360|Отмена заявки 53424961.
2012/11/23 15:06:26.342| |MQS_VTBR-12.12@RTS_SPBFUT00360|Отмена заявки 53424961.
2012/11/23 15:06:26.342| |QuikTrader|CancelOrder: 53424961/9496997436 Покупка Цена=5224 Объем=1 Сост=Active Бал=1
2012/11/23 15:06:26.671| |QuikTrader|Order changed: 53424961/9496997436 Покупка Цена=5224 Объем=1 Сост=Done Бал=1
2012/11/23 15:06:26.671| |MQS_VTBR-12.12@RTS_SPBFUT00360|Заявка 53424961 была снята. Время снятия 11/23/2012 15:02:50.
2012/11/23 15:06:26.671| |MQS_VTBR-12.12@RTS_SPBFUT00360|Цена текущей NULL и лучшей 5226.
2012/11/23 15:06:26.671| |MQS_VTBR-12.12@RTS_SPBFUT00360|Лучший бид 5225 и лучший аск 5226.
2012/11/23 15:06:26.671| |MQS_VTBR-12.12@RTS_SPBFUT00360|Регистрация новой заявки на Buy с ценой 5226 и объемом 1.
2012/11/23 15:06:26.671| |QuikTrader|RegisterOrder: 53424964/9497010537 Покупка Цена=5226 Объем=1 Сост=Done Бал=0
2012/11/23 15:06:26.905| |QuikTrader|New order: 53424964/9497010537 Покупка Цена=5226 Объем=1 Сост=Done Бал=0
2012/11/23 15:06:26.905| |MQS_VTBR-12.12@RTS_SPBFUT00360|Новая позиция: SPBFUT00360-VTBR-12.12@RTS=1.
2012/11/23 15:06:26.905| |MQS_VTBR-12.12@RTS_SPBFUT00360|Позиция изменилась на 1. Оставшийся объем 0.
2012/11/23 15:06:26.905| |MQS_VTBR-12.12@RTS_SPBFUT00360|Заканчиваем котирование.
2012/11/23 15:06:26.905| |MQS_VTBR-12.12@RTS_SPBFUT00360|Стратегия останавливается. [0,1]. Позиция при старте 1.
2012/11/23 15:06:26.905| |MQS_VTBR-12.12@RTS_SPBFUT00360|Правило 'Изменение стакана инструмента VTBR-12.12@RTS (0x83A5F8)'. Приостановлено.
2012/11/23 15:06:26.905| |MQS_VTBR-12.12@RTS_SPBFUT00360|Стратегия остановлена. [0,1]. Позиция при старте 1.
2012/11/23 15:06:26.905| VTBR: Computing enter price. Quoter's position is 1, average price of the trades is 0, position in security is -2

q.MyTrades.GetAveragePrice() выдает 0, т.к. в q.MyTrades нет трейдов.
Автор топика
Спасибо:

esper

Фотография
Программист
Дата: 23.11.2012
Ответить


Код
q.CancelOrdersWhenStopping = false;

Сейчас сделано таким образом, что для использования WaitAllTrades свойство CancelOrdersWhenStopping должно быть true.
Спасибо:


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

loading
clippy