Estrategia de tendencia adaptativa ATR-ADX V2


Fecha de creación: 2023-12-05 18:08:14 Última modificación: 2023-12-05 18:08:14
Copiar: 0 Número de Visitas: 1056
1
Seguir
1619
Seguidores

Estrategia de tendencia adaptativa ATR-ADX V2

Descripción general

La estrategia es una estrategia de seguimiento de tendencias que combina el indicador ATR y el indicador ADX. Se ajusta dinámicamente el múltiplo de ATR según el estado de tendencia del mercado, lo que permite un mejor seguimiento de tendencias.

Principio de estrategia

La estrategia se basa principalmente en los indicadores ATR y ADX.

En primer lugar, se calcula el rango de fluctuación real (ATR) y el ADX. El ATR refleja la volatilidad del mercado y el ADX determina la fuerza de la tendencia.

Luego, en función de la diferencia entre el indicador de orientación de la pluralidad de ADX y el indicador de orientación de la pluralidad de DX, juzgue el estado de pluralidad de la tendencia actual. Si DI+ es superior a DI-, es una tendencia de múltiples cabezas, y si DI- es superior a DI+, es una tendencia de cabezas vacías.

Luego, cuando el ADX sube, se usa un mayor múltiplo de ATR (m1) y cuando el ADX baja, se usa un menor múltiplo de ATR (m2) para lograr un ajuste dinámico. Este es el núcleo de la estrategia.

Por último, la mediana de la ATR y el precio se combinan para calcular la subida y bajada de la curva y determinar la dirección de la tendencia.

Por lo tanto, la estrategia combina el indicador ATR y el indicador ADX para poder capturar mejor las tendencias mediante el ajuste dinámico de los parámetros ATR.

Análisis de las ventajas

Esta estrategia tiene varias ventajas evidentes:

  1. Puede ajustar los parámetros dinámicamente para capturar mejor las tendencias
  2. La combinación de los indicadores ATR y ADX permite un juicio más amplio
  3. El retiro se espera que se controle hasta cierto punto.
  4. El proceso de implementación es simple y fácil de entender

Por lo tanto, es una estrategia de seguimiento de tendencias muy práctica, con una excelente capacidad de control de retroceso y es recomendable.

Análisis de riesgos

La estrategia también tiene sus riesgos:

  1. El ADX está rezagado y puede haber perdido el punto de inflexión de la tendencia
  2. El tamaño incorrecto del ATR puede causar una pérdida excesiva o una ganancia insuficiente
  3. El incidente provocó una rápida ruptura de las vías y causó daños.

Por lo tanto, se debe prestar atención a la optimización de parámetros y el control de riesgos. Además, los eventos de cisnes negros también pueden tener un gran impacto en la estrategia.

Dirección de optimización

La estrategia puede ser optimizada en las siguientes direcciones:

  1. Optimización de los parámetros de ATR y ADX para capturar mejor las tendencias
  2. Añadir confirmaciones de otros indicadores para evitar el atraso de ADX
  3. Construir un mecanismo dinámico de detención de pérdidas para controlar las pérdidas individuales
  4. Adaptar la gestión de posiciones y adoptar diferentes estrategias en diferentes entornos de mercado

Por lo tanto, la estrategia aún tiene mucho espacio para la optimización, y es muy necesario ajustar los parámetros y mecanismos para responder a los problemas.

Resumir

La estrategia de tendencias ATR-ADX de adaptación automática es excelente para V2 en general, ya que puede capturar tendencias de manera eficiente mediante el ajuste dinámico de los parámetros ATR; al mismo tiempo, la combinación de los dos indicadores de ATR y ADX es tolerante a errores. Pero también debemos prestar atención al control de riesgos y a la optimización de la estrategia para evitar el retraso y la expansión de las pérdidas.

Código Fuente de la Estrategia
/*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