- PVSM.RU - https://www.pvsm.ru -
В своей статье на ресурсе QuantStart, эксперт по разработке финансовых приложений Фрэнк Смитана (Frank Smietana) рассказал о существующих фреймворках для создания софта для бэктестинга торговых стратегий и дал несколько советов по выбору подобных инструментов. Мы адаптировали этот полезный материал.
Бэктестингом называют «прогон» запрограммированной торговой стратегии на данных реальных торгов, происходивших в прошлом («исторические данные»). Это крайне важный процесс, который имеет такое же значение, как собственно разработка стратегии и ее запуск в ходе реальных торгов в режиме реального времени. Считается, что качественно проведенное тестирование на исторических данных помогает выявить некоторые недостатки и узкие места торговой системы до того, как это приведет к массированным убыткам.
Помимо бэктестинга существует понятие симуляции работы торговой стратегии. Программы-симуляторы имитируют возникновение условий, которые должны служить триггерами для совершения сделок финансовой программой — в этом случае используется режим реального времени.
Большинство из описываемых в этой статье фреймворков содержат не только функциональность прямого бэктестинга, но и предоставляют определенные возможности по запуску симуляций.
В сфере Python ситуация со специализированным софтом вполне неплоха — членам сообщества доступны шесть открытых фреймворков для создания инструментов бэктестинга.
Прежде чем приступать к выбору фреймворка и разработке бэктестера, следует определиться с требованиями к разрабатываемой торговой системе в целом. Среди прочего, есть следующие важные вопросы, требующие ответов:
Фреймворки для создания бэктестеров, как правило, включают в себя несколько компонентов:
При разработке стратегий с использованием технических индикаторов разработчики стараются подобрать оптимальный набор параметров для каждого из них. К примеру, в ходе тестирования может выясниться, что использование пересечений 6 и 10-дневных скользящих средних приводит к повышению прибыльности стратегии при ее запуске на исторических данных в сравнении с любыми другими периодами от 1 до 20 дней. Несложные подсчеты говорят о том, что в таком случае понадобится просчитать 40 комбинаций различных параметров возможных пересечений.
В контексте работы с портфолио, оптимизация подразумевает поиск оптимальных весов для каждого из активов, включая инструменты, которые можно продавать в короткую или использовать для работы с ними кредитное плечо. Периодически должна происходить ребалансировка портфолио, выражающаяся в проведении дополнительных сделок с целью привести его к оптимальному виду.
Еще один важный элемент оптимизации — это контроль размеров открываемых позиций. Этот подход позволяет разработчикам симулировать и анализировать влияние использование плеча и динамического масштабирования позиций на общую результативность стратегии.
Стандартная открытые платформы бэктестинга для Python обычно обладают рядом общих характеристик:
PyAlgoTrade это уже устоявшийся фреймворк, включающий возможность как тестирования на исторических данных так и проведения симуляций в real-time. Поддерживает данные из Yahoo! Finance, Google Finance, NinjaTrade и любых источников, предоставляющих информацию в CSV (например, Quandl). Поддерживает приказы типов маркет, лимит, стоп и стоп-лимит.
PyAlgoTrade поддерживает торговлю биткоинами через Bitstamp, а также обработку информации из Twitter в режиме реального времени.
Создатели фреймворк bt стремятся облегчить разработку легко тестируемых, гибких и подходящих для повторного использования логических блоков торговых стратегий, что должно открывать возможность к созданию сложных автоматизированных финансовых приложений.
Фреймворк подходит для тестирования так называемых portfolio-based стратегий, включающих алгоритмы для взвешивания и ребалансировки портфолио. Модификация стратегий для запуска на различных временных интервалах и c использованием раличных весов инструментов в портфолио требует минимальных усилий по изменению кода. Кроме того, bt встроен в ffn — это популярная финансовая библиотека Python.
Эта платформа превосходно документирована, разработчики ведут блог и развивают активное онлайн-коммьюнити, члены которого рады помочь найти ответ на интересующий вопрос. Backtrader поддерживает различные форматы данных, включая CSV, Pandas DataFrames, реалтайм фиды данных от нескольких зарубежных брокеров и различных итераторов. Обработка данных из разных источников может осуществляться одновременно и даже на разных временных интервалах.
Разработчик pysystemtrade Роб Карвер (Rob Carver) публиковал отличную статью о том, почему решил создать еще один фреймворк для бэктестинга на Python, в которой перечислил плюсы и минусы разработки нового фреймворка. pysystemtrade включает ряд важных функций, вроде модулей оптимизации и калибровки, а также позволяет реализовывать полностью автоматизированную торговлю фьючерсами.
Zipline — это симулятор алгоритмического трейдинга. Работать с ним можно через браузерный интерфейс IPython Notebook. Система представляет собой альтернативу инструментам на основе интерфейса командной строки. Сервис развивается и поддерживается командой проекта Quantopian, и его можно использовать как в качестве отдельного средства разработки бэктестеров, так и в связке со средой разработки и тестирования Quantopian. Платформа Zipline предоставляет доступ к десяти годам исторических данных по американским акциям в 1-минутном разрешении, также доступны несколько вариантов импорта информации.
Еще один фреймворк с функциональностью реальной торговли, запущенный основателем ресурса для экспертов в сфере финансов QuantStart Майклом Халлс-Муром (Michael Halls-Moore). Он хотел создать инструмент, который бы подходил одновременно для использования крупными хедж-фондами и частными инвесторами. В настоящий момент QSTrader поддерживает «баровое» разрешение данных (OHLCV [15]) на различных временных интервалов, однако использование тиковых данных пока недоступно.
Оба режима работы (бэктестинг и реальная торговля) полностью основаны на событиях (event-driven), что позволяет быстрее переходить от разработки стратегий к их тестированию и, затем, запуску в «боевом» режиме. Один из главных плюсов системы заключается в ее модульности, которая оставляет широкие возможности для кастомизации кода.
Автор: 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
Нажмите здесь для печати.