Estrategia de seguimiento de tendencias de múltiples indicadores de momentum: canal de Donchian + súper tendencia + sistema de construcción de posiciones con filtro de volumen

DC ST MA VOL BO
Fecha de creación: 2025-02-21 11:47:17 Última modificación: 2025-02-21 11:47:17
Copiar: 0 Número de Visitas: 564
2
Seguir
319
Seguidores

Estrategia de seguimiento de tendencias de múltiples indicadores de momentum: canal de Donchian + súper tendencia + sistema de construcción de posiciones con filtro de volumen Estrategia de seguimiento de tendencias de múltiples indicadores de momentum: canal de Donchian + súper tendencia + sistema de construcción de posiciones con filtro de volumen

Descripción general

La estrategia es un sistema de trading de seguimiento de tendencias basado en la ruptura del canal Donchian, que combina un indicador de tendencia super (SuperTrend) y un filtro de volumen de transacción para aumentar la fiabilidad de la señal de negociación. La estrategia identifica oportunidades de negociación potenciales de múltiples direcciones capturando los máximos históricos de los precios, mientras que utiliza la confirmación de volumen de transacción y el indicador de seguimiento de tendencias para filtrar las falsas señales de ruptura.

Principio de estrategia

La lógica central de la estrategia se basa en los siguientes componentes clave:

  1. El canal de Dongjian: calcula los precios máximos y mínimos dentro de un ciclo definido por el usuario, formando trayectorias altas, bajas y medias. Cuando el precio se rompe en altas, se activa una señal de entrada múltiple.
  2. Filtrador de transacciones: mejora la fiabilidad de las rupturas al comparar el volumen de transacciones actual con una media móvil de 20 ciclos, asegurando que solo se ingrese cuando el volumen de transacciones aumenta.
  3. Indicador de tendencia súper: como herramienta de confirmación de tendencias, muestra verde cuando hay tendencias de más de una cabeza y rojo cuando hay tendencias en blanco.
  4. Mecanismo de pérdida flexible: ofrece cuatro opciones de pérdida diferentes, incluyendo pérdidas de baja vía, pérdidas de media vía, pérdidas de supertrend y pérdidas de seguimiento porcentual.

Ventajas estratégicas

  1. Confirmación de múltiples señales: Combinación de brechas de precios, confirmación de volúmenes de transacción y indicadores de tendencias para reducir considerablemente el riesgo de falsas brechas.
  2. Adaptabilidad: Se puede adaptar a diferentes entornos de mercado y ciclos de negociación mediante ajustes de parámetros.
  3. La gestión de riesgos es perfecta: ofrece varias opciones de pérdidas, que se pueden elegir de acuerdo con las características del mercado.
  4. Visualización clara: la interfaz de estrategia muestra los indicadores de manera intuitiva para que los operadores puedan comprender el estado del mercado.
  5. Flexibilidad en el retorno: permite un rango de tiempo de retorno personalizado para facilitar la optimización de la estrategia.

Riesgo estratégico

  1. Riesgo de mercado de temblores: puede generar falsas brechas frecuentes en situaciones de temblores intermitentes.
  2. Riesgo de deslizamiento: en mercados con poca liquidez, las señales de ruptura pueden desviarse del precio de entrada debido al deslizamiento.
  3. Riesgo de exceso de filtración: El uso de filtros de volumen de transacción puede hacer que se pierdan algunas oportunidades de negociación efectivas.
  4. Sensibilidad de los parámetros: el efecto de la estrategia es sensible a la configuración de los parámetros y requiere una optimización cuidadosa.

Dirección de optimización de la estrategia

  1. Aumentar el filtro de intensidad de tendencia: se puede agregar un indicador de intensidad de tendencia como ADX, que solo entra en juego cuando la tendencia es fuerte.
  2. Optimización de los indicadores de tráfico: se puede considerar el uso de un indicador de tráfico relativo o un indicador de tráfico de ruptura en lugar de una media móvil simple.
  3. Añadir filtro de tiempo: añadir la configuración de la ventana de tiempo de negociación para evitar los momentos de mayor volatilidad del mercado.
  4. Optimización de parámetros dinámicos: ajuste automático de los ciclos de canal y los parámetros de supertrend en función de la volatilidad del mercado.
  5. Introducción al aprendizaje automático: optimización de la selección de parámetros y filtración de señales con algoritmos de aprendizaje automático.

