Введение в Quantopian

Quantopian – это Web-платформа для разработки и тестирования торговых алгоритмов. Доступны минутные котировки для большинства торгуемых инструментов. При необходимости можно загрузить свои данные в формате CSV. Реализованы механизмы поддержки обсуждения торговых алгоритмов внутри сообщества пользователей. Для реальной автоматизированной торговли пока доступен только Interactive Broker. Для написания торговых стратегий используется язык программирования Python. Если по каким-либо причинам не устраивает Web-платформа, можно скачать и установить свободно распространяемый пакет Zipline, который позволяет вести разработку автономно.

Регистрация

Откроем в любом браузере официальный сайт www.quantopian.com. В правом верхнем углу нажмём ссылку Join (Присоединиться).

Заполним регистрационную форму: First Name (Имя), Last Name (Фамилия), Email (электронный адрес), Password (Пароль), Password confirmation (Подтверждение пароля). Поставим галочку I accept the End User License Agreement and Privacy Policy (Принимаю лицензионное соглашение). Все даные необходимо писать латинскими буквами. Нажмём кнопку внизу Sign up (Подписать).

Через несколько минут на указанный нами адрес должно прийти письмо, в котором надо кликнуть мышкой по ссылке Confirm Quantopian Account (Подтвердить учётную запись Quantopian). Теперь можно использовать все возможности этого Web-сервиса.

Купи и держи

Войдём в свой аккаунт на Quantopian, нажав ссылку Log in в правом верхнем углу, и введём свой логин и пароль. Если данная ссылка отсутствует и если мы видим ссылку My Algorithms (Мои алгоритмы), то это значит, что мы уже авторизованы.

Откроем страницу Мои алгоритмы. Нажмём кнопку New Algorithm (Новый алгоритм). Введём имя создаваемого алгоритма в поле Algorithm name (например, Example-01) и нажмём кнопку Create algorithm (Создать алгоритм). Раскроется страница, содержащая шаблон торгового алгоритма (рис. 1).

../_images/Quantopian-01.png

Рис. 1. Шаблон торгового алгоритма

В простейшем варианте текст программы должен содержать определения двух функций: initialize(context) и handle_data(context, data). Первая функция выполняется однократно при запуске торгового алгоритма на выполнение, в ней должна происходить инициализация всех необходимых переменных. Вторая функция будет исполняться каждый раз при наступлении любого события во время тестирования алгоритма. Параметр context является словарём Python (набором именованных полей) и предназначен для сохранения состояния алгоритма между вызовами функций.

Символ # означает, что оставшаяся часть строки содержит комментарий (неисполняемую часть программы, содержащую пометки и пояснения для программиста или читателя).

Пустой оператор pass, записанный в шаблоне, означает, что тело функции пока не содержит никаких определений. Введём следующий код, чтобы получилось:

def initialize(context):
    context.ticker = sid(8554) # SPY

def handle_data(context, data):
    order(context.ticker, 100) # Купи 100 акций и держи.

Мы запрограммировали стратегию “купи и держи”: покупаем 100 акций SPY и больше ничего не делаем.

Функция sid() возвращает тикер акции по его уникальному номеру (security id). При вводе аргумента функции появляется табличка, где можно вводить первые символы тикера, т.е. номер подставляется автоматически.

Метод order(тикер, количество) позволяет купить или продать (при отрицательном втором аргументе) заданное количество акций. По умолчанию имеется в виду рыночный ордер.

После ввода текста программы нажмём кнопку Save (Сохранить) слева вверху. Если она недоступна и видна надпись Save (Сохранено) – значит, уже сработало автоматическое сохранение.

Нажмём кнопку Build Algorithm слева вверху. Если в тексте программы будут найдены ошибки, то соответствующие сообщения появятся в окне справа.

Зададим начальную и конечную даты (на панели справа, рис.2). Обратите внимание, что в датах пишется сначала номер месяца, а потом день и год.

../_images/Quantopian-02.png

Рис. 2. Начальная и конечная даты для тестирования торгового алгоритма

Нажмём кнопку Run Full Backtest (Запустить полный тест) вверху справа. После недолгого ожидания получим страницу с результатами (рис.3).

../_images/Quantopian-03.png

Рис. 3. Результаты тестирования торгового алгоритма

Слева можно переключать вкладки, чтобы увидеть детальный отчёт по всем позициям и показателям эффективности (коэффициенты альфа, бета, Шарпа, Сортино).

Вернёмся с тексту программы, нажав кнопку Algorithm вверху справа. Теперь попробуем моделировать портфель акций. Для этого исправим текст программы, чтобы получилось:

def initialize(context):
context.tickers = [sid(8554), sid(24)] # SPY, AAPL.

def handle_data(context, data):
    for ticker in context.tickers: # Для каждого тикера.
        if ticker in data: # Если обрабатываемое событие связано с этим тикером.
            order(ticker, 100) # Купи 100 акций и держи.

Снова выполним компиляцию и тестирование, сравним результаты с предыдущими.

Простейший торговый алгоритм