В тех поддержку баги уже отправил, но решил написать и здесь. Вдруг кому-нибудь будет полезно.
Все ошибки относятся к тестированию (EmulationTrader) Сравнение ошибок версий 4.1.4 и 4.1.5 (commit 19627 trunk)
ReRgisterOrder в атомарном режиме не работает. Исправлено в 4.1.5.
При тестировании на OrderLog неправильно строятся стаканы из OrderLog. В версии 4.1.5 без изменений. (Описание неправильного построения с примерами смотреть ниже)
При тестировании на OrderLog события NewOrderLogItems срабатывают нормально. В версии 4.1.5. события NewOrderLogItems перестают срабатывать, но стаканы строятся по OrderLog (хоть и с ошибками – см. пункт 2) ), события MarketDepthChange вызываются.
Котирование (MarketQuotingStrategy, тестирование на стаканах, атомарный режим выключен) – непонятные задержки в логе. Например, есть задержка между отправкой заявки на регистрацию и получение сообщения о подтверждении регистрации на бирже (несмотря на то, что EmulationTrader.MarketEmulator.Settings.Latency = = 0). Исправлено в 4.1.5
Котирование (MarketQuotingStrategy, тестирование на стаканах, атомарный режим выключен) – в логе постоянно возникают двойные строки об отмене заявки. В версии 4.1.5 без изменений.
Видно, что в логах котирования отличается последняя строка, при одной и той же истории стаканов
Лог котирования для версии 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).
По событиям NewOrderLogItems видно, что в любой момент времени в стакане должны присутствовать обе котировки, как bid, так и ask. В первом же событие MarketDepthChange котировка ask отсутствует.
По событиям NewOrderLogItems видно, что в любой момент времени в стакане объем по цене bid равен объему по цене ask. По событиям MarketDepthChange видно, что при построении стаканов по OrderLog это не соблюдается.
Примечание. Файл истории OrderLog прилагается. OrderLog создан специально для отладки и сохранен через StorageRegistry. Лог создан с тем расчетом, что бы формировать стакан глубиной 1 с неизменными ценами bid и ask, и периодическими сделками по этим ценам.
Логи:
MarketDepthChange:
Бид 100 10
Бид 100 11\r\nОффер 130 10
Бид 100 10\r\nОффер 130 11
Бид 100 11\r\nОффер 130 10
Бид 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}
コメント (7)
ログイン または アカウントを作成, コメントを残すにはログインまたは新規登録してください
Да. Вот код стратегии:
Котирование тестировал по сохраненной синтетической истории стаканов. Стаканы постоянной глубины (равной единице), с постоянными объемами bid/ask, постоянной величиной спреда и линейной зависимостью цен bid/ask от времени (номера стакана в истории).
Пробовал строить стаканы из OrderLog с помощью EmulationTrader. Пока не сделал _trader.RegisterOrderLog(security); вообще стаканов не получал (Почему об этом не написано в документации Стратегии->Тестирование->На истории ?). Также подтверждаю, MarketDepthChanged вызывается, NewOrderLogItems не вызывается.
Собственно, вопрос: решен ли баг с построением стаканов?
Второй вопрос: можно ли строить стаканы следующим образом:
в этом варианте у меня вылетают ошибка: "Котировка для заданной цены не была найдена. Parameter name: price Actual value was 146500." сам oli при этом "Снятие заявки 14280459331/9041172530 Покупка Цена=146500 Объем=1 Сост=Done Бал=0". Т.е. видимо снятие несуществующей заявки. Возможно это либо баги при сохранении ордер лога, и какие-то заявки не сохранились.
Liberal,
исправлено
Можете проверить?
Последнюю версию из dev/References брать?
Последнюю версию из dev/References брать?
из транка
Здравствуйте. Не буду поднимать новую тему. Есть ордер лог на пару дней, хочется на нем протестировать. Гидра , ее последняя версия, его видит, генерирует стаканы.
Пишу следующее:
Как результат, MarketTimeChanged бежит, но обработчик изменения стакана и появления ордер-лога не срабатывает. http://stocksharp.com/forum/331/Spasti-skal-piera-ili-tiestirovaniie-na-Full-Orders-Log/ - хотя тут все, насколько я понимаю,прекрасно работает. В примерах ничего толком не нашел по этому поводу. Заранее благодарен за помощь.