Представляем мощный индикатор тренда.

Примечание редакторам Data Science. Хотя мы разрешаем независимым авторам публиковать статьи в соответствии с нашими правилами и рекомендациями, мы не поддерживаем вклад каждого автора. Не стоит полагаться на работы автора без консультации с профессионалами. См. Подробности в наших Условиях для читателей.

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

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



Общие скользящие средние

Три наиболее распространенных скользящих средних:

  • Простая скользящая средняя.
  • Экспоненциальная скользящая средняя.
  • Сглаженная скользящая средняя.

Мы рассмотрим каждую из них, определим ее, закодируем и нанесем на карту, прежде чем перейдем к KAMA.

  • Простая скользящая средняя

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

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

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

Функция принимает вашу структуру данных, представленную переменной Data, период скользящего среднего (20, 60, 200 и т. Д.), Представленный переменной period, что вы хотите для его применения (для структур данных OHLC выберите 3 для цен закрытия, потому что индексирование Python начинается с нуля), представленного переменной onwhat, а переменная где - это то, где вы хотите, чтобы появился столбец скользящего среднего. Обратите внимание, что у вас должен быть массив из более чем 4 столбцов, чтобы это работало, потому что он не создает автоматически новый столбец, а просто заполняет его.

  • Экспоненциальная скользящая средняя

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

Коэффициент сглаживания часто равен 2. Обратите внимание, что если мы увеличим коэффициент сглаживания (также известный как альфа), то более свежие наблюдения будут иметь больший вес. На языке Python мы можем определить функцию, которая вычисляет EMA, следующим образом:

def ema(Data, alpha, window, what, whereSMA, whereEMA):
    
    # 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 / (window + 1.0)
    beta  = 1 - alpha
    
    # First value is a simple SMA
    Data[window - 1, whereSMA] = np.mean(Data[:window - 1, what])
    
    # Calculating first EMA
    Data[window, whereEMA] = (Data[window, what] * alpha) + (Data[window - 1, whereSMA] * beta)# Calculating the rest of EMA
    for i in range(window + 1, len(Data)):
            try:
                Data[i, whereEMA] = (Data[i, what] * alpha) + (Data[i - 1, whereEMA] * beta)
        
            except IndexError:
                pass
    return Data

Функция не требует пояснений, поскольку она просто воспроизводит функцию EMA, представленную выше.

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



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

Эта скользящая средняя учитывает общую картину и в меньшей степени подвержена влиянию недавних движений. Это мой любимый индикатор следования за трендом. С математической точки зрения, его можно найти, просто умножив переменную Days в функции EMA на 2 и вычтите 1. Это означает, что для преобразования экспоненциальной скользящей средней в сглаженную мы следуем этому уравнению на языке Python, которое преобразует экспоненциальную скользящую среднюю. среднее в сглаженное:

smoothed = (exponential * 2) - 1 # From exponential to smoothed

Адаптивная скользящая средняя Кауфмана

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

Первое понятие, которое мы должны измерить, - это коэффициент эффективности, который представляет собой абсолютное изменение текущей цены закрытия относительно изменения за последние 10 периодов, деленное на тип волатильности, рассчитанный особым образом. Можно сказать, что коэффициент эффективности - это изменение, деленное на волатильность.

Затем мы вычисляем константу сглаживания по следующей формуле:

Наконец, для расчета КАМА мы используем следующую формулу:

Расчет может показаться сложным, но его легко автоматизировать, и вам не нужно много об этом думать. Давайте посмотрим, как написать код на Python, а затем рассмотрим несколько примеров.

def kama(Data, what, where, change):
    
    # Change from previous period
    for i in range(len(Data)):
        Data[i, where] = abs(Data[i, what] - Data[i - 1, what])
    
    Data[0, where] = 0
    
    # Sum of changes
    for i in range(len(Data)):
        Data[i, where + 1] = (Data[i - change + 1:i + 1, where].sum())   
        
    # Volatility    
    for i in range(len(Data)):
        Data[i, where + 2] = abs(Data[i, 3] - Data[i - 10, 3])
        
    Data = Data[11:, ]
    
    # Efficiency Ratio
    Data[:, where + 3] = Data[:, where + 2] / Data[:, where + 1]
    
    for i in range(len(Data)):
        Data[i, where + 4] = np.square(Data[i, where + 3] * 0.6666666666666666667)
        
    for i in range(len(Data)):
        Data[i, where + 5] = Data[i - 1, where + 5] + (Data[i, where + 4] * (Data[i, 3] - Data[i - 1, where + 5]))
        Data[11, where + 5] = 0

На приведенной ниже диаграмме показано, что может дать нам вышеуказанная функция. Обратите внимание на более стабильную тенденцию КАМА по сравнению с другими скользящими средними. Это улучшение по отношению к быстрым поворотам и ложным остановам.

KAMA также можно использовать для обнаружения начала новых тенденций. Например, мы можем построить долгосрочную КАМА с краткосрочной КАМА и торговать на их пересечениях. Если настройки по умолчанию - 10-периодные, мы можем попробовать 30-периодную КАМА и посмотреть, что она нам даст.

plt.plot(Asset1[-500:, 3], color = 'black', label = 'EURUSD')
plt.plot(Asset1[-500:, 4], color = 'blue', label = '10-period KAMA')
plt.plot(Asset1[-500:, 5], color = 'purple', label = '30-period KAMA')
plt.grid()
plt.legend()

Используя приведенный выше график, мы можем сказать, что, когда два КАМА находятся во флэте, рынок колеблется, и когда начинается тренд, мы должны следовать их соответствующему пересечению, например, когда 30-периодный КАМА выше 10-периодного КАМА, медвежий тренд продолжается, пока не произойдет пересечение. Это, в свою очередь, может стать для нас ценным сигналом. Если вас интересуют стратегии следования за трендом, вы можете ознакомиться со статьей ниже:



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

Заключение

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