Перфоманс тестинга на истории
Atom
22.08.2011
Mikhail Sukhov


На этих выходных пофиксил найденные баги в бэктестере. Заодно провел некоторое расследование о причинах медленного тестированию. Раньше самой тормозной частью была загрузка данных. Она была успешно залечена через параллельную подгрузку данных потоками, и теперь стал тормозить поток, который распараллелить невозможно - поток исполнения стратегий.

Я проверял производительность на примере SampleHistoryTesting. Тесты показали (мерил через dotTrace), что основной тормоз - это генерация свечек (48% уходит на CandleManager). Ускорить алго практически невозможно, так как он ускорялся и не раз. Но есть решение - использовать уже готовые свечки. В Гидре начиная с 3.2 версии появилась возможность сжатия свечек. Схема работы для бэктестера не очень удобная, так как за раз не получится загрузить и сжать все свечки (банально не хватит памяти). Поэтому я предлагаю всем заинтересованным пользователям откликнуться на это предложение и помочь в решении проблемы.

Исходники Гидры доступны каждому, они есть в дистрибутиве. Мое предложение такое. Необходимо сделать в Гидре (авто?) компрессор сделок по большому диапазону в отдельном окне. Тоесть, для такого компрессора не нужно будет выбирать и загружать сделки, а достаточно указать дни, с какого по какой нужно сжать сделки в свечки, и дальше он начнет их сжатие, загружая день за днем.

Если откликнутся желающие (а я надеюсь что такие найдутся), то со стороны S# мы сделаем авто загрузку свечек из истории через класс CandleManager. Как итог, ускорим бэктестинг стратегий, которые требуют свечки, причем существенное ускорение.

Других методов пока не придумал, если они вообще существуют. К сожалению, обратная сторона медали точного тестирования - это его производительность.



Спасибо:


1 2 3  > >>
Garic

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


Что подразумевается под компрессией - схлопывание сделок прошедших по одной цене?

Мне кажется что можно было бы сделать такие варианты тестирования:

1.) Грубое тестирование - тест по заранее расчитанным и сохранённым свечам. Тут надо скармливать candleManager-у готовые свечи.

2.) Более детальное. По идее для свечных стратегий открытие позиции должно происходить по клоузу свечи. Тогда чтобы можно было прикинуть проскальзывание - будут интересны сделки только первых нескольких секунд новой свечи (сколько - это уже зависит от типа котирования используемого в стратегии).
Т.е. надо сделать в Гидре компрессию сделок, например для 5-минуток:
-реальные сделки первых нескольких секунд свечки (либо некоторое количество сделок, либо грузим сделки пока не проторгуется заданный объём - задаётся в параметрах - это зависит от типов свечей)
-компрессия - цена закрытия 5минутки, весь оставшийся объём - одной сделкой.

3.) Детальное тестирование - как щас.
Спасибо:

Mikhail Sukhov

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


Garic
Что подразумевается под компрессией - схлопывание сделок прошедших по одной цене?

Мне кажется что можно было бы сделать такие варианты тестирования:

1.) Грубое тестирование - тест по заранее расчитанным и сохранённым свечам. Тут надо скармливать candleManager-у готовые свечи.


а. В том то и дело, что эти свечки нужно получить откуда-то. Для этого есть Гидра. Но она пока не умеет их делать массово. Нужно ее обучить.
б. На точность тестирование готовые свечки никак влиять не будут. Готовые свечки лишь оптимизируют работу CandleManager.
Спасибо:

President

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


в качестве идеи - подгрузка свечек с финама - правда там периодичность жестка задана, зато уже все посчитано по всем инструментам.
Спасибо:

Mikhail Sukhov

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


President
в качестве идеи - подгрузка свечек с финама - правда там периодичность жестка задана, зато уже все посчитано по всем инструментам.


Уже второе ответ не отвечает на вопрос. Тренд?

Подгрузку свечек делать не нужно. Все есть в тиках. Нужно лишь нарезать из. Брать финамоские свечки плохо по ряду причин:

1. Они не отличаются качеством.
2. Они только жесткий ТФ (и только ТФ).
3. Нужно делать качалку свечек.
4. Нужно делать их десериализатор.

Тоесть, к перечисленным делам в моем первом сообщении добавляются еще 2 задачи. Может все таки решить проблему наименьшими усилиями раз такой лес рук?
Спасибо:

Garic

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


Mikhail Sukhov

а. В том то и дело, что эти свечки нужно получить откуда-то. Для этого есть Гидра. Но она пока не умеет их делать массово. Нужно ее обучить.
б. На точность тестирование готовые свечки никак влиять не будут. Готовые свечки лишь оптимизируют работу CandleManager.


