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


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

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

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

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

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



Спасибо:


< 1 2 3 4  > >>
Garic

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


Mikhail Sukhov Перейти

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


1. Ок. Мне кажется правильней чтобы информация об автогенерировании можно было задавать не только для отдельного инструмента, но и по маске. Чтобы не пришлось к примеру для RI* загруженного с РТС для каждого нового фьюча настраивать.

3. А оно реализовано?
Код

var candleStorage = Storage.GetCandleStorage<TimeFrameCandle, TimeSpan>(Security, ((DateTime)TimeFrame.DateTime).TimeOfDay);

Отсутствует реализация метода "#=qSgY$r90pFrF28LZPd8I1Iw==" в типе "#=qnoDh2NhJ_K7BrlaDnrVfD_$X6y8Kk1BuDAeot1QM$W9GwXexSSUV2IyqmZwEiQZl" из сборки "StockSharp.Algo, Version=3.2.9.0, Culture=neutral, PublicKeyToken=null".

   в StockSharp.Algo.Storages.TradingStorage.#=qjjCXVa_GkSf19tV164IPg7UEmibZUkgx4WuqhCpwOD0=.#=qy88HEUV8WIEWMypubtR3OoXNjHr1RNtBjcQh1UzlfU0=(Triple`3 #=qycS3I_WdKlNBnvNjehlFBQ==)



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

Mikhail Sukhov

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


Garic Перейти

3. А оно реализовано?


Что-то не то с паблишингом... Можете пока ГУИ часть и код схематично написать?
Спасибо:

Garic

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


Mikhail Sukhov Перейти

Что-то не то с паблишингом... Можете пока ГУИ часть и код схематично написать?


Ок, завтра-послезавтра постараюсь написать.
Спасибо:

Garic

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


Mikhail Sukhov;99431.
Да, наверное так. Есть такой класс VisualSecurity, куда можно будет засунуть такой признак и информацию об авто генерировании (я думаю это должна быть отдельная таблица в БД). Но это если делать автоматику. Я думаю ее можно прикрутить потом.


Просто окно с генерацией свечей я сделал.
А вот с автогенерацией моих познаний в C# не хватает - работа с БД вроде более-менее понятна.
А что делать с CandleToken.Args не знаю - как его хранить (строкой?), он должен в PK входить.

Добавь меня на codeplex, ник Garic.
Спасибо:

Mikhail Sukhov

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


Garic Перейти
Mikhail Sukhov;99431.
Да, наверное так. Есть такой класс VisualSecurity, куда можно будет засунуть такой признак и информацию об авто генерировании (я думаю это должна быть отдельная таблица в БД). Но это если делать автоматику. Я думаю ее можно прикрутить потом.


Просто окно с генерацией свечей я сделал.
А вот с автогенерацией моих познаний в C# не хватает - работа с БД вроде более-менее понятна.
А что делать с CandleToken.Args не знаю - как его хранить (строкой?), он должен в PK входить.

Добавь меня на codeplex, ник Garic.


Добавил, но Гидры пока нет на codeplex. Лучше пока куда нибудь залить в другое место.

Ни с какой БД работа в Гидре в плане тиков и свечек не идет. Все выполняется на уровне Storage API. Примерный код написан в файле CandlesWindow.xaml.cs. Его нужно лишь переделать, чтобы сделки за каждый день подгружались и сжимались в свечки.
Спасибо:

Garic

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


Mikhail Sukhov Перейти

Добавил, но Гидры пока нет на codeplex. Лучше пока куда нибудь залить в другое место.

Ни с какой БД работа в Гидре в плане тиков и свечек не идет. Все выполняется на уровне Storage API. Примерный код написан в файле CandlesWindow.xaml.cs. Его нужно лишь переделать, чтобы сделки за каждый день подгружались и сжимались в свечки.


Я это понял и сделал - аттач.

Работа с БД - сохранение настроек - для каких инструментов делать автогенерацию свечей.
Пример есть в Hydra.Core.MarketDataSourceSettings - с этим вроде всё понятно.

Будет новая таблица: SecurityId, CandleType, Args. Вот непонятно - как хранить CandleToke.Args. Он должен входить в PrimaryKey.
Hydra.rar 479 KB (247)
Спасибо:

Yura

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


Добрый день.
Такой вопрос. Мне нужно в режиме реал тайм сохранять сделки. Допустим нужно сохранить 100 сделок по некому инструменту и как только эти 100 сделок сохраняться, применять к ним анализ и сразу же выставлять заявки. Но сохранение данных не прекращать. Все это в режиме реалтайм.Как бы вы посоветовали мне такое осуществить. Может есть примеры которые помогут мне в этом.
Спасибо:

Alexander

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


Yura Перейти
Добрый день.
Такой вопрос. Мне нужно в режиме реал тайм сохранять сделки. Допустим нужно сохранить 100 сделок по некому инструменту и как только эти 100 сделок сохраняться, применять к ним анализ и сразу же выставлять заявки. Но сохранение данных не прекращать. Все это в режиме реалтайм.Как бы вы посоветовали мне такое осуществить. Может есть примеры которые помогут мне в этом.


Создать событие, которое будет подниматься как 100 сделок сохранены и передавать именно эти 100 сделок.
Спасибо: Yura

Yura

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


Доброго времени суток. Такой вопрос, как мне сделать тестирование по нескольким инструментам сразу используя SampleSMA
Спасибо:

Alexander

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


Yura Перейти
Доброго времени суток. Такой вопрос, как мне сделать тестирование по нескольким инструментам сразу используя SampleSMA


Использовать BasketSecurity или создать несколько стратегий - по каждой на инструмент
Спасибо:
< 1 2 3 4  > >>

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

loading
clippy