Торговая стратегия ADX

ADX trading strategy in python

Что такое технический индикатор ADX?

ADX — индекс среднего направленного движения был создан Уэллсом Уайлдером в 1978 году. ADX — это трендовый технический индикатор, который может определить, является ли тренд, происходящий в настоящее время на рынке, сильным, и в каком направлении движется цена. Тренд может быть восходящим или нисходящим. Индикатор ADX построен из двух других составляющих — плюсового указателя поворота (+DI) и минусового указателя поворота (-DI).

Теория торговой стратегии ADX.

Торговая стратегия ADX основана на силе тренда, будь то вверх или вниз. Значения ADX находятся в диапазоне от 0 до 100, а более высокое значение ADX указывает на более сильный тренд.

ADX trading strategy rules

Если значение ADX выше 25, инвестор должен занять позицию на рынке, длинную или короткую. Чтобы узнать, какая позиция подходит, инвестор должен использовать указатель направления плюс (+DI) и указатель направления минус (-DI), которые были описаны ранее. Правила таковы:

  • ADX выше 25 и +DI cross -DI снизу — сигнал на покупку,
  • ADX выше 25 и -DI cross +DI снизу — сигнал на продажу,
  • ADX ниже 25 — сохраняйте нейтралитет

На графике показано, как работает торговая стратегия ADX.

Как рассчитать ADX?

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

Торговая стратегия ADX на Python — код и объяснение.

После краткого обзора теории, лежащей в основе технического индикатора ADX, теперь пришло время добавить функцию adx в Strategies.py скрипт и показать, как ее протестировать на данных, загруженных из XTB.

def adx(data , freq=30, window=14, down_level=25, plot_data={2:[('plus_di',None, 'green'),('minus_di',None,'red'),('adx','down_level', 'blue')]}):

        ''' Prepares the Data for Backtesting.
        '''
        df = data.copy()

        freq = f"{freq}min"

        df = df.resample(freq).agg({"Open": "first", "High": "max", "Low": "min", "Close": "last", "vol": "sum", 'spread':'mean','pips':'mean'}).dropna()

        df["returns"] = np.log(df['Close'] / df['Close'].shift(1))

        df['adx']=ta.ADX(df['High'],df['Low'], df['Close'], window)
        df['plus_di']=ta.PLUS_DI(df['High'],df['Low'], df['Close'], window)
        df['minus_di']=ta.MINUS_DI(df['High'],df['Low'], df['Close'], window)
       

        conditions=[ (df['plus_di']>df['minus_di']) & (df['adx']>down_level),
                     (df['minus_di']>df['plus_di']) & (df['adx']>down_level)]

        values=[1,-1]

        df['position']=np.select(conditions,values,0)

        df.dropna(inplace = True)


        return df

Код Python имеет ту же структуру, что и другая стратегия — SMA. Мы должны следовать этому соглашению, которое позволяет нам передавать стратегию как атрибут StrategyTesterXTB.py . В атрибутах появился down_level атрибут, т.е. уровень силы тренда ADXвыше которого совершаются сделки. Последний атрибут, plot_data, содержит подробную информацию о построении графика со сделками.

Attributes adx strategy

В словаре есть ключ, который указывает, строка диаграммы, где должны быть размещены линии. Значение — это массив с кортежами. На первой позиции в кортеже находится название столбца из столбца dataframe результата стратегии, далее идет граница, которую нужно нарисовать, если этого требует индикатор, а на последней позиции определяется цвет линии. Остальная часть кода содержит подготовку датафрейма с необходимыми индикаторами и применение правил, подходящих для торговой стратегии ADX.

Тестирование стратегии ADX.

Для тестирования стратегии на истории можно применить StrategyTesterXTB.py , которая сравнивает эффективность стратегии покупки и удержания, то есть бенчмарка, и стратегии ADX.

Как видите, чтобы протестировать стратегию, просто передайте adx как strategy_func в класс тестера. Теперь посмотрим на эффективность стратегии на графике.

ADX strategy performance

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

График с ценой и индикаторами, дайте нам ответ, где были совершены сделки. На графике вы можете увидеть новую позицию, которую можно занять — нейтральную. Согласно правилам стратегии, когда ADX опускается ниже 25, следует занимать нейтральную позицию.

Это объяснение того, как работает и как может быть реализовано в Python, торговой стратегии ADX. Но есть еще некоторые недостатки, я имею в виду диапазон данных, которые мы тестируем, и только одну метрику, используемую для проверки эффективности стратегии. В следующем посте я покажу, как расширить диапазон тестируемых данных.

Источник