В тех поддержку баги уже отправил, но решил написать и здесь. Вдруг кому-нибудь будет полезно.
Все ошибки относятся к тестированию (EmulationTrader)
Сравнение ошибок версий 4.1.4 и 4.1.5 (commit 19627 trunk)
1) ReRgisterOrder в атомарном режиме не работает. Исправлено в 4.1.5.
2) При тестировании на OrderLog неправильно строятся стаканы из OrderLog. В версии 4.1.5 без изменений. (Описание неправильного построения с примерами смотреть ниже)
3) При тестировании на OrderLog события NewOrderLogItems срабатывают нормально. В версии 4.1.5. события NewOrderLogItems перестают срабатывать, но стаканы строятся по OrderLog (хоть и с ошибками – см. пункт 2) ), события MarketDepthChange вызываются.
4) Котирование (MarketQuotingStrategy, тестирование на стаканах, атомарный режим выключен) – непонятные задержки в логе. Например, есть задержка между отправкой заявки на регистрацию и получение сообщения о подтверждении регистрации на бирже (несмотря на то, что EmulationTrader.MarketEmulator.Settings.Latency = = 0). Исправлено в 4.1.5
5) Котирование (MarketQuotingStrategy, тестирование на стаканах, атомарный режим выключен) – в логе постоянно возникают двойные строки об отмене заявки. В версии 4.1.5 без изменений.
6) Видно, что в логах котирования отличается последняя строка, при одной и той же истории стаканов
Лог котирования для версии 4.1.4:
2012.09.13 00:00:00.000| |T_TEST@RTS_SuperProfit|Стратегия запущена.
2012.09.14 00:00:01.000| |MQS_TEST@RTS_SuperProfit|Стратегия запущена.
2012.09.14 00:00:01.000| |MQS_TEST@RTS_SuperProfit|Котирование на Buy объема 1.
2012.09.14 00:00:01.000| |MQS_TEST@RTS_SuperProfit|Приостановка правил. _rulesSuspendCount 1.
2012.09.14 00:00:01.000| |MQS_TEST@RTS_SuperProfit|Возобновление правил. _rulesSuspendCount 0.
2012.09.14 00:00:01.000| |MQS_TEST@RTS_SuperProfit|Цена текущей NULL и лучшей 100.
2012.09.14 00:00:01.000| |MQS_TEST@RTS_SuperProfit|Лучший бид NULL и лучший аск NULL.
2012.09.14 00:00:01.000| |MQS_TEST@RTS_SuperProfit|Регистрация новой заявки на Buy с ценой 100 и объемом 1.
2012.09.14 00:00:01.000| |MQS_TEST@RTS_SuperProfit|Заявка 14123657 на Buy отправлена с ценой 100 объемом 1.
2012.09.14 00:00:02.000| |MQS_TEST@RTS_SuperProfit|Заявка 14123657 принята биржей.
2012.09.14 00:00:02.000| |MQS_TEST@RTS_SuperProfit|Сброс счетчика ошибок регистрации с 0 до нуля.
2012.09.14 00:01:00.000| |MQS_TEST@RTS_SuperProfit|Цена текущей 100 и лучшей 110.
2012.09.14 00:01:00.000| |MQS_TEST@RTS_SuperProfit|Лучший бид 100 и лучший аск 120.
2012.09.14 00:01:00.000| |MQS_TEST@RTS_SuperProfit|Котирование заявки 14123657 на Buy с ценой 100 объемом 1.
2012.09.14 00:01:00.000| |MQS_TEST@RTS_SuperProfit|Отмена заявки 14123657.
2012.09.14 00:01:00.000| |MQS_TEST@RTS_SuperProfit|Отмена заявки 14123657.
2012.09.14 00:01:00.000| |MQS_TEST@RTS_SuperProfit|Заявка 14123657 больше не активна.
2012.09.14 00:01:00.000| |MQS_TEST@RTS_SuperProfit|Заявка 14123657 была снята. Время снятия 14.09.2012 0:01:00.
2012.09.14 00:01:00.000| |MQS_TEST@RTS_SuperProfit|Цена текущей NULL и лучшей 110.
2012.09.14 00:01:00.000| |MQS_TEST@RTS_SuperProfit|Лучший бид 110 и лучший аск 130.
Лог котирования для версии 4.1.5:
2012.09.13 00:00:00.000| |T_TEST@RTS_SuperProfit|Стратегия запущена. [0,-1]
2012.09.14 00:00:00.000| |MQS_TEST@RTS_SuperProfit|Стратегия запущена. [0,1]
2012.09.14 00:00:00.000| |MQS_TEST@RTS_SuperProfit|Котирование на Buy объема 1.
2012.09.14 00:00:00.000| |MQS_TEST@RTS_SuperProfit|Приостановка правил. _rulesSuspendCount 1.
2012.09.14 00:00:00.000| |MQS_TEST@RTS_SuperProfit|Возобновление правил. _rulesSuspendCount 0.
2012.09.14 00:00:00.000| |MQS_TEST@RTS_SuperProfit|Цена текущей NULL и лучшей 100.
2012.09.14 00:00:00.000| |MQS_TEST@RTS_SuperProfit|Лучший бид NULL и лучший аск NULL.
2012.09.14 00:00:00.000| |MQS_TEST@RTS_SuperProfit|Регистрация новой заявки на Buy с ценой 100 и объемом 1.
2012.09.14 00:00:00.000| |MQS_TEST@RTS_SuperProfit|Заявка 19145282 на Buy отправлена с ценой 100 объемом 1.
2012.09.14 00:00:00.000| |MQS_TEST@RTS_SuperProfit|Заявка 19145282 принята биржей.
2012.09.14 00:00:00.000| |MQS_TEST@RTS_SuperProfit|Сброс счетчика ошибок регистрации с 0 до нуля.
2012.09.14 00:01:00.000| |MQS_TEST@RTS_SuperProfit|Цена текущей 100 и лучшей 110.
2012.09.14 00:01:00.000| |MQS_TEST@RTS_SuperProfit|Лучший бид 100 и лучший аск 120.
2012.09.14 00:01:00.000| |MQS_TEST@RTS_SuperProfit|Котирование заявки 19145282 на Buy с ценой 100 объемом 1.
2012.09.14 00:01:00.000| |MQS_TEST@RTS_SuperProfit|Отмена заявки 19145282.
2012.09.14 00:01:00.000| |MQS_TEST@RTS_SuperProfit|Отмена заявки 19145282.
2012.09.14 00:01:00.000| |MQS_TEST@RTS_SuperProfit|Заявка 19145282 больше не активна.
2012.09.14 00:01:00.000| |MQS_TEST@RTS_SuperProfit|Заявка 19145282 была снята. Время снятия 14.09.2012 0:01:00.
2012.09.14 00:01:00.000| |MQS_TEST@RTS_SuperProfit|Цена текущей NULL и лучшей 110.
2012.09.14 00:01:00.000| |MQS_TEST@RTS_SuperProfit|Лучший бид 100 и лучший аск 120.
Пример неправильно построения стаканов из лога (EmulationTrader).
1) По событиям NewOrderLogItems видно, что в любой момент времени в стакане должны присутствовать обе котировки, как bid, так и ask. В первом же событие MarketDepthChange котировка ask отсутствует.
2) По событиям NewOrderLogItems видно, что в любой момент времени в стакане объем по цене bid равен объему по цене ask. По событиям MarketDepthChange видно, что при построении стаканов по OrderLog это не соблюдается.
Примечание. Файл истории OrderLog прилагается. OrderLog создан специально для отладки и сохранен через StorageRegistry. Лог создан с тем расчетом, что бы формировать стакан глубиной 1 с неизменными ценами bid и ask, и периодическими сделками по этим ценам.
Логи:
MarketDepthChange:
1) Бид 100 10
2) Бид 100 11\r\nОффер 130 10
3) Бид 100 10\r\nОффер 130 11
4) Бид 100 11\r\nОффер 130 10
5) Бид 100 10\r\nОффер 130 11
NewOrderLogItems:
1)
[0]: {Регистрация заявки 0/10000000 Покупка 100 10 Active 0}
[1]: {Регистрация заявки 0/10000001 Продажа 130 10 Active 0}
2)
[0]: {Регистрация заявки 0/10000002 Покупка 100 1 Active 0}
[1]: {Регистрация заявки 0/10000003 Продажа 130 1 Active 0}
3)
[0]: {Регистрация заявки 0/10000004 Продажа 100 1 Active 0}
[1]: {Сведение заявки 0/10000004 Продажа 100 1 Done 0 на сделку 14.09.2012 0:01:01 1 100 1}
[2]: {Сведение заявки 0/10000002 Покупка 100 1 Done 0 на сделку 14.09.2012 0:01:01 1 100 1}
[3]: {Регистрация заявки 0/10000005 Покупка 130 1 Active 0}
[4]: {Сведение заявки 0/10000005 Покупка 130 1 Done 0 на сделку 14.09.2012 0:01:01 2 130 1}
[5]: {Сведение заявки 0/10000003 Продажа 130 1 Done 0 на сделку 14.09.2012 0:01:01 2 130 1}
4)
[0]: {Регистрация заявки 0/10000006 Покупка 100 1 Active 0}
[1]: {Регистрация заявки 0/10000007 Продажа 130 1 Active 0}
5)
[0]: {Регистрация заявки 0/10000008 Продажа 100 1 Active 0}
[1]: {Сведение заявки 0/10000008 Продажа 100 1 Done 0 на сделку 14.09.2012 0:02:01 3 100 1}
[2]: {Сведение заявки 0/10000006 Покупка 100 1 Done 0 на сделку 14.09.2012 0:02:01 3 100 1}
[3]: {Регистрация заявки 0/10000009 Покупка 130 1 Active 0}
[4]: {Сведение заявки 0/10000009 Покупка 130 1 Done 0 на сделку 14.09.2012 0:02:01 4 130 1}
[5]: {Сведение заявки 0/10000007 Продажа 130 1 Done 0 на сделку 14.09.2012 0:02:01 4 130 1}