Блог им. Quantrum

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

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

В серии следующих постов я расскажу о том, как проводить бэктестинг с помощью 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.

★27
28 комментариев
Побольше таких постов.
Только вот пайтон странный язык. 

Капитан Сильвер, прочитал твой коммент, решил пост перечитать =))
avatar
Капитан Сильвер, это точно. Простота рулит.
Оксана Гафаити, отвращение к языку у которого свойство может принадлежать экземпляру и классу.

Капитан Сильвер, 

Каждый язык имеет свои преимущества и недостатки. Преимущество Питона в наличии огромного сообщества, огромного количества математических/статистических/финансовых библиотек. Его можно легко ускорить с помощью C/C++. Как писать расширения на C/C++ пишу у себя на блоге.

питон, кобра, гюрза, кирдык…
Посмотрите во что превращаются эти маленькие иконки разбросанные по тексту в мобильной версии — на полэкрана картинка. А если по делу zipline очень медленный, весчи типа backtrader быстрее
avatar

nbvehrfr, 

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

Quantopian развиваются. Скорость тестов растет. Но упрощенные тесты им никогда не догнать. Выбирайте симуляцию или скорость.

Хм, ну как нормальный — я пытался им пользоваться, но не шмог(. По опыту работы в нескольких хэдж-фондах, quantopian — одно из худших решений, которые я видел. Одно из самых неудобных, и точно самое медленное из всех что я встречал.
avatar

MadQuant, 

Хэдж-фонду лучше работать на своем решение, написанном на C/C++. Quantopian предназначен для индивидуальных экпериментаторов, о чем, собственно, они везде и пишут.

Александр Румянцев, это понятно, собственно, везде где я работал — были свои in-house решения. Но quantopian тоже клэймит, что они разрабатывают «hedge fund technology». Так вот их текнолоджи — самая дерьмовая из всех, что я видел. А я работал и в маленьких фондах 5-10 человек.
avatar
очередной сляпанный наскоро на пайтоне хайп
не долго проживет, т. к. ни для чего более менее серьезного не пригоден в силу тормознутости и кривобокости

avatar

speculair, 

Дайте пример серьезного, хорошо описанного и доступного.

Минутные бары? Тиков нет?
А что с оптимизацией?
avatar

First, 

Только минуты. Оптимизацией чего?

Александр Румянцев, оптимизация параметров алгоритма.
avatar
Плюс за питона. А так зиплайн медленный и непонятный, пользуюсь backtrader'ом.
avatar

ab_trader, 

Как отвечал выше. Кому-то точность, кому-то скорость.

И иконки на мобиле и правда в пол экрана
avatar
Толково, жду продолжения. :)
avatar
Ajax, ссылка на продолжение есть в посту ;)
хороший, годный пост, в смысле, проведена работа
пока я писал свою систему на машинном обучении (см мой блог), посмотрел quantopian в том числе 
По рузультатам всего этого я пришел к следующим выводам:
1. В наше время надеяться на примитивные алгоритмы типа скользящих средних — просто смешно. Передний край автоматизированной торговли в наше время — это машинное обучение
Причем, чем дальше тем круче. Обучаемые классификаторы уже, наверное, не канают. Пришло время глубокого обучения, нейронных сетей и т д 
2. Я написал торговую систему на основе машинного обучения, но с тех пор я начал участвовать в соревнованиях на Kaggle, и понял, какой я в общем то был лох. Ребята с Kaggle таких любителей как я — едят с потрохами. Техники и технологии, которые используют победители соревнований на Kaggle. — это просто фиерия
Я сейчас участвую в соревнованиях на Kaggle  с челью немного подтянуть скиллзы
3. Если уж заниматься роботами, то надо гонять машинное обучение, библиотеки sk-learn, xgboost, keras, h2o и прочие
avatar
Андрей Л (division_by_zero), 
на той же квантопии масса стратегий которые не используют машинное обучение и показывают превосходнейший результат.
Да и машинное обучение не панацея.
avatar

Андрей Л (division_by_zero), 

С чего-то надо начать. Слепое использование машинного обучения без понимания примитивных инструментов не позволит сделать что-то серьезное.

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

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

avatar
а какая версия питона там используется?
avatar

Nonstop, 

2.7

Александр Румянцев, нафиг тогда, 3.5 бы можно было поиграца
avatar

теги блога Александр Румянцев

....все тэги



UPDONW