Стратегия торговли ADX с перекрестным трендом

Автор:Чао Чжан, Дата: 2023-12-08 15:49:12
Тэги:

img

Обзор

Эта стратегия сочетает в себе индекс направленного движения (ADX), плюс индикатор направленного движения (DI +) и быстрые и медленные скользящие средние показатели для определения направления рынка и периода хранения.

Принципы

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

В частности, сигнал покупки будет запущен, когда будут выполнены следующие условия:

  1. Быстрая EMA выше медленной EMA
  2. Линия +DI пересекает линию ADX вверх
  3. Значение ADX ниже порогового значения 30

Сигнал продажи запускается при выполнении следующих условий:

  1. Значение ADX превышает пороговое значение 30
  2. Линия +DI пересекает линию ADX вниз

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

Преимущества

Стратегия сочетает в себе индикаторы DI, ADX и скользящих средних показателей для эффективного определения поворотов тенденций на рынке.

  1. Использование перекресток DI и ADX для точного определения пунктов входа и выхода
  2. Быстрая и медленная система фильтрации EMA для определения общей тенденции рынка, избегая плохих сделок
  3. Использование значений ADX для определения силы тренда, торговля только при слабом тренде, избегая ложных прорывов
  4. Включить механизм стоп-лосса для контроля риска снижения
  5. Строгие условия входа избегайте покупки верхних и продажи нижних частей
  6. Ясные правила выхода позволяют своевременно остановить потери и получить прибыль

Риски

Есть некоторые риски, которые следует учитывать при этой стратегии:

  1. Индикатор ADX имеет задерживающий эффект, может пропустить лучшее время для изменения цен
  2. При высокой волатильности рынка может возникнуть больше ложных сигналов
  3. Неправильные настройки быстрого и медленного EMA могут привести к отсутствию сделок или фильтрации действительных сигналов
  4. Уровень остановки потерь, установленный слишком широко, не обеспечивает эффективного контроля риска

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

Возможности для расширения

Есть возможность для дальнейшего совершенствования:

  1. Испытание ADX различных периодов длины для поиска оптимальных комбинаций
  2. Добавьте другие индикаторы, такие как RSI, Bollinger Bands для подтверждения сигнала
  3. Использование алгоритмов машинного обучения для автоматической оптимизации параметров и правил
  4. Динамическая корректировка уровней стоп-лосса для смягчения рисков поздней стадии
  5. Создание многофакторной модели оценки для повышения надежности критериев въезда и выезда

Заключение

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


/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mohanee

//@version=4
//ADX strategy
SmoothedTrueRange=0.00
SmoothedDirectionalMovementPlus=0.00
SmoothedDirectionalMovementMinus=0.00


strategy(title="ADX strategy", overlay=false,pyramiding=3, default_qty_type=strategy.fixed, default_qty_value=3,    initial_capital=10000, currency=currency.USD)

len = input(11, title="ADX Length", minval=1)
threshold = input(30, title="threshold", minval=5)

fastEma=input(13, title="Fast EMA",minval=1, maxval=50)
slowEma=input(55, title="Slow EMA",minval=10, maxval=200)
stopLoss =input(8, title="Stop Loss",minval=1)   //


TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0


SmoothedTrueRange:= nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange

SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus:= nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus

DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = sma(DX, len)

plot(DIPlus, color=color.green, title="DI+")
//plot(DIMinus, color=color.red, title="DI-")
plot(ADX, color=color.black, title="ADX")
hline(threshold, color=color.black, linestyle=hline.style_dashed)

fastEmaVal=ema(close,fastEma)
slowEmaVal=ema(close,slowEma)




//long condition
longCondition=  ADX < threshold  and crossover(DIPlus,ADX)  and fastEmaVal > slowEmaVal


barcolor(longCondition ? color.yellow: na)

strategy.entry(id="ADXLE", long=true,  when= longCondition  and strategy.position_size<1) 

barcolor(strategy.position_size>1 ? color.blue: na)
bgcolor(strategy.position_size>1 ? color.blue: na)



//Add
strategy.entry(id="ADXLE", comment="Add", long=true,  when= strategy.position_size>1 and close<strategy.position_avg_price and crossover(DIPlus,ADX) ) 


//calculate stop Loss
stopLossVal =  strategy.position_avg_price -  (strategy.position_avg_price*stopLoss*0.01)

strategy.close(id="ADXLE",comment="SL Exit",    when=close<stopLossVal)   //close all on stop loss


//exit condition
exitCondition=  ADX > threshold  and crossunder(DIPlus,ADX) // and fastEmaVal > slowEmaVal
strategy.close(id="ADXLE",comment="TPExitAll",    qty=strategy.position_size ,   when= exitCondition)   //close all     

Больше