Бэктестинг: с чего начать?

5 месяцев назад
42 в quantopian

Quantopian — богатый инструментарий🔨 для бэктестинга различных стратегий с помощью Python🐍. На сайте имеются бесплатные данные: минутные тики⏳ с 2002 года, фундаментал, календарь отчетности📅, настроение по новостям и т.д.

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

В этот раз будет описана стратегия «Купи и держи».

Как это устроено и в чем фишка: Quantopian проводит конкурсы🏆 алгоритмов и авторам лучших предлагает деньги💰 в управление. При этом алгоритм автора будет залицензирован. Со всей прибыли алгоритма автор получает процент вознаграждения. Код алгоритмов закрыт🔒 от владельцев платформы, о чем неоднократно упоминается в соглашении пользователя и всплывающих окнах. Но Quantopian оставляет за собой право📃 изучать выходные данные алгоритма — доходность, волатильность и другие коэффициенты.

В основе Quantopian лежит библиотека Zipline, которая доступна на GitHub. Эта система основана на событиях и подходит, как для бэктестинга, так и для живой торговли. Дополнительным преимуществом является еще и то, что система готова к интеграции с платформой Interactive Brokers. Подробнее о брокере, читайте здесь.

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

Дополнительное преимущество: платформу можно подключить к своему аккаунту у брокера. То есть для построения робота вам необходимо создать алгоритм, создать аккаунт у Interactive Brokers (демо или обычный) и включить алгоритм. Затем останется только считать прибыль📈 или убытки📉, как кому повезет.

Если есть проблемы с 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.
Авторы получают вознаграждение, когда пользователи голосуют за их посты.
Голосующие читатели также получают вознаграждение за свой голос.
Порядок сортировки:  Популярное
68
  ·  5 месяцев назад

@iamraa Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:

Вы опубликовали свой первый пост
Вы впервые проголосовали
Вы получили первый голос за ваши посты

Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь

Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом стоп

Голосуя за это уведомление, вы помогаете всем пользователям Голоса. Узнайте, как здесь.

Приветствую Вас и желаю успехов на платформе Голос!

В этой статье вы сможете найти ответы на большинство вопросов, возникающих у новичков. Также большую подборку ссылок на полезные материалы вы можете найти по этой ссылке
Оперативно получить помощь, вы можете присоединившись к нашему сообществу в Телеграм

Буду признателен, если расскажете, откуда Вы узнали о платформе Голос (ответьте цифрой):

  1. увидел в Facebook
  2. увидел в ВКонтакте
  3. из поиска Google
  4. из поиска Яндекс
  5. из Steem
  6. рассказал друг
  7. другое (укажите в комментарии)

Чтобы быстрей освоится, присоединяйтесь к конкурсу для новичков, который идёт прямо сейчас!

68
  ·  5 месяцев назад

@iamraa Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:

Вы написали свой первый комментарий

Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь

Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом стоп

Голосуя за это уведомление, вы помогаете всем пользователям Голоса. Узнайте, как здесь.