Александр Румянцев
Александр Румянцев личный блог
01 декабря 2018, 21:48

Простая стратегия с фундаменталом для Quantopian

Простая стратегия с фундаменталом для Quantopian
Данный алгоритм появился из стороннего примера, найденного на Quantopian. Я его оптимизировал и сопроводил обильными комментариями на русском. Это не лучшее использование воронок (Pipeline). Но зато использует произвольные факторы (CustomFactor).

Всё это появилось по просьбе автора MindSpace.ru, Оксаны Гафаити. Поехали!

Идея

Торгуем 2000-ми акций с наибольшей капитализацией. В основе три фундаментальных показателя:

  • P/B — цена к балансовой стоимости. Чем меньше, тем лучше. Ценностные акции.
  • P/E — цена к прибыли. Чем меньше, тем лучше. Недооценённые акции.
  • ROA — рентабельность активов. Чем больше, тем лучше.

Все акции упорядочиваем по значениям показателей в зависимости от наших потребностей и получаем три рейтинга. Для каждой акции рассчитываем конечный рейтинг по формуле:

  \[Rank=\frac{RankPB +RankPE +RankROA}{3}\]

В портфель попадут ТОП 20 акций с положительным моментумом за последние 30 дней.

Произвольный фактор (CustomFactor)

Создать свой фактор легко. В списке 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%. Она не позволяет использовать его для торговли.

Идеи улучшения:

  • Добавить анализ роста волатильности.
  • Добавить фильтр SMA 50 и SMA 200.
  • Добавить фильтр по росту просадок за последний месяц.

В комментариях задавайте вопросы и напишите, как можно уменьшить просадку. А можете разнести эту статью в пух и прах!

Александр Румянцев
Автор Quantrum.me
Telegram-канал: @quantiki

16 Комментариев
  • Anton Shabunin
    02 декабря 2018, 00:52
    Моментум на коротком периоде (20-30 дней) имеет высокую вероятность разворота. Период надо брать от 3 мес и выше.
  • Добавить квартальную прибыль ГГ
  • Lagamail
    02 декабря 2018, 09:38
    Интересно, спасибо.
  • facevalue
    02 декабря 2018, 10:57
    Прям как будто попал на хабр, а не на смартик… ) Портфельные просадки в реальной жизни хеджируются, а не выпиливаются оптимизационными оверкилами. Модель хеджирования может быть универсальной, применимой к любому «кипишу». Оптимизация нет. Не может. Копать туда.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн