
Данный алгоритм появился из стороннего примера, найденного на Quantopian. Я его оптимизировал и сопроводил обильными комментариями на русском. Это не лучшее использование воронок (Pipeline). Но зато использует произвольные факторы (CustomFactor).
Всё это появилось по просьбе автора MindSpace.ru, Оксаны Гафаити. Поехали!
Торгуем 2000-ми акций с наибольшей капитализацией. В основе три фундаментальных показателя:
Все акции упорядочиваем по значениям показателей в зависимости от наших потребностей и получаем три рейтинга. Для каждой акции рассчитываем конечный рейтинг по формуле:
В портфель попадут ТОП 20 акций с положительным моментумом за последние 30 дней.
Создать свой фактор легко. В списке inputs перечисляем источники данных. А в методе compute() сохраняем рассчитанное значение в аргумент out. Ниже пример расчёта моментума:
class Momentum(CustomFactor):
"""
Получаем моментум за 30 дней.
"""
# Получаем цены закрытия акций, торгующихся в США за последние 30 дней
inputs = [USEquityPricing.close]
window_length = 30 # количество дней
# Получаем изменение цены за 30 дней
def compute(self, today, assets, out, close):
# [:] чтобы записывать во входящий аргумент out и не создавать новую переменную
out[:] = close[-1] / close[0] - 1 Ребалансируем в первый торговый день месяца на открытии рынка. Стараемся приблизить к реальности, так чтобы ордера выставлялись перед открытием торговой сессии.
Код алгоритма доступен на Quantrum.me.
Алгоритм показывает хорошие результаты по доходности и опережает рынок в период с 2002 до 2018 гг. Но присутствует очень высокая просадка в -63%. Она не позволяет использовать его для торговли.
Идеи улучшения:
В комментариях задавайте вопросы и напишите, как можно уменьшить просадку. А можете разнести эту статью в пух и прах!
Александр Румянцев
Автор Quantrum.me
Telegram-канал: @quantiki