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


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

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

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

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

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



Спасибо:


<< < 3 4 5 6 7  >
Mikhail Sukhov

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


bender
Удаление в принципе нужно было для того, чтобы если пользователь формирует свечки по второму разу в тот-же каталог с налогающимся интервалом дат, то наложение надо удалить, иначе при записи дописываемые свечки дублируются, а не затирают старые( во всяком случае в 3.2 так было, как сейчас не могу пока посмотреть).


http://stocksharp.com/do...age_1_AppendOnlyNew.htm

Зачем удалять? Пользователь может генерировать свечки с разными параметрами. Может они все нужны ему?
Спасибо: bender

bender

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



О, спасибо, в 3.2.5 такого свойства ещё не было, поэтому удалял. Попробую его задействовать.
Цитата:

Зачем удалять? Пользователь может генерировать свечки с разными параметрами. Может они все нужны ему?

Я про свечки с одинаковыми параметрами писал, конечно. Свечки одинакового типа, но с отличными параметрами не удалялись.
Спасибо:

bender

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


Не знаю, баг или последствия рефакоринга, но в последней версии вот такое работать перестало:
Код
var candleManager = new CandleManager(_trades) { IsSyncRegister = true };                  
var candles = candleManager.GetCandles(token).OrderBy((cnd) => cnd.Time);     

По докам вроде должно работать как и раньше
Спасибо:

Mikhail Sukhov

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


bender
Не знаю, баг или последствия рефакоринга, но в последней версии вот такое работать перестало:
Код
var candleManager = new CandleManager(_trades) { IsSyncRegister = true };                  
var candles = candleManager.GetCandles(token).OrderBy((cnd) => cnd.Time);     

По докам вроде должно работать как и раньше


Какая ошибка?
Спасибо:

bender

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


Mikhail Sukhov
[quote=bender;12336]
Какая ошибка?


Нету у CandleManager конструктора с параметром IEnumerable<Trade>, а методов GetCandles нету вообще.
Спасибо:

bender

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


Mikhail Sukhov
bender
Удаление в принципе нужно было для того, чтобы если пользователь формирует свечки по второму разу в тот-же каталог с налогающимся интервалом дат, то наложение надо удалить, иначе при записи дописываемые свечки дублируются, а не затирают старые( во всяком случае в 3.2 так было, как сейчас не могу пока посмотреть).


http://stocksharp.com/do...age_1_AppendOnlyNew.htm



C помощью IMarketDataStorage(T).AppendOnlyNew тоже не получается. Если сохраняется недоформированная свеча, то при последующем дописывании она не заменяется на полностью сформированную, а остаётся как есть.
Спасибо:

Mikhail Sukhov

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


bender
Mikhail Sukhov
[quote=bender;12336]
Какая ошибка?


Нету у CandleManager конструктора с параметром IEnumerable<Trade>, а методов GetCandles нету вообще.


Видимо не последняя версия загружена с TFS.
Спасибо:

bender

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


Mikhail Sukhov

Видимо не последняя версия загружена с TFS.

Вроде последняя, вот тут http://stocksharp.codepl...changeset/changes/10521 и дифф есть в CandleWindow. Сделал также, а по старому не работает.
Спасибо:

Mikhail Sukhov

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


bender
Mikhail Sukhov

Видимо не последняя версия загружена с TFS.

Вроде последняя, вот тут http://stocksharp.codepl...changeset/changes/10521 и дифф есть в CandleWindow. Сделал также, а по старому не работает.


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

bender

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


Mikhail Sukhov

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

Мы, кажется, друг друга не понимаем.)))
У меня последняя версия, код, который я привёл, в ней действительно не существует. Но я про то, что этот код в последней версии не работает, хотя судя по докам http://stocksharp.com/doc/ должен работать, отсюда и возник этот вопрос. А где нибудь можно почитать про новый CandleManager?
Спасибо:
<< < 3 4 5 6 7  >

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

loading
clippy