В своей статье на ресурсе 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 в режиме реального времени.
- Страница проекта
- Лицензия: Apache 2.0
bt — Backtesting for Python
Создатели фреймворк bt стремятся облегчить разработку легко тестируемых, гибких и подходящих для повторного использования логических блоков торговых стратегий, что должно открывать возможность к созданию сложных автоматизированных финансовых приложений.
Фреймворк подходит для тестирования так называемых portfolio-based стратегий, включающих алгоритмы для взвешивания и ребалансировки портфолио. Модификация стратегий для запуска на различных временных интервалах и c использованием раличных весов инструментов в портфолио требует минимальных усилий по изменению кода. Кроме того, bt встроен в ffn — это популярная финансовая библиотека Python.
- Страница проекта
- Лицензия: MIT
Backtrader
Эта платформа превосходно документирована, разработчики ведут блог и развивают активное онлайн-коммьюнити, члены которого рады помочь найти ответ на интересующий вопрос. Backtrader поддерживает различные форматы данных, включая CSV, Pandas DataFrames, реалтайм фиды данных от нескольких зарубежных брокеров и различных итераторов. Обработка данных из разных источников может осуществляться одновременно и даже на разных временных интервалах.
- Страница проекта
- Гитхаб
- Лицензия: GPL v3.0
pysystemtrade
Разработчик pysystemtrade Роб Карвер (Rob Carver) публиковал отличную статью о том, почему решил создать еще один фреймворк для бэктестинга на Python, в которой перечислил плюсы и минусы разработки нового фреймворка. pysystemtrade включает ряд важных функций, вроде модулей оптимизации и калибровки, а также позволяет реализовывать полностью автоматизированную торговлю фьючерсами.
- Страница проекта
- Лицензия: GPL v3.0
Zipline
Zipline — это симулятор алгоритмического трейдинга. Работать с ним можно через браузерный интерфейс IPython Notebook. Система представляет собой альтернативу инструментам на основе интерфейса командной строки. Сервис развивается и поддерживается командой проекта Quantopian, и его можно использовать как в качестве отдельного средства разработки бэктестеров, так и в связке со средой разработки и тестирования Quantopian. Платформа Zipline предоставляет доступ к десяти годам исторических данных по американским акциям в 1-минутном разрешении, также доступны несколько вариантов импорта информации.
- Страница проекта
- Гитхаб
- Лицензия: Apache 2.0
QSTrader
Еще один фреймворк с функциональностью реальной торговли, запущенный основателем ресурса для экспертов в сфере финансов QuantStart Майклом Халлс-Муром (Michael Halls-Moore). Он хотел создать инструмент, который бы подходил одновременно для использования крупными хедж-фондами и частными инвесторами. В настоящий момент QSTrader поддерживает «баровое» разрешение данных (OHLCV) на различных временных интервалов, однако использование тиковых данных пока недоступно.
Оба режима работы (бэктестинг и реальная торговля) полностью основаны на событиях (event-driven), что позволяет быстрее переходить от разработки стратегий к их тестированию и, затем, запуску в «боевом» режиме. Один из главных плюсов системы заключается в ее модульности, которая оставляет широкие возможности для кастомизации кода.
Другие материалы по теме финансов и фондового рынка от ITI Capital:
- Аналитика и обзоры рынка
- Назад в будущее: проверка работоспособности торгового робота с помощью исторических данных
- Событийно-ориентированный бэктестинг на Python шаг за шагом (Часть 1, Часть 2, Часть 3, Часть 4, Часть 5)