В серии следующих постов я расскажу о том, как проводить бэктестинг с помощью Python. Для тестирования торговых стратегий я использую сайт Quantopian. Почему именно его? Потому что он: а) простой и наглядный; б) дает доступ к бесплатным историческим данным; в) имеет богатый функционал.
Для самых подозрительных: придумай идею, научись работать с данными, скачивай библиотеку, подключай к брокеру и торгуй приватным алгоритмом.
Если вы не знакомы с языком Python, то для его изучения вам будут полезны следующие ссылки:
Если кратко, то идем на сайт Quantopian, регистрируемся и начинаем писать код. А подробнее надо знать о следующих пунктах меню:
Идем сюда 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.
Только вот пайтон странный язык.
Капитан Сильвер,
Каждый язык имеет свои преимущества и недостатки. Преимущество Питона в наличии огромного сообщества, огромного количества математических/статистических/финансовых библиотек. Его можно легко ускорить с помощью C/C++. Как писать расширения на C/C++ пишу у себя на блоге.
nbvehrfr,
Причина в симуляции естественной торговли. Контроль ежеминутного объема, набор большой позиции в последующие тики, влияние на цену. Симуляция рынка и прогон по истории без учета деталей показывают разные результаты. За точность приходится платить.
Quantopian развиваются. Скорость тестов растет. Но упрощенные тесты им никогда не догнать. Выбирайте симуляцию или скорость.
MadQuant,
Хэдж-фонду лучше работать на своем решение, написанном на C/C++. Quantopian предназначен для индивидуальных экпериментаторов, о чем, собственно, они везде и пишут.
не долго проживет, т. к. ни для чего более менее серьезного не пригоден в силу тормознутости и кривобокости
speculair,
Дайте пример серьезного, хорошо описанного и доступного.
А что с оптимизацией?
First,
Только минуты. Оптимизацией чего?
ab_trader,
Как отвечал выше. Кому-то точность, кому-то скорость.
пока я писал свою систему на машинном обучении (см мой блог), посмотрел quantopian в том числе
По рузультатам всего этого я пришел к следующим выводам:
1. В наше время надеяться на примитивные алгоритмы типа скользящих средних — просто смешно. Передний край автоматизированной торговли в наше время — это машинное обучение
Причем, чем дальше тем круче. Обучаемые классификаторы уже, наверное, не канают. Пришло время глубокого обучения, нейронных сетей и т д
2. Я написал торговую систему на основе машинного обучения, но с тех пор я начал участвовать в соревнованиях на Kaggle, и понял, какой я в общем то был лох. Ребята с Kaggle таких любителей как я — едят с потрохами. Техники и технологии, которые используют победители соревнований на Kaggle. — это просто фиерия
Я сейчас участвую в соревнованиях на Kaggle с челью немного подтянуть скиллзы
3. Если уж заниматься роботами, то надо гонять машинное обучение, библиотеки sk-learn, xgboost, keras, h2o и прочие
на той же квантопии масса стратегий которые не используют машинное обучение и показывают превосходнейший результат.
Да и машинное обучение не панацея.
Андрей Л (division_by_zero),
С чего-то надо начать. Слепое использование машинного обучения без понимания примитивных инструментов не позволит сделать что-то серьезное.
Андрей Л (division_by_zero), в моем понимании машинное обучение, deep learning и т.д. — это просто очередной священный грааль, с помощью которого (теперь количественные) управляющие пытаются покорить рынок. По моему же опыту это не сильно полезная вещь. То есть, есть там мега-полезный раздел, который все рвет, но это не deeplearning и прочая шняга, которую использует народ на кегле.
По поводу простых алгоритмов — работал я в одном фонде, и они использовали простые алгоритмы типа скользящих средних для торговли, и торговали с шарпом 3+ с середины 90-х до даты, когда я оттуда ушел (несколько лет назад). Размер фонда был приличный — несколько миллиардов долл., так что это не Вася на коленке, которому случайно повезло. И не хфт-шники всякие — использовали на самом деле только EOD-данные, и торговали раз в день на закрытии. Весь секрет — не полагаться на один конкретный алгоритм — конечно он может слить — а использовать сотни и тысячи, желательно некоррелированных. Собственно, diversification is the only free lunch on Wall.St. — в этом и состоит святой грааль инвестирования и трейдинга, а не в энтом вашем диплёрниге.
Nonstop,
2.7