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

jxc9pcmytpk2vxbitfbtevnjnvk.png

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

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


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

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

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

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

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


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

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


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


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

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


При разработке стратегий с использованием технических индикаторов разработчики стараются подобрать оптимальный набор параметров для каждого из них. К примеру, в ходе тестирования может выясниться, что использование пересечений 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) на различных временных интервалов, однако использование тиковых данных пока недоступно.

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


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

© Habrahabr.ru