среда, 16 сентября 2020 г.

Тестирование систематических торговых стратегий в Python: соображения и фреймворки с открытым исходным кодом


В этой статье Frank Smietana, один из приглашенных экспертов QuantStart, описывает ландшафт программного обеспечения в Python с открытым исходным кодом для тестирования стратегий на истории и дает советы о том, какой фреймворк для тестирования на истории подойдет для нужд вашего проекта.

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

Ряд родственных видов моделирования пересекается с бэктестированием, включая имитацию торговли и торговлю в реальном времени. Бэктестинг использует исторические данные для количественной оценки производительности STS. Торговые симуляторы делают еще один шаг вперед в тестировании на истории, визуализируя запуск сделок и динамику цен для каждого бара. Имитационная/реальная торговля развертывает протестированную STS в реальном времени: сигнализирует о сделках, генерирует ордеры, направляет их брокерам, а затем поддерживает позиции по мере их исполнения.

Большинство фреймворков выходят за рамки тестирования на истории и включают в себя некоторые возможности реальной торговли. Это удобно, если вы хотите выполнить развертывание из своей инфраструктуры тестирования на истории, которая также работает с вашим брокером и источниками данных. Quantopian/Zipline идет еще дальше, предоставляя полностью интегрированное решение для разработки, тестирования и развертывания торговых стратегий.

Сообщество Python хорошо поддерживается: доступно как минимум шесть фреймворков для тестирования на истории с открытым исходным кодом. Однако они находятся на разных стадиях разработки и документированности. Если вам нравится работать в команде, создающей фреймворк для тестирования на истории с открытым исходным кодом, посмотрите их репозитории на Github.

Перед тем, как оценивать фреймворки для тестирования на истории, стоит определить требования вашей STS.

Какими классами активов вы торгуете? Хотя большинство платформ поддерживают данные по акциям США через YahooFinance, если стратегия включает деривативы, ETF или ценные бумаги развивающихся стран, данные должны быть импортированы или предоставлены фреймворком. Может ли структура обрабатывать фьючерсы и опционы и автоматически генерировать пролонгированные сделки? Что насчет неликвидных рынков, насколько реалистичными должны быть предположения при выполнении крупных ордеров?

На какой частоте и детализации данных построена ваша STS? Торговая система, требующая каждого тика, имеет совсем другой набор проблем управления данными, чем для 5-минутного или часового таймфрейма. Хедж-фонды и HFT-трейдеры вложили значительные средства в создание надежных, масштабируемых фреймворков для тестирования на исторических данных для обработки данных такого объема и частоты. Некоторые платформы предоставляют богатый и подробный набор данных для различных классов активов, таких как акции S&P, с разрешением в одну минуту.

Какие типы ордеров требуются вашей STS? Как минимум, лимитные, стопы и взаимоотменяемые (ОСО) ордера должны поддерживаться фреймворком.

Требуемый уровень поддержки и документации. Фреймворки на ранней стадии разработки имеют скудную документацию, у немногих есть поддержка, кроме советов сообщества.

Компоненты инфраструктуры бэктестинга

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

Тестирование эффективности применяет логику STS к запрошенному окну исторических данных и вычисляет широкий спектр показателей риска и эффективности, включая максимальную просадку, коэффициенты Шарпа и Сортино. Почти все фреймворки поддерживают приличное количество возможностей визуализации, включая кривые капитала и децилированную статистику.

Оптимизация, как правило, требует львиную долю вычислительных ресурсов в процессе тестирования STS. Если ваша STS требует оптимизации, сосредоточьтесь на платформе, которая поддерживает масштабируемую распределенную и параллельную обработку.

В контексте стратегий, разработанных с использованием технических индикаторов, разработчики системы пытаются найти оптимальный набор параметров для каждого индикатора. Проще говоря, оптимизация может обнаружить, что пересечение скользящих средних за 6 и 10 дней накопило больше прибыли по историческим тестовым данным, чем любая другая комбинация периодов времени от 1 до 20. Уже в этом тривиальном примере должно быть 20 * 20 = 400 комбинаций параметров, которые будут рассчитаны и ранжированы.

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

