Перфоманс тестинга на истории

Перфоманс тестинга на истории
Atom
8/22/2011
Mikhail Sukhov


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

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

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

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

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



Thanks:


<< < 2 3 4 5 6  > >>
bender

Avatar
Date: 10/11/2011
Reply


Mikhail Sukhov

Чтобы не быть помощником, для которого требуются еще другие помощники, предлагаю зарегистрироваться на КодеПлексе и залить туда свои изменения. Логин предварительно скажите, чтобы я смог присоединить вас к проекту.


Зарегился, YuraS


Quote:

Выкидывает исключение? Какое?

Code
	
candleStorage = storage.GetCandleStorage<TimeFrameCandle, TimeSpan>(security, args.To<TimeSpan>()) as IMarketDataStorage<Candle>;

получается, candleStorage == null
Thanks:

Mikhail Sukhov

Avatar
Date: 10/12/2011
Reply


bender

Code
	
candleStorage = storage.GetCandleStorage<TimeFrameCandle, TimeSpan>(security, args.To<TimeSpan>()) as IMarketDataStorage<Candle>;

получается, candleStorage == null[/quote]

Code
	
candleStorage = (IMarketDataStorage<TimeFrameCandle>)storage.GetCandleStorage<TimeFrameCandle, TimeSpan>(security, args.To<TimeSpan>());
Thanks:

bender

Avatar
Date: 10/12/2011
Reply


Mikhail Sukhov

Code
	
candleStorage = (IMarketDataStorage<TimeFrameCandle>)storage.GetCandleStorage<TimeFrameCandle, TimeSpan>(security, args.To<TimeSpan>());

У себя я так и сделал, просто я изначально про код по ссылке спрашивал,там кое-что сделано проще, чем у меня, но работать как-бэ не должно, во всяком случае в 3.2.5 не работает.

По КодеПлексу, я правильно понимаю, что мне надо скачать последний Change Set, внести свои изменения и залить обратно? Или можно залить своё рабочее решение (оно из версии 3.2.5 переделано)?
Thanks:

Mikhail Sukhov

Avatar
Date: 10/12/2011
Reply


bender
По КодеПлексу, я правильно понимаю, что мне надо скачать последний Change Set, внести свои изменения и залить обратно? Или можно залить своё рабочее решение (оно из версии 3.2.5 переделано)?


1. Слить последнюю версию.
2. Помержить с изменениями.
3. Потестить, что не отвалилось все остальное.[laugh]
4. Залить.

Вот такой нехитрый алгоритм.
Thanks:

bender

Avatar
Date: 10/12/2011
Reply


Code
IMarketDataStorage<TimeFrameCandle> candleStorage = storage.GetCandleStorage<TimeFrameCandle, TimeSpan>(input.Security, TimeSpan.FromMinutes(5));  

Вот такая строчка кода в последней версии выкидывает исключение
Quote:
Отсутствует реализация метода "#=qZ54LkJX570V5vx1sz4z4Tg==" в типе "#=qZjnrk7nYv$HS6IuGzdGTyaz$pXGh_bkX5gnJpwhBozFKPUIkagMVdRegQjQZqC2r" из сборки "StockSharp.Algo, Version=4.0.2.0, Culture=neutral, PublicKeyToken=null".

В 3.2.5 нормально работало
Thanks:

Mikhail Sukhov

Avatar
Date: 10/12/2011
Reply


bender
Code
IMarketDataStorage<TimeFrameCandle> candleStorage = storage.GetCandleStorage<TimeFrameCandle, TimeSpan>(input.Security, TimeSpan.FromMinutes(5));  

Вот такая строчка кода в последней версии выкидывает исключение
Quote:
Отсутствует реализация метода "#=qZ54LkJX570V5vx1sz4z4Tg==" в типе "#=qZjnrk7nYv$HS6IuGzdGTyaz$pXGh_bkX5gnJpwhBozFKPUIkagMVdRegQjQZqC2r" из сборки "StockSharp.Algo, Version=4.0.2.0, Culture=neutral, PublicKeyToken=null".

В 3.2.5 нормально работало


Что-то обфускация сглючила. Поправил новой версией.
Thanks:

Alexander

Avatar
Date: 10/13/2011
Reply


bender
Code
IMarketDataStorage<TimeFrameCandle> candleStorage = storage.GetCandleStorage<TimeFrameCandle, TimeSpan>(input.Security, TimeSpan.FromMinutes(5));  

Вот такая строчка кода в последней версии выкидывает исключение
Quote:
Отсутствует реализация метода "#=qZ54LkJX570V5vx1sz4z4Tg==" в типе "#=qZjnrk7nYv$HS6IuGzdGTyaz$pXGh_bkX5gnJpwhBozFKPUIkagMVdRegQjQZqC2r" из сборки "StockSharp.Algo, Version=4.0.2.0, Culture=neutral, PublicKeyToken=null".

В 3.2.5 нормально работало


Свежая версия с codeplex помогла (changeset 10471)?
Thanks:

bender

Avatar
Date: 10/13/2011
Reply


Alexander Mukhanchikov

Свежая версия с codeplex помогла (changeset 10471)?

Да, спасибо. Но теперь другая проблема вылезла, метод IMarketDataStorage(T).Delete (DateTime, DateTime) в 3.2.5 удалял только файлы свечек S# заданного типа, а сейчас (10484) удаляет каталоги за соответствующие числа целиком, со всем что в них есть. Нельзя-ли вернуть так, как было раньше?
Thanks:

Mikhail Sukhov

Avatar
Date: 10/14/2011
Reply


bender
Alexander Mukhanchikov

Свежая версия с codeplex помогла (changeset 10471)?

Да, спасибо. Но теперь другая проблема вылезла, метод IMarketDataStorage(T).Delete (DateTime, DateTime) в 3.2.5 удалял только файлы свечек S# заданного типа, а сейчас (10484) удаляет каталоги за соответствующие числа целиком, со всем что в них есть. Нельзя-ли вернуть так, как было раньше?


Вот это будет проблема. Из-за рефакторинга в 3.2 не был учтен это момент. Если сейчас попытаться вернуть все в зад, то может поехать другое - определение дат, для которых есть данные. Насколько критична ошибка? Может стоит сохранять данные в разных папках?
Thanks:

bender

Avatar
Date: 10/14/2011
Reply


Mikhail Sukhov
[quote=bender;12276]
Вот это будет проблема. Из-за рефакторинга в 3.2 не был учтен это момент. Если сейчас попытаться вернуть все в зад, то может поехать другое - определение дат, для которых есть данные. Насколько критична ошибка? Может стоит сохранять данные в разных папках?


Удаление в принципе нужно было для того, чтобы если пользователь формирует свечки по второму разу в тот-же каталог с налогающимся интервалом дат, то наложение надо удалить, иначе при записи дописываемые свечки дублируются, а не затирают старые( во всяком случае в 3.2 так было, как сейчас не могу пока посмотреть). В разные каталоги можно, но сейчас у меня сделано так, что отслеживание этого будет целиком лежать на пользователе.
Хотя можно конечно каждый тип свечек сохранять в свой подкаталог, если в зад вернуть нельзя, попробую так сделать.
Thanks:
<< < 2 3 4 5 6  > >>

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy