Александр Румянцев
Александр Румянцев личный блог
14 марта 2017, 23:24

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

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

В серии следующих постов я расскажу о том, как проводить бэктестинг с помощью Python. Для тестирования торговых стратегий я использую сайт Quantopian. Почему именно его? Потому что он: а) простой и наглядный; б) дает доступ к бесплатным историческим данным; в) имеет богатый функционал. 

Как устроен Quantopian и в чем его фишка?

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

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

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

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

Если вы не знакомы с языком Python, то для его изучения вам будут полезны следующие ссылки:

С чего начать?

Если кратко, то идем на сайт Quantopian, регистрируемся и начинаем писать код. А подробнее надо знать о следующих пунктах меню:

  • 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. В комментариях задавайте вопросы и оставляйте свои предложения.


Александр Румянцев,
Трейдер и автор блога Quantrum.me.

29 Комментариев
  • Капитан Сильвер
    15 марта 2017, 00:04
    Побольше таких постов.
    Только вот пайтон странный язык. 

    • Андрей К
      15 марта 2017, 00:07
      Капитан Сильвер, прочитал твой коммент, решил пост перечитать =))
    • Оксана Гафаити
      15 марта 2017, 11:27
      Капитан Сильвер, это точно. Простота рулит.
      • Капитан Сильвер
        15 марта 2017, 11:33
        Оксана Гафаити, отвращение к языку у которого свойство может принадлежать экземпляру и классу.
  • Сергей Гаврилов
    15 марта 2017, 00:28
    питон, кобра, гюрза, кирдык…
  • nbvehrfr
    15 марта 2017, 01:50
    Посмотрите во что превращаются эти маленькие иконки разбросанные по тексту в мобильной версии — на полэкрана картинка. А если по делу zipline очень медленный, весчи типа backtrader быстрее
  • MadQuant
    15 марта 2017, 03:42
    Хм, ну как нормальный — я пытался им пользоваться, но не шмог(. По опыту работы в нескольких хэдж-фондах, quantopian — одно из худших решений, которые я видел. Одно из самых неудобных, и точно самое медленное из всех что я встречал.
      • MadQuant
        15 марта 2017, 22:02
        Александр Румянцев, это понятно, собственно, везде где я работал — были свои in-house решения. Но quantopian тоже клэймит, что они разрабатывают «hedge fund technology». Так вот их текнолоджи — самая дерьмовая из всех, что я видел. А я работал и в маленьких фондах 5-10 человек.
  • speculair
    15 марта 2017, 04:01
    очередной сляпанный наскоро на пайтоне хайп
    не долго проживет, т. к. ни для чего более менее серьезного не пригоден в силу тормознутости и кривобокости

  • First
    15 марта 2017, 07:17
    Минутные бары? Тиков нет?
    А что с оптимизацией?
      • First
        16 марта 2017, 19:20
        Александр Румянцев, оптимизация параметров алгоритма.
  • ab_trader
    15 марта 2017, 08:10
    Плюс за питона. А так зиплайн медленный и непонятный, пользуюсь backtrader'ом.
  • ab_trader
    15 марта 2017, 08:11
    И иконки на мобиле и правда в пол экрана
  • Ajax
    15 марта 2017, 08:18
    Толково, жду продолжения. :)
  • Гуру Хренов
    15 марта 2017, 08:31
    хороший, годный пост, в смысле, проведена работа
    пока я писал свою систему на машинном обучении (см мой блог), посмотрел quantopian в том числе 
    По рузультатам всего этого я пришел к следующим выводам:
    1. В наше время надеяться на примитивные алгоритмы типа скользящих средних — просто смешно. Передний край автоматизированной торговли в наше время — это машинное обучение
    Причем, чем дальше тем круче. Обучаемые классификаторы уже, наверное, не канают. Пришло время глубокого обучения, нейронных сетей и т д 
    2. Я написал торговую систему на основе машинного обучения, но с тех пор я начал участвовать в соревнованиях на Kaggle, и понял, какой я в общем то был лох. Ребята с Kaggle таких любителей как я — едят с потрохами. Техники и технологии, которые используют победители соревнований на Kaggle. — это просто фиерия
    Я сейчас участвую в соревнованиях на Kaggle  с челью немного подтянуть скиллзы
    3. Если уж заниматься роботами, то надо гонять машинное обучение, библиотеки sk-learn, xgboost, keras, h2o и прочие
    • CloseToAlgoTrading
      15 марта 2017, 13:04
      Андрей Л (division_by_zero), 
      на той же квантопии масса стратегий которые не используют машинное обучение и показывают превосходнейший результат.
      Да и машинное обучение не панацея.
    • MadQuant
      15 марта 2017, 16:32

      Андрей Л (division_by_zero), в моем понимании машинное обучение, deep learning и т.д. — это просто очередной священный грааль, с помощью которого (теперь количественные) управляющие пытаются покорить рынок. По моему же опыту это не сильно полезная вещь. То есть, есть там мега-полезный раздел, который все рвет, но это не deeplearning и прочая шняга, которую использует народ на кегле.

      По поводу простых алгоритмов — работал я в одном фонде, и они использовали простые алгоритмы типа скользящих средних для торговли, и торговали с шарпом 3+ с середины 90-х до даты, когда я оттуда ушел (несколько лет назад). Размер фонда был приличный — несколько миллиардов долл., так что это не Вася на коленке, которому случайно повезло. И не хфт-шники всякие — использовали на самом деле только EOD-данные, и торговали раз в день на закрытии. Весь секрет — не полагаться на один конкретный алгоритм — конечно он может слить — а использовать сотни и тысячи, желательно некоррелированных. Собственно, diversification is the only free lunch on Wall.St. — в этом и состоит святой грааль инвестирования и трейдинга, а не в энтом вашем диплёрниге.

  • Круто
    15 марта 2017, 08:47
    а какая версия питона там используется?
  • Дмитрий Смирнов
    18 ноября 2022, 09:49
    Умер Quantopian

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн