Как устроено тестирование стратегии?
Atom Ответить
12.01.2013


Подскажите пожалуйста такой момент:

Предположим, я хочу протестировать какую-то стратегию на исторических данных. Создаю эмулятор трейдер, подсасываюсь к сохраненной истории. Запускаю эмулятор трейдер. Если просто его запустить - он пробежится от старт тайма до стоп тайма, отреагировав на все подписанные события (сделки, заявки итп итд) ну и остановится. А теперь, я дополнительно создам стратегию (пусть даже пустую), и в настройках стратегии скажу ей - используй этот же эмулятор трейдер. Запускаю стратегию. Что в этот момент технически происходит? В дополнительном потоке заново запускается эмулятор трейдер от времени старта до стопа, но теперь исполняя стратегию? То есть вопрос больше вот в чем - эмулятор запустить все равно нужно, но важно ли когда я запускаю стратегию? Не получится ли так, что я запускаю стратегию почти одновременно с эмулятором, но чуть позже и она не с старт тайма начинает работать, а с того времени, которое было в эмуляторе на момент запуска стратегии?


И еще один вопрос. При тестировании на исторических данных тестер всегда тестирует на стаканах? То есть если я имею из истории - только трейды - он из них постарается сделать стаканы и на них тестировать? Ведь как тестировать на трейдах - непонятно. А если есть ордерлог и трейды - чтобы тестер тестил на стаканах, построенных на ордерлоге, я должен это дополнительно указать - в противном случае он будет стараться строить стаканы по трейдам, так? То есть интересует - как устроены умолчания. Что по умолчанию берется для тестинга - какой тип сохраненной истории.

Заранее спасибо за ответ.



Спасибо:




3 Ответов
esper

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


FlashPlayer Перейти
А теперь, я дополнительно создам стратегию (пусть даже пустую), и в настройках стратегии скажу ей - используй этот же эмулятор трейдер. Запускаю стратегию. Что в этот момент технически происходит? В дополнительном потоке заново запускается эмулятор трейдер от времени старта до стопа, но теперь исполняя стратегию?

Нет, эмулятор заново не запускается. Запустится только стратегия и, если эмулятор еще работает, стратегия начнет получать данные с текущего времени в эмуляторе.
FlashPlayer Перейти
То есть вопрос больше вот в чем - эмулятор запустить все равно нужно, но важно ли когда я запускаю стратегию? Не получится ли так, что я запускаю стратегию почти одновременно с эмулятором, но чуть позже и она не с старт тайма начинает работать, а с того времени, которое было в эмуляторе на момент запуска стратегии?

Да, есть разница в том, когда запускать стратегию. Сам запуск стратегии лучше делать либо перед запуском эмулятора, либо у эмулятора есть событие изменения состояния и необходимо запускать стратегии когда он становится Started.
FlashPlayer Перейти
И еще один вопрос. При тестировании на исторических данных тестер всегда тестирует на стаканах? То есть если я имею из истории - только трейды - он из них постарается сделать стаканы и на них тестировать? Ведь как тестировать на трейдах - непонятно. А если есть ордерлог и трейды - чтобы тестер тестил на стаканах, построенных на ордерлоге, я должен это дополнительно указать - в противном случае он будет стараться строить стаканы по трейдам, так? То есть интересует - как устроены умолчания. Что по умолчанию берется для тестинга - какой тип сохраненной истории.

Эмулятор использует все доступные данные, причем набор доступных данных определяется для каждого дня истории. Если нет записанных стаканов и необходимо генерировать их по сделкам, то необходимо зарегистрировать TrendMarketDepthGenerator для инструмента и указать UseMarketDepths, если есть записанные стаканы, то просто указать UseMarketDepths. Если для инструмента есть ордерлог, то трейды и стаканы автоматически не используются.
Спасибо: VassilSanych

FlashPlayer

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


Эспер, спасибо. То есть получается, что тестеру все таки необходимы стаканы. И иеархия выходит такая: сделки --> стаканы --> ордерлог.

Есть тогда еще несколько вопросов:
1. Вот есть у меня только сделки. Если я не пропишу дополнительно о необходимости генерирования стакана по ним - стратегия никаких данных не получит?
2. Есть у меня только стаканы. Они имеют периодичность (ну раз в минуту предположим). Что будет, если я эту периодичность отдельно не озвучу. Ее вообще по идее озвучивать не надо?
3. Если есть ордерлог - автоматом используется он? Никаких доп настроек не надо? Просто видел какую то настройку в примере, при создании тестера, UseMarketDepth вроде. Коммент там стоит - если нужна более точная прогонка по стакану, включите эту настройку. Она меня смутила - что именно она включает?
4. Если я хочу запустить стратегию не в начале работы тестера, а скажем в определенное время в истории, я должен подписаться на событие обновления времени в тестере - и проверять, когда оно стало таким, каким мне надо - запустить страту?
5. Очень важный вопрос. Как в тестере реализовано понимание, что прошла моя сделка? В целом, я осознаю, что есть только один единственный способ - если у нас стояла заявка на уровне цены, и лучшие котировки полностью стали выше(или ушли полностью ниже) этого уровеня цены, то вот тогда только считается, что наша заявка исполнена. При таком алгоритме - какой бы ни был объем нашей заявки, он исполняется сразу и весь. Частичного исполнения не бывает. Правильно ли я понимаю, что именно такой алгоритм используется в S#?

Спасибо.
Автор топика
Спасибо:

esper

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


FlashPlayer Перейти
Эспер, спасибо. То есть получается, что тестеру все таки необходимы стаканы. И иеархия выходит такая: сделки --> стаканы --> ордерлог.

Не обязательно, тестер может производить эмуляцию и по сделкам. Стаканы могут быть, а могут и эмулироваться по сделкам. Если есть ордерлог, то тогда и сделки и стаканы будут строиться по нему, причем это будут реальные данные.
FlashPlayer Перейти
Есть тогда еще несколько вопросов:
1. Вот есть у меня только сделки. Если я не пропишу дополнительно о необходимости генерирования стакана по ним - стратегия никаких данных не получит?
2. Есть у меня только стаканы. Они имеют периодичность (ну раз в минуту предположим). Что будет, если я эту периодичность отдельно не озвучу. Ее вообще по идее озвучивать не надо?
3. Если есть ордерлог - автоматом используется он? Никаких доп настроек не надо? Просто видел какую то настройку в примере, при создании тестера, UseMarketDepth вроде. Коммент там стоит - если нужна более точная прогонка по стакану, включите эту настройку. Она меня смутила - что именно она включает?
4. Если я хочу запустить стратегию не в начале работы тестера, а скажем в определенное время в истории, я должен подписаться на событие обновления времени в тестере - и проверять, когда оно стало таким, каким мне надо - запустить страту?
5. Очень важный вопрос. Как в тестере реализовано понимание, что прошла моя сделка? В целом, я осознаю, что есть только один единственный способ - если у нас стояла заявка на уровне цены, и лучшие котировки полностью стали выше(или ушли полностью ниже) этого уровеня цены, то вот тогда только считается, что наша заявка исполнена. При таком алгоритме - какой бы ни был объем нашей заявки, он исполняется сразу и весь. Частичного исполнения не бывает. Правильно ли я понимаю, что именно такой алгоритм используется в S#?

1. Нет, не получит.
2. Данные просто читаются с той переодичностью, с которой они есть.
3. Нет, для использования ордерлога надо выставить UseOrderLog, для использования стаканов UseMarketDepth. Но, если используется ордерлог, то стаканы и сделки автоматически не используются.
4. Да.
5. То как заявка будет исполнена зависит от многих факторов, таких как тип заявки, настройки эмулятора. Например, если кидается заявка по рынку, то он может собрать несколько строк в стакане и будет несколько сделок.

Данный вопрос, впрочем как и весь топик, стоило разместить в разделе Тестирование.
Спасибо:


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

loading
clippy