Resumir

La estrategia utiliza varios indicadores técnicos para construir un sistema de seguimiento de tendencias relativamente completo. La estrategia tiene la ventaja de una alta fiabilidad de la señal y la flexibilidad para administrar el riesgo, pero aún requiere que el comerciante optimice los parámetros de acuerdo con las características específicas del mercado.

Código Fuente de la Estrategia
/*backtest
start: 2024-10-01 00:00:00
end: 2025-02-19 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

// Breakout trading system based on Donchain channel strategy that works best on a weekly chart and daily charts. Weekly is preferred. 

//@version=5

strategy('Donchian BO with Volume Filter and Supertrend', shorttitle='DBO+Vol+ST', default_qty_type=strategy.percent_of_equity, default_qty_value=2, overlay=true)

// Input options to configure backtest date range
startDate = input.int(title='Start Date', defval=1, minval=1, maxval=31)
startMonth = input.int(title='Start Month', defval=1, minval=1, maxval=12)
startYear = input.int(title='Start Year', defval=2016, minval=1800, maxval=2100)
avgVol = input.int(title="Avg Volume length", defval=20)
srcInput = input.source(close, "Source")

// Volume filter toggle
useVolumeFilter = input.bool(true, title='Enable Volume Filter')

endDate = input.int(title='End Date', defval=1, minval=1, maxval=31)
endMonth = input.int(title='End Month', defval=7, minval=1, maxval=12)
endYear = input.int(title='End Year', defval=2030, minval=1800, maxval=2100)

multiplier = input.int(title='SuperTrend Mult', defval=2, minval=1, maxval=12)
stlen = input.int(title='SuperTrend Length', defval=10, minval=1, maxval=12)

length = input.int(21, minval=1)
exit = input.int(3, minval=1, maxval=4, title='Exit Option')  // Use Option 1 to exit using lower band; Use Option 2 to exit using basis line

lower = ta.lowest(length)
upper = ta.highest(length)
basis = math.avg(upper, lower)

// Plotting the Donchian channel
l = plot(lower, color=color.new(color.blue, 0))
u = plot(upper, color=color.new(color.blue, 0))
plot(basis, color=color.new(color.orange, 0))
fill(u, l, color=color.new(color.blue, 90))

// Check if the current bar is in the date range
inDateRange = time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0) and time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0)

// Long trailing stop-loss percentage
longTrailPerc = input.float(title='Trail Long Loss (%)', minval=0.0, step=0.1, defval=3) * 0.01
longStopPrice = 0.0

longStopPrice := if strategy.position_size > 0
    stopValue = close * (1 - longTrailPerc)
    math.max(stopValue, longStopPrice[1])
else
    0

// Volume filter: 20-period moving average
volumeMA = ta.sma(volume, avgVol)

// Long entry condition: Donchian breakout + volume filter
longCondition = ta.crossover(srcInput, upper[1]) and (not useVolumeFilter or volume > volumeMA)
longsma = ta.sma(close, 200)

if inDateRange and longCondition
    strategy.entry('Long', strategy.long)

// Exit conditions
if inDateRange and exit == 1
    if ta.crossunder(close, lower[1])
        strategy.close('Long')

if inDateRange and exit == 2
    if ta.crossunder(close, basis[1])
        strategy.close('Long')

[superTrend, dir] = ta.supertrend(multiplier, stlen)
if inDateRange and exit == 3
    if ta.crossunder(close, superTrend)
        strategy.close('Long')

if inDateRange and exit == 4
    if strategy.position_size > 0
        strategy.exit(id='XL TRL STP', stop=longStopPrice)

// Short conditions (commented out for now)
shortCondition = ta.crossunder(close, lower[1])

// Exit all positions when date range ends
if not inDateRange
    strategy.close_all()

// --- Add Supertrend Indicator ---
stColor = dir == 1 ? color.red : color.green
plot(superTrend, color=stColor, title="SuperTrend", linewidth=2)