- PVSM.RU - https://www.pvsm.ru -

Подборка: 6 открытых фреймворков для создания бэктестеров торговых стратегий на Python

Подборка: 6 открытых фреймворков для создания бэктестеров торговых стратегий на Python - 1 [1]

В своей статье на ресурсе QuantStart, эксперт по разработке финансовых приложений Фрэнк Смитана (Frank Smietana) рассказал о существующих фреймворках для создания софта для бэктестинга торговых стратегий и дал несколько советов по выбору подобных инструментов. Мы адаптировали этот полезный материал.

Что такое бэктестинг

Бэктестингом называют «прогон» запрограммированной торговой стратегии на данных реальных торгов, происходивших в прошлом («исторические данные»). Это крайне важный процесс, который имеет такое же значение, как собственно разработка стратегии и ее запуск в ходе реальных торгов в режиме реального времени. Считается, что качественно проведенное тестирование на исторических данных помогает выявить некоторые недостатки и узкие места торговой системы до того, как это приведет к массированным убыткам.

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

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

В сфере Python ситуация со специализированным софтом вполне неплоха — членам сообщества доступны шесть открытых фреймворков для создания инструментов бэктестинга.

Перед выбором фреймворка

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

  • Операции с каким классом активов будет совершать система. Большинство фреймворков поддерживают работу с данными о торгах американскими акциями (через Yahoo Finance), но если требуется торговля деривативами, ETF или другими инструментами, то возможно каким-то образом импортировать эту информацию. Кроме того, мало ее найти, нужно еще чтобы фреймворк мог работать с необходимым типом активов — может ли он обрабатывать операции с фьючерсами и опционами, корректно совершать крупные сделки на не самых ликвидных рынках и так далее.
  • Насколько высокочастотной и требовательной к данным будет стратегия. Торговая система, требующая получения информаций по каждому тику или изменению спреда бид/аск очень сильно отличается от торгового робота, работающего на пятиминутных или часовых интервалах торговых данных. Важно понимать, что для создания систем первого типа хедж-фондам и HFT-компаниям приходится инвестировать огромные средства в разработку — только так они могут создавать софт, способный справляться с требуемыми нагрузками. При этом есть и платформы, предоставляющие наборы данных для различных классов активов, вроде акций индекса S&P в минутном масштабе.
  • Какие типы приказов должна поддерживать система. Джентльменский набор любой уважающей себя торговой системы включает рыночные, лимитные, стоп и стоп-лимитные заявки.
  • Уровень требуемой поддержки и документации. Некоторые из доступных фреймворков находятся на первых стадиях своего развития и не могут похвастаться объемной документацией и поддержкой, далеко ушедшей от обсуждений на форумах.

Компоненты фреймворка для бэктестинга и оптимизации

Фреймворки для создания бэктестеров, как правило, включают в себя несколько компонентов:

  • Модуль приема данных — он отвечает за считывание файла с кодом стратегии. Если фреймворк требует перекодирования стратегии перед запуском бэктеста, то важно, чтобы он поддерживал библиотечные функции для наиболее популярных технических индикаторов — это позволит ускорить тестирование.
  • Модуль тестирования производительности — с его помощью происходит анализ широкого спектра метрик риска и производительности стратегии при работе на выделенном наборе исторических данных (включая максимальную «просадку» депозита при торговле), коэффициентов Шарпа [2] и Сортино [3].
  • Оптимизация отнимает львиную часть ресурсов в процессе разработки стратегии. Если без нее не обойтись, то следует выбирать фреймворки, поддерживающие распределенную и параллельную обработку.

При разработке стратегий с использованием технических индикаторов разработчики стараются подобрать оптимальный набор параметров для каждого из них. К примеру, в ходе тестирования может выясниться, что использование пересечений 6 и 10-дневных скользящих средних приводит к повышению прибыльности стратегии при ее запуске на исторических данных в сравнении с любыми другими периодами от 1 до 20 дней. Несложные подсчеты говорят о том, что в таком случае понадобится просчитать 40 комбинаций различных параметров возможных пересечений.

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

Еще один важный элемент оптимизации — это контроль размеров открываемых позиций. Этот подход позволяет разработчикам симулировать и анализировать влияние использование плеча и динамического масштабирования позиций на общую результативность стратегии.

Шесть фреймворков бэктестинга для Python

Стандартная открытые платформы бэктестинга для Python обычно обладают рядом общих характеристик:

  • ориентированность на события;
  • гибкое лицензирование без особых ограничений;
  • обширный набор встроенных технических индикаторов;
  • стандартная функциональность для подсчета метрик производительности, визуализации и генерации отчетов.

PyAlgoTrade

PyAlgoTrade это уже устоявшийся фреймворк, включающий возможность как тестирования на исторических данных так и проведения симуляций в real-time. Поддерживает данные из Yahoo! Finance, Google Finance, NinjaTrade и любых источников, предоставляющих информацию в CSV (например, Quandl). Поддерживает приказы типов маркет, лимит, стоп и стоп-лимит.

PyAlgoTrade поддерживает торговлю биткоинами через Bitstamp, а также обработку информации из Twitter в режиме реального времени.

bt — Backtesting for Python

