Estrategia de trading con impulso de ruptura de tendencia ADX

ADX DMI MA ATR
Fecha de creación: 2024-11-28 15:44:59 Última modificación: 2024-11-28 15:44:59
Copiar: 0 Número de Visitas: 583
1
Seguir
1617
Seguidores

Estrategia de trading con impulso de ruptura de tendencia ADX

Descripción general

Se trata de una estrategia de trading cuantitativa basada en indicadores de tendencia promedio (ADX) y breakouts de precios. La estrategia se basa principalmente en la vigilancia de los valores de los indicadores de ADX para juzgar la fuerza de la tendencia del mercado y, en combinación con las señales de breakouts de precios, para capturar el movimiento del mercado. La estrategia se establece para operar dentro de un período de negociación específico y permite la gestión del riesgo a través de stop loss y un límite en el número de transacciones diarias.

Principio de estrategia

La lógica central de la estrategia incluye los siguientes elementos clave:

  1. Monitoreo del indicador ADX: se utiliza el indicador ADX para evaluar la fuerza de la tendencia del mercado, cuando el valor del ADX es inferior a 17.5 indica que el mercado puede estar a punto de formar una nueva tendencia.
  2. Determinación de la ruptura del precio: la estrategia sigue el precio de cierre más alto de los últimos 34 ciclos y activa una señal de negociación cuando el precio actual rompe el nivel de resistencia.
  3. Gestión de la hora de negociación: la estrategia se ejecuta solo en la hora de negociación designada (0730-1430) para evitar el riesgo de períodos de baja liquidez.
  4. Mecanismo de control de riesgos:
    • Establecimiento de un stop loss fijo en dólares para limitar las pérdidas por transacción
    • Limitarse a un máximo de 3 transacciones por hora
    • Cancelar automáticamente todas las posiciones al final de la sesión

Ventajas estratégicas

  1. Capacidad de captura de tendencias: La combinación de indicadores ADX y breakouts de precios permite identificar con eficacia las etapas iniciales de las tendencias del mercado.
  2. La gestión de riesgos es perfecta: incluye medidas de control de riesgos en varios niveles, como paradas fijas, límites en el número de operaciones y mecanismos de cierre automático.
  3. Alto grado de automatización: la lógica de la estrategia es clara, las transacciones están completamente automatizadas y no requieren intervención humana.
  4. Adaptabilidad: los parámetros se pueden ajustar según las diferentes condiciones del mercado, como el monto de la parada, el ciclo de retroceso, etc.

Riesgo estratégico

  1. Riesgo de breakout falso: en un mercado convulso puede haber breakouts falsos que causan pérdidas continuas.
  2. Dependencia de parámetros: la eficacia de la estrategia depende en gran medida de la configuración de los valores de límite ADX y el ciclo de retroceso.
  3. Limitación de horario: solo puede operar en un horario específico y perder oportunidades en otros horarios.
  4. Establecimiento de stop loss: el stop loss fijo en dólares puede no ser lo suficientemente flexible en diferentes entornos de fluctuación.

Dirección de optimización de la estrategia

  1. Detención dinámica: Se recomienda cambiar la detención fija en dólares por una detención dinámica basada en ATR para adaptarse a diferentes condiciones de fluctuación del mercado.
  2. Filtrado de entornos de mercado: Aumentar el filtro de volatilidad y ajustar o suspender la negociación en entornos de alta volatilidad.
  3. Optimización de entrada: se puede considerar aumentar la confirmación de la cantidad de transacciones y mejorar la fiabilidad de la señal de ruptura.
  4. Ajuste de parámetros dinámicos: mecanismo de ajuste adaptativo para lograr el umbral de ADX y el ciclo de retroceso.

Resumir

Se trata de una estrategia de seguimiento de tendencias estructurada y con claridad de lógica. Capturar oportunidades de tendencias en el mercado mediante la combinación de indicadores de ADX con brechas de precios en un marco de gestión de riesgos eficaz. Aunque hay algo de espacio para la optimización, el marco básico de la estrategia es sólido y adecuado para ser el componente básico de un sistema de comercio cuantitativo.

Código Fuente de la Estrategia
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © HuntGatherTrade
// ========================
// NQ 30 minute, ES 30 minute

//@version=5
strategy("ADX Breakout", overlay=false, initial_capital=25000, default_qty_value=1)

// ===============================
// Input parameters
// ===============================
stopLoss = input(1000.0, title="Stop Loss ($)", group="Exits")
session = input("0730-1430:1234567", group="Trade Session")
highestLB = input(34, title="Highest lookback window", group="Indicator values")

// ===============================
// Trade Session Handling
// ===============================
t = time(timeframe.period, session)

// Reset numTrades at the start of each session
var int numTrades = 0
is_new_session = ta.change(time("D")) != 0
if is_new_session
    numTrades := 0

// ===============================
// Entry Conditions
// ===============================
[plusDI, minusDI, adxValue] = ta.dmi(50, 14)
entryCondition = (close >= ta.highest(close, highestLB)[1]) and (adxValue < 17.5) and (strategy.position_size == 0) and (numTrades < 3) and not na(t)

// ===============================
// 7. Execute Entry
// ===============================
var float stopPricePlot = na

if entryCondition
    entryPrice = close + syminfo.mintick
    strategy.entry("Long Entry", strategy.long, stop=entryPrice)
    //stopPrice = strategy.position_avg_price - (stopLoss / syminfo.pointvalue)
    //strategy.exit("Stop Loss", "Long Entry", stop=stopPrice)
    numTrades += 1

if (strategy.position_size > 0) and (strategy.position_size[1] == 0)
    stopPoints = stopLoss / syminfo.pointvalue
    stopPrice = strategy.position_avg_price - stopPoints
    stopPrice := math.round(stopPrice / syminfo.mintick) * syminfo.mintick
    strategy.exit("Stop Loss", from_entry="Long Entry", stop=stopPrice)


if ta.change(strategy.opentrades) == 1
    float entryPrice = strategy.opentrades.entry_price(0)
    stopPricePlot := entryPrice - (stopLoss / syminfo.pointvalue)

if ta.change(strategy.closedtrades) == 1
    stopPricePlot   := na

plot(stopPricePlot, "Stop-loss level", color.red, 1, plot.style_linebr)

// ===============================
// Exit at End of Session
// ===============================
if na(t) and strategy.position_size != 0
    strategy.close_all(comment="End of Day Exit")