Блог им. DenisVo

Простой фреймворк для тестирования портфельных стратегий (python)

Всем добрый вечер,

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

Итак выглядит это все следующим образом:

Простой фреймворк для тестирования портфельных стратегий (python)

Как основа это Backtrader (хороший питоновский движок для тестирования торговли, но в целом очень медленный при загрузке данных, да и есть там некоторые вещи в которых мне лениво разбираться).
Далее реализуем простенькую стратегию которая будет крутиться в бэктрейдере, но ее структура такова, что можно любые спецефические действия делать в привычной для каждого человека форме. Я там использую pandas dataframe.

Структура стратегии:

Простой фреймворк для тестирования портфельных стратегий (python)

На картике нчего не видно но суть такова, у нас есть несколько моделей которые выполняют различные действия.

Модель выбора рабочего набора активов -> модель которая реализует непосредственно генерацию сигналов -> модель для формирования весов активов в портфеле -> модель которая отвечает за ребалансировку -> модель которая контролирует риск -> и модель которая исполняет заявки. 

Вот пример простой стратегии моментум которая выбирает n бумаг с наибольшим моментумом за последний год
Простой фреймворк для тестирования портфельных стратегий (python)


Далее мы просто добавляем это дело в конфигурацию

Простой фреймворк для тестирования портфельных стратегий (python)

Запускаем и получаем вот такой красивый отчетик с кучей метрик сгенерированный quantstats

Простой фреймворк для тестирования портфельных стратегий (python)


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

Кому интересно, прошу посмотреть видео :)… а то надо часы просмотров нарабатывать.. 




ну и код
github.com/CloseToAlgoTrading/CodeFromVideo/tree/master/Portfolio_Testing_Framework


★11
3 комментария
Интересно, сколько времени потратит Питон на ввод котировок и раскладку их в памяти по массивам DateTime, Open, High, Low, Close, Volume из файла ROSN.txt, предложенного в статье vldtar «Глубокое погружение» smart-lab.ru/blog/809806.php. В статье есть ссылка на скачивание сопроводительных  материалов. Её автор для проверки своей торговой стратегии использовал историю на минутках из 1628478 свечей-баров за 13 лет.
Моя программа на Microsoft C++ 2015 вводит и раскладывает по массивам памяти эти котировки за 3.5 сек. Intel® Core(TM) i5-3570K CPU @ 3.40 GHz 3392 Мгц. Память 8 Гб.
Опыты с C# и Java дают время в десятки раз большее.
Что получится у Питона?

PS Если производительность тестирования не критична, то на мой взгляд всего предпочтительнее фрэймворк программы WealthLab. Версии 5.2 и 6.4 бесплатны в интернете.
Воспроизведение этого фрэймворка на C++ позволяет сверхскоростной прогон торговой стратегии с разными наборами параметров за счёт распараллеливания по всем ядрам процессора ПК.
Rostislav Kudryashov, смотря как раскладывать и пользовать питон :) можно через репидс и будет все очень быстро. С++ наше все :), но для быстрой проверки некоторых гипотиз, это оверхед.
Но если говорить непосредственно о бэктрейдере, то это очень медленный зверь :)
avatar
Rostislav Kudryashov, Тут вопрос в другом, протестировать идею на работоспособность, можно даже в экселе, и если видим, что есть в ней некоторое рациональное зерно, то можно переходить уже на более детальный уровень и использовать все что душе угодно.
Однако, многие люди любят питон именно за его непринужденность и возможность быстро накидать что то абочее
avatar

теги блога CloseToAlgoTrading

....все тэги



UPDONW
Новый дизайн