Estrategia del indicador de tendencia promedio dinámico ADX


Fecha de creación: 2024-01-15 15:32:45 Última modificación: 2024-01-15 15:32:45
Copiar: 0 Número de Visitas: 584
1
Seguir
1617
Seguidores

Estrategia del indicador de tendencia promedio dinámico ADX

Descripción general

La estrategia de indicadores de tendencia de media dinámica ADX es una estrategia de negociación cuantitativa que utiliza indicadores de ADX para determinar la fortaleza de la tendencia del mercado y la dirección de la tendencia. La estrategia determina si el mercado está en tendencia calculando el índice de dirección promedio ((ADX) y determina la dirección de la tendencia calculando el indicador positivo ((DI +) y el indicador negativo ((DI -)) para generar señales de compra y venta.

Principio de estrategia

La estrategia utiliza primero el indicador ADX para determinar si hay una tendencia en el mercado. Cuando el ADX está por encima del valor clave establecido por el usuario (el valor por defecto es 23), la tendencia del mercado es fuerte. Cuando el valor actual del ADX es superior al valor de n días antes del ADX (el número de días de retrospección establecido por el usuario para n, el valor por defecto es 3 días), el ADX está subiendo y la tendencia del mercado se está formando.

La estrategia utiliza el DI+ y el DI- para determinar la dirección de la tendencia del mercado. Cuando el DI+ es superior al DI-, el mercado está en tendencia alcista; cuando el DI+ es inferior al DI-, el mercado está en tendencia bajista.

Por último, la estrategia de comprobación de la situación de ADX y DI, para generar señales concretas de compra y venta:

  1. Cuando el ADX sube por encima del valor clave y el DI+ es superior al DI-, se produce una señal de compra
  2. Cuando el ADX sube por encima del valor crítico y el DI+ está por debajo del DI-, se produce una señal de venta
  3. Cuando el ADX cambia a la baja, produce una señal de equilibrio

La estrategia también ofrece funciones como filtros de medias móviles y rangos de tiempo de respuesta personalizados, que se pueden configurar según sea necesario.

Análisis de las ventajas

La estrategia del indicador de tendencia de media dinámica ADX tiene las siguientes ventajas:

  1. Puede determinar automáticamente si hay una tendencia en el mercado y evitar transacciones no válidas
  2. Puede determinar automáticamente la dirección de las tendencias del mercado y seguirlas
  3. Proporcionar una lógica clara para comprar cuando hay una tendencia / cerrar cuando la tendencia desaparece
  4. Se puede configurar el filtro de las medias móviles para evitar falsas rupturas
  5. Rango de tiempo de retroalimentación configurable para pruebas de historial
  6. Los indicadores y parámetros son ajustables y se pueden optimizar para diferentes variedades

Análisis de riesgos

La estrategia también tiene sus riesgos:

  1. El índice ADX está rezagado y podría haber perdido una oportunidad temprana en la tendencia
  2. La determinación de la pluralidad de espacios depende del indicador DI, el indicador DI es sensible y puede generar señales erróneas
  3. El filtro de las medias móviles puede haber perdido la oportunidad de la línea corta
  4. El rango de tiempo de detección incorrecto puede causar una sobreadaptación
  5. Los parámetros del indicador no se ajustan correctamente y pueden afectar la eficacia de la política

Para reducir el riesgo, se pueden considerar los siguientes puntos:

  1. Acortar adecuadamente los parámetros de ADX para reducir el retraso
  2. Ajuste o elimine el filtro DI para evitar señales erróneas
  3. Reducir adecuadamente el ciclo de la media móvil
  4. Ampliar el rango de tiempo de detección y realizar pruebas en toda la muestra
  5. Optimización de los parámetros del indicador para encontrar la mejor configuración

Dirección de optimización

La estrategia puede ser optimizada en los siguientes aspectos:

  1. Combinación de varias acciones para realizar pruebas de combinación y dispersar el riesgo de una sola acción
  2. Aumentar la lógica de stop loss para controlar las pérdidas individuales
  3. Verificación combinada con otros indicadores para mejorar la precisión de la señal
  4. Introducción de algoritmos de aprendizaje automático para determinar las señales de compra y venta
  5. Se añade un módulo de optimización automática de parámetros para realizar ajustes de parámetros dinámicos

Resumir

La estrategia de indicador de tendencia de la media dinámica ADX utiliza la existencia de tendencias en el ADX y la dirección de tendencias en el DI, para generar señales de negociación cuando la tendencia está presente. La estrategia es clara. La estrategia puede juzgar automáticamente la tendencia, seguir la tendencia y, en cierta medida, evitar las transacciones ineficaces en los mercados no tendencia.

Código Fuente de la Estrategia
/*backtest
start: 2024-01-07 00:00:00
end: 2024-01-14 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © millerrh with inspiration from @9e52f12edd034d28bdd5544e7ff92e 
//The intent behind this study is to look at ADX when it has an increasing slope and is above a user-defined key level (23 default). 
//This is to identify when it is trending.
//It then looks at the DMI levels.  If D+ is above D- and the ADX is sloping upwards and above the key level, it triggers a buy condition.  Opposite for short.
//Can use a user-defined moving average to filter long/short if desried.
// NOTE: THIS IS MEANT TO BE USED IN CONJUNCTION WITH MY "ATX TRIGGER" INDICATOR FOR VISUALIZATION. MAKE SURE SETTINGS ARE THE SAME FOR BOTH.

strategy("ADX | DMI Trend", overlay=true, initial_capital=10000, currency='USD', 
   default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.04)

// === BACKTEST RANGE ===
From_Year  = input(defval = 2019, title = "From Year")
From_Month = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
From_Day   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
To_Year    = input(defval = 9999, title = "To Year")
To_Month   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
To_Day     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
Start  = timestamp(From_Year, From_Month, From_Day, 00, 00)  // backtest start window
Finish = timestamp(To_Year, To_Month, To_Day, 23, 59)        // backtest finish window

// == INPUTS ==
// ADX Info
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Period")
keyLevel = input(23, title="Keylevel for ADX")
adxLookback = input(3, title="Lookback Period for Slope")

// == FILTERING ==
// Inputs
useMaFilter = input(title = "Use MA for Filtering?", type = input.bool, defval = true)
maType = input(defval="EMA", options=["EMA", "SMA"], title = "MA Type For Filtering")
maLength   = input(defval = 200, title = "MA Period for Filtering", minval = 1)

// Declare function to be able to swap out EMA/SMA
ma(maType, src, length) =>
    maType == "EMA" ? ema(src, length) : sma(src, length) //Ternary Operator (if maType equals EMA, then do ema calc, else do sma calc)
maFilter = ma(maType, close, maLength)
plot(maFilter, title = "Trend Filter MA", color = color.green, linewidth = 3, style = plot.style_line, transp = 50)

// Check to see if the useMaFilter check box is checked, this then inputs this conditional "maFilterCheck" variable into the strategy entry 
maFilterCheck = if useMaFilter == true
    maFilter
else
    close

// == USE BUILT-IN DMI FUNCTION TO DETERMINE ADX AND BULL/BEAR STRENGTH
[diplus, diminus, adx] = dmi(dilen, adxlen)

buySignal = (adx[0]-adx[adxLookback] > 0) and adx > keyLevel and diplus > diminus  and close >= maFilterCheck
// buySignalValue = valuewhen(buySignal, close, 0)
shortSignal = (adx[0]-adx[adxLookback] > 0) and adx > keyLevel and diplus < diminus  and close <= maFilterCheck
// shortSignalValue = valuewhen(shortSignal, close, 0)
sellCoverSignal = adx[0]-adx[adxLookback] < 0

// == ENTRY & EXIT CRITERIA
// Triggers to be TRUE for it to fire of the BUY Signal : (opposite for the SELL signal).
// (1): Price is over the 200 EMA line. (EMA level configurable by the user)
// (2): "D+" is OVER the "D-" line
// (3): RSI 7 is under 30 (for SELL, RSI 7 is over 70)
// 1* = The ultimate is to have a combination line of 3 EMA values, EMA 14, EMA 50 and EMA 200 - And if price is over this "combo" line, then it's a strong signal

// == STRATEGY ENTRIES/EXITS == 
strategy.entry("Long", strategy.long, when = buySignal)
strategy.close("Long", when = sellCoverSignal)
strategy.entry("Short", strategy.short, when = shortSignal)
strategy.close("Short", when = sellCoverSignal)
    
// == ALERTS == 
// alertcondition(buySignal, title='ADX Trigger Buy', message='ADX Trigger Buy')
// alertcondition(sellSignal, title='ADX Trigger Sell', message='ADX Trigger Sell')