3 проблемы с бэктестингом на Quantopian

Чем больше работаешь⛏ с какой-либо системой, тем больше находишь плюсов и минусов. В этот раз я опишу проблемы Quantopian, которые необходимо👆 учитывать при использовании сервиса. Проблемы критичные и достойны особого внимания.

Quantopian — это бесплатный сервис для тестирования алгоритмических стратегий. Написан на Python🐍. Обладает множеством преимуществ, включая бесплатные исторические данные и возможность подключения счета Interactive Brokers для алготорговли.

⛔1. Запрет динамических тикеров

При запуске теста или алгоритма в торговлю все тикеры должны быть известны заранее. И их должно быть менее 200 штук на алгоритм. Исключением является использование потоков (Pipeline).

Pipeline — это механизм Quantopian для автоматического отбора активов внутри определенной группы по заранее заданным условиям. Группами являются крупные индексы, такие как S&P 500.

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

def initialize(context):
    context.asset = symbol('SPY') # все тикеры необходимо указать на старте
    # rebalance once per day, at market open
    schedule_function(rebalance, date_rules.every_day(), time_rules.market_open())

def rebalance(context, data):
    symb = 'SPY'
    asset = symbol(symb) # это вызовет ошибку на старте

🛠2. Сложность оптимизации алгоритмов

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

В среднем тест занимает несколько секунд и запускается единожды с едиными настройками. Для подобных исследований на Quantopian даже есть раздел Research Notebooks. В 2014-2015 годах пользователи пробовали оптимизировать стратегии, но сейчас запустить в нем бэктест мне не удалось. Кроме этого Quantopian пытаются оберегать данные, чтобы их не воровали почем зря.

🏎3. Производительность и окружение

Python — это современно и удобно, но версия 2.7, используемая в Quantopian, порядком устарела. Основная беда Python — это GIL (общая информация здесь) и шероховатости многопоточности. Вторая — устаревший синтаксис версии 2.7 в отличие от 3+.

🏁Вывод

Описанные проблемы — не повод вбивать гвоздь в крышку гроба⚰ Quantopian, но они заставляют искать альтернативы для тестирования некоторых торговых стратегий. Например, мне не удалось написать алгоритм полного цикла торговли по стратегии «Парного трейдинга». Поиск пар занимает продолжительное время, и его не реализовать внутри основного алгоритма. Необходимо обновлять список пар, но никак.

Для локальных тестов подойдут:

  • zipline — сердце Quantopian.
  • qstrader — альтернатива.

Есть и другие решения, но ключевым для меня является возможность подключения к шлюзу Interactive Brokers прямо из коробки. В будущем опишу установку и локальное использование альтернативной системы.

💬В комментариях напишите возможные решения. Предложите другие библиотеки бэктестинга, где реализован доступ к Interactive Brokers.