Создатели фреймворк bt стремятся облегчить разработку легко тестируемых, гибких и подходящих для повторного использования логических блоков торговых стратегий, что должно открывать возможность к созданию сложных автоматизированных финансовых приложений.

Фреймворк подходит для тестирования так называемых portfolio-based стратегий, включающих алгоритмы для взвешивания и ребалансировки портфолио. Модификация стратегий для запуска на различных временных интервалах и c использованием раличных весов инструментов в портфолио требует минимальных усилий по изменению кода. Кроме того, bt встроен в ffn — это популярная финансовая библиотека Python.

Backtrader

Эта платформа превосходно документирована, разработчики ведут блог и развивают активное онлайн-коммьюнити, члены которого рады помочь найти ответ на интересующий вопрос. Backtrader поддерживает различные форматы данных, включая CSV, Pandas DataFrames, реалтайм фиды данных от нескольких зарубежных брокеров и различных итераторов. Обработка данных из разных источников может осуществляться одновременно и даже на разных временных интервалах.

pysystemtrade

Разработчик pysystemtrade Роб Карвер (Rob Carver) публиковал отличную статью о том, почему решил создать еще один фреймворк для бэктестинга на Python, в которой перечислил плюсы и минусы разработки нового фреймворка. pysystemtrade включает ряд важных функций, вроде модулей оптимизации и калибровки, а также позволяет реализовывать полностью автоматизированную торговлю фьючерсами.

Zipline

Zipline — это симулятор алгоритмического трейдинга. Работать с ним можно через браузерный интерфейс IPython Notebook. Система представляет собой альтернативу инструментам на основе интерфейса командной строки. Сервис развивается и поддерживается командой проекта Quantopian, и его можно использовать как в качестве отдельного средства разработки бэктестеров, так и в связке со средой разработки и тестирования Quantopian. Платформа Zipline предоставляет доступ к десяти годам исторических данных по американским акциям в 1-минутном разрешении, также доступны несколько вариантов импорта информации.

QSTrader

Еще один фреймворк с функциональностью реальной торговли, запущенный основателем ресурса для экспертов в сфере финансов QuantStart Майклом Халлс-Муром (Michael Halls-Moore). Он хотел создать инструмент, который бы подходил одновременно для использования крупными хедж-фондами и частными инвесторами. В настоящий момент QSTrader поддерживает «баровое» разрешение данных (OHLCV [15]) на различных временных интервалов, однако использование тиковых данных пока недоступно.

Оба режима работы (бэктестинг и реальная торговля) полностью основаны на событиях (event-driven), что позволяет быстрее переходить от разработки стратегий к их тестированию и, затем, запуску в «боевом» режиме. Один из главных плюсов системы заключается в ее модульности, которая оставляет широкие возможности для кастомизации кода.

Другие материалы по теме финансов и фондового рынка от ITI Capital [19]:

Автор: ITICapital

Источник [27]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/python/280259

Ссылки в тексте:

[1] Image: https://habr.com/company/iticapital/blog/358692/

[2] Шарпа: https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D1%8D%D1%84%D1%84%D0%B8%D1%86%D0%B8%D0%B5%D0%BD%D1%82_%D0%A8%D0%B0%D1%80%D0%BF%D0%B0

[3] Сортино: https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D1%8D%D1%84%D1%84%D0%B8%D1%86%D0%B8%D0%B5%D0%BD%D1%82_%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D0%BD%D0%BE

[4] github.com/gbeced/pyalgotrade: https://github.com/gbeced/pyalgotrade

[5] Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0

[6] pmorissette.github.io/bt: http://pmorissette.github.io/bt/

[7] MIT: https://github.com/pmorissette/bt/blob/master/LICENSE.txt

[8] www.backtrader.com: https://www.backtrader.com/

[9] github.com/mementum/backtrader: https://github.com/mementum/backtrader

[10] GPL v3.0: https://github.com/robcarver17/pysystemtrade/blob/master/LICENSE

[11] github.com/robcarver17/pysystemtrade: https://github.com/robcarver17/pysystemtrade

[12] zipline.io: http://www.zipline.io/

[13] github.com/quantopian/zipline: https://github.com/quantopian/zipline

[14] Apache 2.0: https://github.com/quantopian/zipline/blob/master/LICENSE

[15] OHLCV: https://en.wikipedia.org/wiki/Open-high-low-close_chart

[16] QSTrader: https://www.quantstart.com/qstrader

[17] github.com/mhallsmoore/qstrader: https://github.com/mhallsmoore/qstrader

[18] MIT: https://github.com/mhallsmoore/qstrader/blob/master/LICENSE

[19] ITI Capital: https://iticapital.ru/

[20] Аналитика и обзоры рынка: https://iticapital.ru/research-education/research/

[21] Назад в будущее: проверка работоспособности торгового робота с помощью исторических данных: https://habr.com/company/iticapital/blog/238839/

[22] Часть 1: https://habr.com/company/iticapital/blog/263097/

[23] Часть 2: https://habr.com/company/iticapital/blog/264141/

[24] Часть 3: https://habr.com/company/iticapital/blog/266623/

[25] Часть 4: https://habr.com/company/iticapital/blog/268929/

[26] Часть 5: https://habr.com/company/iticapital/blog/270215/

[27] Источник: https://habr.com/post/358692/?utm_campaign=358692