Адаптивная стратегия тренда ATR-ADX V2

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

img

Обзор

Это стратегия, которая сочетает в себе индикатор ATR и индикатор ADX. Она динамически регулирует мультипликатор ATR в соответствии с условиями тренда на рынке для достижения лучшего отслеживания тренда.

Логика стратегии

Стратегия основана в основном на индикаторе ATR и ADX.

Во-первых, он рассчитывает истинный диапазон (ATR) и ADX. ATR отражает волатильность рынка, а ADX оценивает силу тренда.

Во-вторых, он определяет текущее направление тренда в соответствии с разницей между DI + и DI- в индикаторе ADX. Если DI + выше DI-, это восходящий тренд. Если DI- выше DI+, это нисходящий тренд.

Затем, когда ADX растет, он использует более большой ATR-множитель (m1).

Наконец, в сочетании с ATR и средней точкой цены, он рассчитывает верхние и нижние диапазоны, чтобы определить направление тренда.

Таким образом, стратегия включает в себя ATR и ADX, и динамически регулируя параметры ATR, она может лучше улавливать тенденции для торговли.

Анализ преимуществ

Стратегия имеет несколько очевидных преимуществ:

  1. Способность динамически регулировать параметры для лучшего определения тренда
  2. Комбинирует ATR и ADX для более полного суждения
  3. Ожидает контролируемых сборов
  4. Простая реализация и легко понятная

Поэтому, это очень практичная тенденция, следуя стратегии с хорошим контролем сбора.

Анализ рисков

Стратегия также сопряжена с некоторыми рисками:

  1. ADX имеет отстающие вопросы, может пропустить точки переворота тренда
  2. Неправильный выбор размера ATR может привести к недостаточной прибыли или чрезмерному размеру стоп-лосса
  3. Быстрый прорыв против групп, вызванный событиями черного лебедя, может привести к потерям.

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

Руководство по оптимизации

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

  1. Оптимизировать параметры ATR и ADX для лучшего определения тренда
  2. Добавить другие индикаторы для подтверждения, чтобы избежать проблем с отставанием ADX
  3. Создать динамические механизмы остановки потерь для контроля потерь на одной сделке
  4. Корректировка размеров позиций для различных рыночных условий

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

Заключение

В целом, Adaptive ATR-ADX Trend Strategy V2 работает очень хорошо. Динамически регулируя параметры ATR, он прекрасно улавливает тенденции. Кроме того, объединение двух индикаторов в ATR и ADX делает его более надежным. Но нам все еще нужно обратить внимание на контроль рисков и оптимизацию, чтобы предотвратить отставание и чрезмерные потери. В целом, стратегия стоит того, чтобы ее изучить и применить.


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

//@version=2
// From mortdiggiddy's indicator to strategy
// See also: https://www.tradingview.com/u/mortdiggiddy/

strategy(title = "Adaptive ATR-ADX Trend V2", shorttitle = "Adaptive ATR V2 Strategy", overlay = true)

//Mode
src = input(title = "Source",  defval = hlc3)
atrLen = input(title = "ATR",  defval = 21, minval = 1, maxval = 100)
m1 = input(title = "ATR Multiplier - ADX Rising", type = float, defval = 3.5, minval = 1, step = 0.1, maxval = 100)
m2 = input(title = "ATR Multiplier - ADX Falling", type = float, defval = 1.75, minval = 1, step = 0.1, maxval = 100)

adxLen = input(title = "ADX",  defval = 14, minval = 1, maxval = 100)
adxThresh = input(title = "ADX Threshold",  defval = 30, minval = 1)
aboveThresh = input(true, title = "ADX Above Threshold uses ATR Falling Multiplier Even if Rising?")
useHeiken = input(false, title = "Use Heiken-Ashi Bars (Source will be ohlc4)")
    
// DI-Pos, DI-Neg, ADX

hR = change(high)
lR = -change(low)

dmPos = hR > lR ? max(hR, 0) : 0
dmNeg = lR > hR ? max(lR, 0) : 0

sTR = nz(sTR[1]) - nz(sTR[1]) / adxLen + tr
sDMPos = nz(sDMPos[1]) - nz(sDMPos[1]) / adxLen + dmPos
sDMNeg = nz(sDMNeg[1]) - nz(sDMNeg[1]) / adxLen + dmNeg

DIP = sDMPos / sTR * 100
DIN = sDMNeg / sTR * 100
DX = abs(DIP - DIN) / (DIP + DIN) * 100
adx = sma(DX, adxLen)

// Heiken-Ashi

xClose = ohlc4
xOpen = (nz(xOpen[1]) + nz(close[1])) / 2
xHigh = max(high, max(xOpen, xClose))
xLow = min(low, min(xOpen, xClose))

// Trailing ATR

v1 = abs(xHigh - xClose[1])
v2 = abs(xLow - xClose[1])
v3 = xHigh - xLow

trueRange = max(v1, max(v2, v3))
atr = useHeiken ? rma(trueRange, atrLen) : atr(atrLen)

m = rising(adx, 1) and (adx < adxThresh or not aboveThresh) ? m1 : falling(adx, 1) or (adx > adxThresh and aboveThresh) ? m2 : nz(m[1])
mUp = DIP >= DIN ? m : m2
mDn = DIN >= DIP ? m : m2

src_ = useHeiken ? xClose : src
c = useHeiken ? xClose : close
t = useHeiken ? (xHigh + xLow) / 2 : hl2

up = t - mUp * atr
dn = t + mDn * atr

TUp = max(src_[1], c[1]) > TUp[1] ? max(up, TUp[1]) : up
TDown = min(src_[1], c[1]) < TDown[1] ? min(dn, TDown[1]) : dn

trend = min(src_, min(c, close)) > TDown[1] ? 1 : max(src_, max(c, close)) < TUp[1]? -1 : nz(trend[1], 1)
stop = trend == 1 ? TUp : TDown
trendChange = change(trend)

longCondition = (trendChange > 0)
if (longCondition)
    strategy.entry("long", strategy.long)
shortCondition = (trendChange < 0)
if (shortCondition)
    strategy.entry("short", strategy.short)    
    
// Plot

lineColor = not(trendChange) ? trend > 0 ? #00FF00DD : #FF0000DD : #00000000
shapeColor = trendChange ? trendChange > 0 ? #00FF00F8 : #FF0000F8 : #00000000

plot(stop, color = lineColor, style = line, linewidth = 1, title = "ATR Trend")
plotshape(trendChange ? stop : na, style = shape.circle, size = size.tiny, location = location.absolute, color = shapeColor, title = "Change")

alertcondition(trendChange > 0, title = "ATR-ADX Change Up", message = "ATR-ADX Change Up")
alertcondition(trendChange < 0, title = "ATR-ADX Change Down", message = "ATR-ADX Change Down")

// end

Больше