Quantopian — богатый инструментарий🔨 для бэктестинга различных стратегий с помощью Python🐍. На сайте имеются бесплатные данные: минутные тики⏳ с 2002 года, фундаментал, календарь отчетности📅, настроение по новостям и т.д.
Я планирую вести серию подобных постов по написанию и проверке различных стратегий. Параллельно я буду описывать саму платформу и ее возможности, что позволит осветить весь путь с нуля.
В этот раз будет описана стратегия «Купи и держи».
Как это устроено и в чем фишка: Quantopian проводит конкурсы🏆 алгоритмов и авторам лучших предлагает деньги💰 в управление. При этом алгоритм автора будет залицензирован. Со всей прибыли алгоритма автор получает процент вознаграждения. Код алгоритмов закрыт🔒 от владельцев платформы, о чем неоднократно упоминается в соглашении пользователя и всплывающих окнах. Но Quantopian оставляет за собой право📃 изучать выходные данные алгоритма — доходность, волатильность и другие коэффициенты.
В основе Quantopian лежит библиотека Zipline, которая доступна на GitHub. Эта система основана на событиях и подходит, как для бэктестинга, так и для живой торговли. Дополнительным преимуществом является еще и то, что система готова к интеграции с платформой Interactive Brokers. Подробнее о брокере, читайте здесь.
Для самых подозрительных: придумай идею, научись работать с данными, скачивай библиотеку, подключай к брокеру и торгуй приватным алгоритмом.
Дополнительное преимущество: платформу можно подключить к своему аккаунту у брокера. То есть для построения робота вам необходимо создать алгоритм, создать аккаунт у Interactive Brokers (демо или обычный) и включить алгоритм. Затем останется только считать прибыль📈 или убытки📉, как кому повезет.
Если есть проблемы с Python, тогда вам будут полезны следующие ссылки:
- Питонтьютор — интерактивный учебник по Python. Теория и задачник.
- Видео-курс CodeAcademy — курс перевед и озвучен на русский язык. Подходит с нуля.
- Stepik: Программирование на Python — онлайн-курс Python для начинающих на платформе Stepik.
- Stepik: Python: основы и применение — онлайн-курс Python для умеющих программировать.
- Stepik: Адаптивный тренажер — онлайн-тренажер Python.
С чего начать?
Если кратко, то идем на сайт, регистрируемся и начинаем писать код. А подробнее надо знать о следующих пунктах меню:
- My Code > Notebooks: Ipython блокноты, заточенные под тестирование разных стратегий. Имеется несколько примеров кода.
- My Code > Algorithms: управление своими алгоритмами. Здесь есть примеры, которые помогут начать. Что-то будет рассмотрено ниже.
- Learn & Support > Learn: здесь есть вводный курс, FAQ, документация, примеры, статьи и лекции. Все на английском.
Вводный алгоритм
Идем сюда My Code > Algorithms и выбираем из списка Getting Started: Lesson 1 1. Или можно создать новый алгоритм и скопировать туда следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# функция, выполняемая перед началом тестирования def initialize(context): # context - объект, который будет доступен на всем пути # привязываемся к тикеру AAPL # sid(24) и symbol("AAPL") взаимозаменяемы context.aapl = sid(24) # добавим переменную для вывода в Logs context.message = "hello" # функция, которая будет вызвана каждую минуту def handle_data(context, data): # будет куплен AAPL на 100% портфеля order_target_percent(context.aapl, 1.00) # выведем переменную из контекста (попадет в Logs) print(context.message) |
Этот код каждую минуту будет проверять наличие свободных средств и покупать акции AAPL, поддерживая их долю на уровне 100% портфеля. Покупка будет осуществляться постановкой ордера, который будет заполняться по мере появления необходимого объема в исторических минутных тиках.
Quantopian не даст купить акций больше, чем торговалось исторически. Результаты такого теста наиболее приближены к реальной торговле.
Также, каждую минуту в лог будет писаться сообщение «hello». Богатыми это нас не делает, но картина проясняется.
Перед запуском установите период и размер капитала.
Алгортим: купи и держи
В русскоязычном интернете есть несколько обзоров Quantopian, где описывается первая версия платформы. В те времена по умолчанию тестирование велось на дневной истории, что давало большую погрешность в сравнении с реальностью.
Теперь о нас позаботились и платформа всегда работает в режиме минутных тиков. Мы ставим ордер, и он исполняется, учитывая исторический объем. Для стратегии «купи и держи» нам достаточно ставить ордер один раз в день и сделать это можно так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# функция, выполняемая перед началом тестирования def initialize(context): # сохраняем актив, с которым будем работать context.asset = symbol('SPY') # ставим событие для ребалансировки на открытии рынка schedule_function(rebalance, date_rules.every_day(), time_rules.market_open()) # ежедневная ребалансировка def rebalance(context, data): # проверяем возможность торговли активом if data.can_trade(context.asset): # покупаем актив на 100% портфеля order_target_percent(context.asset, 1.00) # пишем в Logs сообщение print("rebalanced") |
В данном алгоритме каждый торговый день будет вызвана функция rebalance(), которая поставит ордер на покупка SPY на все свободные средства. В лог каждый день будет выведено сообщение «rebalanced».
Результаты будут максимально приближены к бенчмарку Quantopian, в котором использован принцип «купи и держи» для SPY. Все полученные дивиденды будут реинвестироваться.
Run Full Backtest проведет более детальный анализ и предоставит новую информацию для анализа алгоритма. В будущих статьх я обязательно к этому вернусь.
Заключение
Этого материала достаточно, чтобы пойти и попробовать самостоятельно что к чему. Стратегия простая как валенок👢 и подробности здесь ни к чему. В следующий раз я опишу улучшенную стратегию «купи и держи» вокруг SMA(200), которая недавно была описана на сайте Mindspace.ru.
В комментариях💬 задавайте вопросы или предложения, какую стратегию проверить в следующие разы.
Автор Quantrum.me
Telegram-канал📣: @quantiki
Подбор и тестирование портфелей. Подключение стратегий к IB.