Создание индикатора TRIX на Python.

Знаменитый технический индикатор TRIX часто упоминается опытными и начинающими трейдерами. Он принадлежит к семейству индикаторов Momentum. TRIX расшифровывается как Triple Exponential Moving Average и представляет собой простой индикатор, который можно легко закодировать и протестировать на исторических данных. В этой статье мы представим и закодируем его.

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



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

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

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

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

def adder(Data, times):
    
    for i in range(1, times + 1):
    
        new = np.zeros((len(Data), 1), dtype = float)
        Data = np.append(Data, new, axis = 1)   
    return Data
def deleter(Data, index, times):
    
    for i in range(1, times + 1):
    
        Data = np.delete(Data, index, axis = 1)    
    return Data
   
def jump(Data, jump):
    
    Data = Data[jump:, ]
    
    return Data
def ma(Data, lookback, close, where): 
    
    Data = adder(Data, 1)
    
    for i in range(len(Data)):
           
     try:
       Data[i, where] = (Data[i - lookback + 1:i + 1, close].mean())
            
            except IndexError:
                pass
    
    return Data

Ниже указано, что функция скользящего среднего будет вызываться в массиве с именем my_data для периода ретроспективного анализа 200, в столбце с индексом 3 (цены закрытия в массиве OHLC). Затем значения скользящего среднего будут помещены в столбец с индексом 4, который мы добавили с помощью функции сумматора.

my_data = ma(my_data, 200, 3, 4)

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

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

def ema(Data, alpha, lookback, what, where):
    
    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

Теперь, когда мы разобрались с экспоненциальной скользящей средней, перейдем к индикатору TRIX.

Если вы хотите поддержать меня и статьи, которые я регулярно публикую, рассмотрите возможность подписки на мой информационный бюллетень (доступен бесплатный план) по приведенной ниже ссылке. Это поможет мне продолжать делиться своими исследованиями. Спасибо!



Индикатор TRIX

TRIX - это индикатор импульса, похожий на его аналоги MACD и индикатор моментума. Он состоит из набора экспоненциальных скользящих средних. Индикатор TRIX, разработанный Джеком Хатсоном, можно считать плавной версией MACD.

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

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

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

def trix(Data, lookback, what, where):
    
    # First EMA
    Data = ema(Data, 2, lookback, what, where)
    Data = jump(Data, lookback)
    
    # Second EMA
    Data = ema(Data, 2, lookback, where, where + 1)
    Data = jump(Data, lookback)
       
    # Third EMA
    Data = ema(Data, 2, lookback, where + 1, where + 2)  
    Data = jump(Data, lookback)
    
    # TRIX
    for i in range(len(Data)):
        
        Data[i, where + 3] = (Data[i, where + 2] / Data[i - 1, where + 2]) - 1
   
    Data = deleter(Data, where, 3)
   
    return Data

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



Использование индикатора TRIX

Индикатор TRIX можно использовать так же, как мы используем MACD. Это означает, что уже можно установить две основные стратегии:

  • Стратегия пересечения: всякий раз, когда TRIX переключается с отрицательного на положительный, это может быть сигналом о том, что тренд меняется с медвежьего на бычий, а всякий раз, когда TRIX переключается с положительного на отрицательный, это может быть сигналом о том, что тенденция меняется с бычьей на медвежью.
  • Стратегия дивергенции: всякий раз, когда индикатор достигает более высоких минимумов, в то время как рыночная цена делает более низкие минимумы, можно обнаружить бычью дивергенцию, которая обычно сигнализирует о том, что тренд может переключаться с медвежьего на бычий и всякий раз, когда Индикатор делает более низкие максимумы, в то время как рыночная цена делает более высокие максимумы, может быть обнаружено медвежье расхождение, и это обычно сигнализирует о том, что тренд может переключаться с бычьего на медвежий.

Давайте быстро посмотрим, как кодировать условия кроссовера.

crossover = 0
def signal(Data, what, buy, sell):
    
  for i in range(len(Data)):
            
    if Data[i, what] > crossover and Data[i - 1, what] < crossover:
       Data[i, buy] = 1
            
    if Data[i, what] < crossover and Data[i - 1, what] > crossover:
       Data[i, sell] = -1

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

Вывод

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

Я твердо убежден, что нельзя кормить с ложечки. Я научился на практике, а не копируя. Вы должны понять идею, функцию, интуицию, условия стратегии, а затем разработать (даже лучше) одну из них самостоятельно, чтобы вы протестировали и улучшили ее, прежде чем принимать решение о том, чтобы воплотить ее в жизнь или отказаться от нее. Мой выбор в пользу отказа от предоставления конкретных результатов тестирования на истории должен побудить читателя лучше изучить стратегию и больше работать над ней.

Подводя итог, можно ли сказать, что стратегии, которые я предлагаю, реалистичны? Да, но только путем оптимизации среды (надежный алгоритм, низкие затраты, честный брокер, надлежащее управление рисками и управление заказами). Предусмотрены ли стратегии исключительно для торговли? Нет, это нужно для стимулирования мозгового штурма и получения новых торговых идей, поскольку мы все устали слышать о перепроданности RSI как о причине для открытия короткой позиции или о преодолении сопротивления как о причине идти долго. Я пытаюсь представить новую область под названием «Объективный технический анализ», в которой мы используем достоверные данные для оценки наших методов, а не полагаемся на устаревшие классические методы.