Бэктестинг: с чего начать?
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. Или можно создать новый алгоритм и скопировать туда следующий код:
# функция, выполняемая перед началом тестирования
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, где описывается первая версия платформы. В те времена по умолчанию тестирование велось на дневной истории, что давало большую погрешность в сравнении с реальностью.
Теперь о нас позаботились и платформа всегда работает в режиме минутных тиков. Мы ставим ордер, и он исполняется, учитывая исторический объем. Для стратегии «купи и держи» нам достаточно ставить ордер один раз в день и сделать это можно так:
# функция, выполняемая перед началом тестирования
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.
В комментариях💬 задавайте вопросы или предложения, какую стратегию проверить в следующие разы.
Александр Румянцев aka "iamraa"
Автор Quantrum.me
Интересуетесь алготрейдингом на Python? Присоединяйтесь к команде. Пишите в личку или на email.