Алготрейдинг: о чём расскажет RSI?

При бэктестингах индикатора RSI заметил разное поведение на разных активах. На некоторых активах сигналы перекупленности и перепроданности по RSI за короткий период (2-5 дней) работают одинаково хорошо в обе🎏 стороны, а иногда преобладает только один🐟 сигнал. На крупных индексах за последние 10 лет лучше работает сигнал перепроданности⤴.

При поиске🔎 ответа на «Почему?» удалось найти решение для определения оптимального периода RSI и лучших порогов. Итак, проанализируем это вместе на Python🐍.

Идикатор RSI по своей природе движется в диапазоне от 0 до 100. Значение выше 50 говорит о том, что цена за период выросла больше, чем упала, и наоборот. Когда цена дорастает до верхнего порогового значения (по умолчанию 70) считается, что актив перекуплен. Пересечение нижнего порога (по умолчанию 30) говорит о перепроданности. При наступлении таких пересечений ожидается разворот цены.

Но разворот случается далеко не всегда. Очень часто актив зависает в зоне перекупленности или перепроданности на недели. На графике видно, что SPY чаще задерживается в зоне перекупленности.

Почитать подробнее об RSI можно здесь. А мы посмотрим, что можно раскопать⛏.

🎓Предположение

Так как RSI зависит от движения цены, значит по пересечениям пороговых значений можно определить:

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

Если алгоритм анализа будет работать достаточно быстро, то мы сможем:

  • Подобрать оптимальный период для индикатора и менять его в реальном времени.
  • Подобрать оптимальные пороги для наибольшего количества лучших сигналов и менять их в реальном времени.
  • Исключить опасные сигналы, когда вероятность разворота низка.

📐Условия

Окружение:

  • Операционная система Linux.
  • Python 3.5.
  • Блокнот Jupyter.
  • Numpy, Pandas, Matplotlib.

Анализируем:

  • SPY, отрегулированный на дивиденды.
  • 2-дневный RSI.
  • Период: с 2012 до 2017 года.

🛠Реализация

Основная идея воплощена в этой маленькой функции кодирования последовательных значений:

def rle(inarray):
    """
    Run length encoding. Partial credit to R rle function. 
    Multi datatype arrays catered for including non Numpy
    
    Wiki: http://bit.ly/wiki_rle
    Source: htts://stackoverflow.com
    
    returns: 
        tuple (runlengths, startpositions, values) 
    """
    ia = np.array(inarray)                  # force numpy
    n = len(ia)
    if n == 0: 
        return (None, None, None)
    else:
        y = np.array(ia[1:] != ia[:-1])     # pairwise unequal (string safe)
        i = np.append(np.where(y), n - 1)   # must include last element posi
        z = np.diff(np.append(-1, i))       # run lengths
        p = np.cumsum(np.append(0, z))[:-1] # positions
        return(z, p, ia[i])

На вход мы подаем numpy-массив, а на выходе получаем:

  • Массив длин последовательного повторения значения.
  • Массив индексов изменения значения, относительно предыдущего.
  • Массив значений.

Например:

In: rle(np.array([1, 1, 5, 5, 5, 3, 2, 3, 3, 3]))
Out: ([2, 3, 1, 1, 3],
      [0, 2, 5, 6, 7], 
      [1, 5, 3, 2, 3])

🔬Пример анализа SPY

Посмотрим, что нам расскажет график SPY.

Сверху цена SPY за 5 лет. Далее график RSI(2), на котором видно, что верхний порог любим больше нижнего. На нижнем графике пример возможного индикатора вероятности разворота при пересечении границы RSI:

  • Top — вероятность разворота при достижении верхней границы.
  • Bottom — при достижении нижней.

Уже здесь мы видим, что от нижней границы вероятность разворота цены выше. Что не удивительно во времена бычьего рынка.

Теперь взглянем на продолжительность нахождения значения RSI вне границ каждого порога.

Нахождение за порогами

Слева видно, что большинство пересечений нижней границы продолжается лишь один день. А 75% всех пересечений длятся не более 3-х дней. Пересечение верхнего порога длится в среднем 2 дня. А 75% пересечений длятся не более 4-х дней.

Это может указывать на то, что открывать длинную позицию можно в первый день сигнала и ждать разворот не более 3-х дней. Короткую позицию также можно открывать на первый день, но держать её придется около 4-х дней. А это уже повышает риск.

Теперь посмотрим, сколько может быть повторных пересечений, до перехода на противоположную сторону.

Повторное пересечение порога

На графиках видно, что в 75% случаев повторные пересечения случаются реже 2-х раз подряд. Но опять видно, что два пересечения подряд чаще встречается на верхнем пороге (справа).

В заключение глянем на скорость перехода от порога к порогу.

Видно, что от нижней границы до верхней мы движемся быстрее. В 75% случаев снизу до верху мы доберемся примерно за 5 торговых дней. А путь от верхней границы до нижней может занять почти 8 дней.

🏁Вывод

Данный анализ показывает поведение актива и позволяет принимать решения о торговле по сигналам разворота. Мы видим основной тренд актива и можем рассчитать вероятность разворота цены от одного из порогов. Теперь легко найти оптимальные границы сигналов и период RSI.

Функция работает быстро и может быть использована в реальном времени для изменения настроек при торговле несколькими активами.

В следующей статье проведем бэктестинг RSI(2/5) на нескольких активах, применяя описанный инструментарий.

💬В комментариях напишите, какие ещё можно сделать выводы на полученных наблюдениях? Что можно улучшить? Также пишите, если нужен блокнот с анализом и графиками.

Александр Румянцев aka "i.am.raa"
Автор Quantrum.me
Интересуетесь алготрейдингом на Python? Присоединяйтесь к команде. Пишите в личку или на email.
☝Это можно использовать для внутридневной торговли. 🎓А научиться торговать внутри дня можно у профессионалов👍.