Backtesting: нестабильные результаты
Atom
10.03.2014


Провел эксперимент:

1. Создал 10 идентичных копий стратегии
2. Запустил их параллельно

Генерация стаканов отключена, тестирование исключительно на тиковых данных

Результат: у всех стратегий разный PnL...

Задача провести оптимизацию стратегии, но если 10 идентичных копий дают разный результат (== 10 одинаковых входов дают 10 различных выходов), то ни о какой оптимизации речи быть не может....

Вопрос, что надо изменить в настройках?

Теги:


Спасибо:


devruss

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


Итак, результаты тестов на тиковых данных за 2 месяца:

1. Тест 1 стратегии занимает 27 минут, десяти - 1ч49мин (в 4 раза больше времени за 10 стратегий)
2. # trades: 299 - 301. 2 потерянных трейда (4 сделки) не так страшно, но вопрос почему это происходит
3. PnL гуляет на 7% (-7%,0) - это уже намного хуже

Короче, либо я что-то не так делаю, либо в S# вскрылась большая проблема.
Спасибо:

esper

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


Все стратегии запускаются на одном эмуляторе или каждая на отдельном?
Спасибо:

devruss

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


esper Перейти
Все стратегии запускаются на одном эмуляторе или каждая на отдельном?

все на одном.

Процесс оптимизационного бэктестинга нигде не задокументирован, так что приходится делать методом тыка.

- Надо на нескольких коннекторах типа StorageRegistry?
- Если все равно одни и те же данные, их можно как-нибудь запихнуть в память целиком, чтобы не считывать с диска каждый раз для каждой стратегии?
Спасибо:

esper

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


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

devruss

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


esper Перейти
Если у вас один HistoryEmulationConnector, то все стратегии торгуют между собой и нет ничего странного в том, что их результаты отличаются.


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

- Возможно, мой подход неверен именно с точки зрения реализации S#, тогда скажите как правильно делать.
- Возможно ли кэшировать данные в памяти, чтобы 10 коннекторов считывали данные не с диска, а из памяти? Ну либо еще как-нибудь оптимизировать процесс бэктестинга?
Спасибо:


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

loading
clippy