Определение размера позиции - это дополнительное использование оптимизации, помогающее разработчикам систем моделировать и анализировать влияние кредитного плеча и динамического определения размера позиции на STS и прибыльность портфеля.

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

Стандартные возможности платформ для тестирования на истории Python с открытым исходным кодом, включают:

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

PyAlgoTrade

PyAlgoTrade - это зрелый, полностью задокументированный фреймворк для тестирования на истории, с возможностями торговли в реальном времени. Поддержка данных включает Yahoo! Finance, Google Finance, NinjaTrader и любые временные ряды на основе CSV, такие как Quandl. Поддерживаемые типы ордеров включают Market, Limit, Stop и StopLimit.

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

Сайт проекта: PyAlgoTrade
Лицензия: Apache 2.0

bt - Backtesting for Python

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

Этот фреймворк особенно подходит для тестирования STS на основе портфеля с алгоритмами для взвешивания активов и ребалансировки портфеля. Изменение стратегии для работы с разными временными частотами или альтернативными весами активов требует минимальной настройки кода. bt построен на основе ffn - библиотеки финансовых функций для Python.

Сайт проекта: bt
Лицензия: MIT

Backtrader

Эта платформа исключительно хорошо документирована, с сопутствующим блогом и активным онлайн-сообществом для размещения вопросов и запросов функций. Backtrader поддерживает ряд форматов данных, включая файлы CSV, Pandas DataFrames, blaze iterators и потоки данных в реальном времени от трех брокеров. К этим потокам данных можно обращаться одновременно, и они могут даже представлять разные таймфреймы. Поддерживаемые брокеры включают Oanda для торговли на валютном рынке, а также Interactive Brokers и Visual Chart.

Лицензия: GPL v3.0

pysystemtrade

Разработчик pysystemtrade Роб Карвер опубликовал отличный пост, в котором обсуждает, почему он намеревался создать еще один фреймворк для тестирования на истории на Python, а также аргументы за и против разработки фреймворка. Структура тестирования на исторических данных для pysystemtrade обсуждается в книге Роба «Systematic Trading».

pysystemtrade содержит полнофункциональный бэк-тестер, который включает методы оптимизации и калибровки, а также полностью автоматизированную торговлю фьючерсами с Interactive Brokers. 

Лицензия: GPL v3.0

Zipline

Zipline - это симулятор алгоритмической торговли с возможностью торговли на бумаге и в реальном времени. Доступный через интерфейс IPython Notebook на основе браузера, Zipline представляет собой простую в использовании альтернативу инструментам командной строки. Zipline, поддерживаемый и разрабатываемый Quantopian, может использоваться как автономная среда для тестирования на истории или как часть полной среды разработки, тестирования и развертывания Quantopian/Zipline STS. Zipline предоставляет исторические данные по акциям США за 10 лет с минутным разрешением и ряд вариантов импорта данных.

Сайт: zipline.io
Лицензия: Apache 2.0

QSTrader

QSTrader - это фреймворк для тестирования на истории с возможностями реальной торговли. Основатель QuantStart Майкл Холлс-Мур запустил QSTrader с намерением создать платформу, достаточно надежную и масштабируемую, чтобы обслуживать потребности институциональных хедж-фондов, а также частных трейдеров. QSTrader в настоящее время поддерживает данные о разрешении бары OHLCV на различных временных масштабах, но не позволяет использовать тиковые данные.

И тестирование на истории, и торговля в реальном времени полностью событийно-ориентированные, что упрощает переход стратегий от исследования к тестированию и, наконец, к торговле в реальном времени. Код основной стратегии/портфеля часто идентичен в обоих случаях.

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

Лицензия: MIT

Использование бэктестера

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

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

Комментариев нет:

Отправить комментарий