Представление и кодирование полного индикатора следования за трендом на Python.

Индикатор «Радуга» представляет собой смесь системы следования за трендом и системы противодействия. Это комбинация сглаженных скользящих средних, которые используются вместе для подтверждения начала или конца тренда. В этой статье мы создадим индикатор Rainbow с нуля на Python.

Я только что опубликовал новую книгу после успеха Новые технические индикаторы в Python. Он содержит более полное описание и добавление сложных торговых стратегий со страницей Github, посвященной постоянно обновляемому коду. Если вы считаете, что это вас заинтересует, не стесняйтесь перейти по приведенной ниже ссылке или, если вы предпочитаете купить версию в формате PDF, вы можете связаться со мной в Linkedin.



Концепция скользящих средних

Скользящие средние помогают нам подтверждать тренд и управлять им. Они являются наиболее известными техническими индикаторами, и это связано с их простотой и их проверенной репутацией по добавлению ценности к анализу. Мы можем использовать их для поиска уровней поддержки и сопротивления, стопов и целей, а также для понимания основного тренда. Такая универсальность делает их незаменимым инструментом в нашем торговом арсенале.

Как следует из названия, это ваше простое простое средство, которое используется повсюду в статистике и практически в любой другой части нашей жизни. Это просто общие значения наблюдений, разделенные на количество наблюдений. С математической точки зрения это можно записать как:

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

def ma(Data, lookback, what, where):
    
  for i in range(len(Data)):
      try:
        Data[i, where] = (Data[i - lookback + 1:i + 1, what].mean())
        
            except IndexError:
                pass
    return Data

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

Обратите внимание, как экспоненциальная скользящая средняя ближе к ценам, чем простая, когда тренд сильный. Это связано с тем, что он придает больший вес последним значениям, чтобы среднее не оставалось очень большим.

Сглаженная скользящая средняя

Впервые представил Уэллс Уайлдер, создатель знаменитого индекса относительной силы и индикатора ADX. Сглаженная скользящая средняя - это версия скользящей средней, предназначенная для сглаживания значений. Напротив, экспоненциальная скользящая средняя используется для придания большего веса последним значениям и, следовательно, имеет тенденцию обеспечивать меньшую задержку.

def ema(Data, alpha, lookback, what, where):
    
    # alpha is the smoothing factor
    # window is the lookback period
    # what is the column that needs to have its average calculated
    # where is where to put the exponential moving average
    
    alpha = alpha / (lookback + 1.0)
    beta  = 1 - alpha
    
    # First value is a simple SMA
    Data = ma(Data, lookback, what, where)
    
    # Calculating first EMA
    Data[lookback + 1, where] = (Data[lookback + 1, what] * alpha) + (Data[lookback, where] * beta)
    # Calculating the rest of EMA
    for i in range(lookback + 2, len(Data)):
      try:
        Data[i, where] = (Data[i, what] * alpha) + (Data[i - 1, where] * beta)
            except IndexError:
                pass
    return Data

Интересно отметить, что мы можем переключаться между экспоненциальным и сглаженным значениями, используя одну простую формулу:

Это означает, что когда у нас есть экспоненциальная скользящая средняя с 50 периодами, мы можем преобразовать ее в сглаженную скользящую среднюю, просто превратив ее в экспоненциальную скользящую среднюю с периодом 99. Следовательно, сглаженная скользящая средняя с 50 периодами аналогична экспоненциальной скользящей средней с периодом 99.

Приведенный выше график был построен с использованием функции ema с ретроспективным обзором 399 (соответствует 200-периодному сглаженному скользящему среднему).

Если вас также интересуют другие технические индикаторы и использование Python для создания стратегий, то мой бестселлер по техническим индикаторам может вас заинтересовать:



Индикатор радуги

Индикатор «Радуга» состоит из следующего за трендом компонента и противоположного компонента, который пытается определить, когда тренд, вероятно, остановится, что может обеспечить возможности для фиксации прибыли. Мы будем опираться на концепцию сглаженных скользящих средних, чтобы создать индикатор радуги.

Мне проще все подробно перечислить перед тем, как начать. Поэтому, как я уже упоминал, индикатор радуги состоит из двух элементов:

  • Радужная дуга: состоит из 7 сглаженных скользящих средних с периодом ретроспективного анализа от 20 до 50 с интервалом в 5 периодов. Используется для отслеживания тренда после того, как происходит пересечение или когда рыночная цена корректируется до зоны радужной дуги.
  • Осциллятор радуги: состоит из разницы между первой сглаженной скользящей средней с 20 периодами и последней сглаженной скользящей средней с 50 периодами. Используется с субъективными границами, чтобы определить, когда рынок вот-вот остановится после трендового поведения.

На графике ниже показан пример пары EURUSD. Радужная дуга образует зону поддержки / сопротивления, когда рынок находится в тренде, а также обеспечивает подтверждение разворота тренда. Параллельно с этим используется осциллятор радуги, чтобы сигнализировать, что противоположное движение может произойти всякий раз, когда оно приближается к 0,005 или -0,005.

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

def rainbow(Data, ma1, ma2, ma3, ma4, ma5, ma6, ma7, what, where):
    
    # Converting Exponential lookback to Smoothed Lookback
    ma1 = (ma1 * 2) - 1
    ma2 = (ma2 * 2) - 1
    ma3 = (ma3 * 2) - 1
    ma4 = (ma4 * 2) - 1
    ma5 = (ma5 * 2) - 1
    ma6 = (ma6 * 2) - 1
    ma7 = (ma7 * 2) - 1
    
    # Calculating the Smoothed Moving Averages A.K.A The Rainbow   Moving Average
    Data = ema(Data, 2, ma1, what, where)
    Data = ema(Data, 2, ma2, what, where + 1)
    Data = ema(Data, 2, ma3, what, where + 2)
    Data = ema(Data, 2, ma4, what, where + 3)
    Data = ema(Data, 2, ma5, what, where + 4)
    Data = ema(Data, 2, ma6, what, where + 5)
    Data = ema(Data, 2, ma7, what, where + 6)
    
    # The Rainbow Oscillator
    Data[:, where + 7] = Data[:, where] - Data[:, where + 6]
         
    return Data

Чтобы добавить указанное количество пустых столбцов в массив, мы можем использовать следующую функцию сумматора:

def adder(Data, times):
    
    for i in range(1, times + 1):
    
        z = np.zeros((len(Data), 1), dtype = float)
        Data = np.append(Data, z, axis = 1)
return Data

Правила торговли по индикатору следующие:

  • Каждый раз, когда направление радужной дуги переключается (т. е. полное пересечение скользящих средних), когда краткосрочные скользящие средние становятся выше долгосрочных, формируется бычий сигнал до тех пор, пока Радужный осциллятор не приближается к 0,005.
  • Каждый раз, когда направление радужной дуги переключается (т. е. полное пересечение скользящих средних), а краткосрочные скользящие средние становятся ниже долгосрочных, генерируется медвежий сигнал до тех пор, пока осциллятор радуги не приближается к -0,005.

Заключение

Почему была написана эта статья? Это определенно не метод кормления с ложечки и не путь к прибыльной стратегии. Если вы будете следить за моими статьями, то заметите, что я уделяю больше внимания как это сделать, а не вот он, и что я также предоставляю функции, а не полный воспроизводимый код. В финансовой индустрии вам следует самостоятельно комбинировать кусочки другой экзогенной информации и данных, только тогда вы овладеете искусством исследования и торговли. Я всегда советую вам проводить надлежащие бэк-тесты и понимать любые риски, связанные с торговлей.