Перфоманс тестинга на истории
На этих выходных пофиксил найденные баги в бэктестере. Заодно провел некоторое расследование о причинах медленного тестированию. Раньше самой тормозной частью была загрузка данных. Она была успешно залечена через параллельную подгрузку данных потоками, и теперь стал тормозить поток, который распараллелить невозможно - поток исполнения стратегий.
Я проверял производительность на примере SampleHistoryTesting. Тесты показали (мерил через dotTrace), что основной тормоз - это генерация свечек (
48% уходит на CandleManager). Ускорить алго практически невозможно, так как он ускорялся и не раз. Но есть решение - использовать уже готовые свечки. В Гидре начиная с 3.2 версии появилась возможность
сжатия свечек. Схема работы для бэктестера не очень удобная, так как за раз не получится загрузить и сжать все свечки (банально не хватит памяти). Поэтому я предлагаю всем заинтересованным пользователям откликнуться на это предложение и помочь в решении проблемы.
Исходники Гидры доступны каждому, они есть в дистрибутиве. Мое предложение такое. Необходимо сделать в Гидре (авто?) компрессор сделок по большому диапазону в отдельном окне. Тоесть, для такого компрессора не нужно будет выбирать и загружать сделки, а достаточно указать дни, с какого по какой нужно сжать сделки в свечки, и дальше он начнет их сжатие, загружая день за днем.
Если откликнутся желающие (а я надеюсь что такие найдутся), то со стороны S# мы сделаем авто загрузку свечек из истории через класс CandleManager. Как итог, ускорим бэктестинг стратегий, которые требуют свечки, причем существенное ускорение.
Других методов пока не придумал, если они вообще существуют. К сожалению, обратная сторона медали точного тестирования - это его производительность.