А, ну тогда всё проще.

Т.е. нужно сделать:
1.) Настройку в Гидре - где будет указываться какие свечи и для каких (или для всех) инструментов генерировать (сразу при загрузке данных).
2.) Кнопарь по которому можно указать тип свечей, период - и они сгенерятся
3.) Как лучше хранить свечи? Папка для каждого типа свечей - подпапка код тикера - отдельный файл на каждый день. Так?

Могу взяться, но скоро сваливаю в отпуск - может не хватить времени.
Спасибо:

Mikhail Sukhov

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


Garic
Mikhail Sukhov

а. В том то и дело, что эти свечки нужно получить откуда-то. Для этого есть Гидра. Но она пока не умеет их делать массово. Нужно ее обучить.
б. На точность тестирование готовые свечки никак влиять не будут. Готовые свечки лишь оптимизируют работу CandleManager.


А, ну тогда всё проще.

Т.е. нужно сделать:
1.) Настройку в Гидре - где будет указываться какие свечи и для каких (или для всех) инструментов генерировать (сразу при загрузке данных).
2.) Кнопарь по которому можно указать тип свечей, период - и они сгенерятся
3.) Как лучше хранить свечи? Папка для каждого типа свечей - подпапка код тикера - отдельный файл на каждый день. Так?

Могу взяться, но скоро сваливаю в отпуск - может не хватить времени.


1. Да, наверное так. Есть такой класс VisualSecurity, куда можно будет засунуть такой признак и информацию об авто генерировании (я думаю это должна быть отдельная таблица в БД). Но это если делать автоматику. Я думаю ее можно прикрутить потом.
2. Да, фактически уже есть такое окно.
3. Со стороны Storage API уже есть готовое. TradingStorage.GetCandleStorage().
Спасибо:

Mikhail Sukhov

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


Предлагаю решиться быстрее, потому что вопрос стоит в том, войдет такое решение в 3.2 или не войдет. Следующая версия пока не планируется. Желающий должен точно высказаться в этом топике, что берет это на себя, и когда ждать от него решение.
Спасибо:

anothar2

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


Мне кажется или свечки можно взять за гораздо больший период чем тики, а следовательно далекие годы можно тестировать только на свечах?
Логичнее было бы строить( или качать) свечи только один раз и пихать их в бд, благо жесткий диск большой, а вот частота проца ограничена.
Кроме того многие стратегии работают только на свечах и тики им совсем не нужны.
По поводу грубого тестирования-у метатрейдера есть функция комбинированного тестирования: когда вы берете сначала все тики, когда тиков не осталось свечи меньшего диапазона, когда они закончились большего и так далее и таким методом можете тестировать за долгий период. Безусловно получается неравномерная точность тестирования, но хотя бы так.
Спасибо:

Mikhail Sukhov

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


anothar
Мне кажется или свечки можно взять за гораздо больший период чем тики, а следовательно далекие годы можно тестировать только на свечах?
Логичнее было бы строить( или качать) свечи только один раз и пихать их в бд, благо жесткий диск большой, а вот частота проца ограничена.
Кроме того многие стратегии работают только на свечах и тики им совсем не нужны.


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

anothar
По поводу грубого тестирования-у метатрейдера есть функция комбинированного тестирования: когда вы берете сначала все тики, когда тиков не осталось свечи меньшего диапазона, когда они закончились большего и так далее и таким методом можете тестировать за долгий период. Безусловно получается неравномерная точность тестирования, но хотя бы так.


Это отдельная тема, к ней когда нибудь вернемся. В данный момент есть место для хорошей оптимизации. Жаль рук нет.

Ок, ждем тогда до среды. Если до среды никто не объявится, значит всех скорость устраивает. Меня то она и так устраивала всегда, так как я тех анализом не пользуюсь. Не понятны тогда жалобы некоторых пользователей. Обманывали меня, получается, что медленно тестирование идет.[cool]
Спасибо:

pyhta4og

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


Mikhail Sukhov
Предлагаю решиться быстрее, потому что вопрос стоит в том, войдет такое решение в 3.2 или не войдет. Следующая версия пока не планируется. Желающий должен точно высказаться в этом топике, что берет это на себя, и когда ждать от него решение.


А чо, 3.3 не будет? Практически 33 -возраст Х.

хранение свечек я начинал делать, лежит где-то в ТФСе старом. Надо в директории с тиками и стаканами исчо candles.bin заделать. И все пропустить через общий алго сжатия. Короче, куча гемороя и в итоге ничего кроме подогнанного графека.


I will sell RTS VX on 50. Come with me!
Спасибо:
1 2 3  > >>

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

loading
clippy