Estrategia de trading con ruptura de impulso


Fecha de creación: 2023-12-19 15:46:38 Última modificación: 2023-12-19 15:46:38
Copiar: 2 Número de Visitas: 573
1
Seguir
1621
Seguidores

Estrategia de trading con ruptura de impulso

Descripción general

La estrategia Momentum Breakout Trading es una estrategia de seguimiento de tendencias que genera una señal de negociación mediante la detección de la ruptura del precio de los puntos de resistencia de soporte clave. La estrategia utiliza la dinámica del indicador Donchian Channel para determinar los puntos de resistencia de soporte clave y, en combinación con el indicador de medias móviles, filtra las señales para evitar operaciones erróneas.

Principio de estrategia

El indicador central de esta estrategia es el Canal Donchian. El Canal Donchian está formado por precios máximos, mínimos y medianos. Las líneas de la vía superior y la vía inferior conectan los precios máximos y mínimos respectivamente en un período determinado.

Las medias móviles se utilizan para determinar la dirección de la tendencia de los precios. La señal de compra de la ruptura de la vía de subida se adopta solo cuando el precio está por encima de la media móvil, lo que evita la compra en la zona de reajuste.

Concretamente, la entrada en la estrategia está condicionada a que el precio rompa la vía ascendente del Canal Donchian y el precio de cierre sea superior a la media móvil. La salida es condicionada a que el precio rompa la vía descendente del Canal Donchian.

El método de parada de pérdidas es el seguimiento de la baja del canal Donchian, lo que garantiza que el punto de parada suba con la tendencia.

Análisis de las ventajas

La estrategia combina dos indicadores para determinar la dirección y la intensidad de la tendencia, lo que permite identificar con eficacia las señales de ruptura y evitar el error de negociación. Al mismo tiempo, el método de stop loss es razonable, lo que permite a la estrategia seguir adecuadamente la tendencia para obtener ganancias.

En concreto, la estrategia tiene las siguientes ventajas:

  1. El indicador del Canal Donchian puede determinar dinámicamente los puntos de resistencia de soporte clave y identificar los puntos de inflexión clave de la tendencia.

  2. El indicador de la media móvil sirve como filtro para evitar compras en zonas de compensación y reducir las transacciones no válidas.

  3. El método de parada de pérdidas es seguir la línea descendente del Canal Donchian, lo que permite un máximo de ganancias de la tendencia.

  4. La configuración de los parámetros de la estrategia es razonablemente flexible y se puede ajustar y optimizar para diferentes entornos de mercado.

Análisis de riesgos

La estrategia enfrenta los siguientes riesgos:

  1. Riesgo de fracaso de la ruptura. El precio puede retroceder rápidamente después de la ruptura del canal y no se puede establecer una posición efectiva.

  2. Riesgo de reversión de la tendencia. El mercado puede revertirse antes del punto de parada, lo que lleva a la salida de la parada.

  3. Riesgo de optimización de parámetros. La configuración inadecuada de los parámetros puede causar frecuencias de operaciones o falta de señales.

Para estos riesgos, se puede optimizar mediante el ajuste del ciclo de las medias móviles, el aumento de la filtración de la transacción, etc., para garantizar que la señal generada sea más confiable. Al mismo tiempo, se deben ajustar algunas de las configuraciones de Stop Loss Loose adecuadas para hacer frente al riesgo de ajustes a corto plazo.

Dirección de optimización

La estrategia puede ser optimizada en los siguientes aspectos:

  1. El uso de indicadores de tráfico para filtrar las señales, asegurando que la brecha sea fuerte.

  2. Optimización de los parámetros del ciclo de las medias móviles para que se ajusten mejor a las características de las diferentes variedades.

  3. Ajuste el mecanismo de detención de pérdidas para que la distancia de detención se adapte a las fluctuaciones de la situación.

  4. Se ha añadido un mecanismo de reingreso que permite la captura de oportunidades de tendencia después de la suspensión de las salidas.

  5. Retroalimentación de varias variedades, verificación de la robustez de los parámetros. Ajuste los parámetros según las características de las diferentes variedades.

Resumir

La estrategia de ruptura dinámica integra varios indicadores para determinar la dirección y la intensidad de la tendencia, lo que resuelve el problema de la construcción de posiciones ciegas de los sistemas de tendencia comunes. La configuración de los parámetros de la estrategia es flexible y se puede ajustar de manera óptima para diferentes entornos y variedades de operaciones.

Código Fuente de la Estrategia
/*backtest
start: 2022-12-12 00:00:00
end: 2023-12-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

// Revision:        1
// Author:          @millerrh
// Strategy:  
//      Entry: Buy when Donchian Channel breaks out
//      Exit: Trail a stop with the lower Donchian Channel band
// Conditions/Variables:
//    1. Can add a filter to only take setups that are above a user-defined moving average (helps avoid trading counter trend) 
//    2. Manually configure which dates to back test
//    3. User-Configurable DC Channel length


// === CALL STRATEGY/STUDY, PROGRAMATICALLY ENTER STRATEGY PARAMETERS HERE SO YOU DON'T HAVE TO CHANGE THEM EVERY TIME YOU RUN A TEST ===
// (STRATEGY ONLY) - Comment out srategy() when in a study() 
strategy("Donchian Breakout", 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.1)
// (STUDY ONLY) - Comment out study() when in a strategy() 
//study("Donchian Breakout", overlay=true)


// === 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 ==
trigInput = input(title = "Execute Trades On...", defval = "Wick", options=["Wick","Close"]) // Useful for comparing standing stop orders vs. waiting for candle closes prior to action
stopTrail = input(title = "Trail Stops On...", defval = "ATR", options = ["ATR","Bottom of DC Channel","Midline of DC Channel","Tightest of ATR/Bot DC Channel"])
dcPeriod = input(title="DC period", type=input.integer, defval=20)

// === PLOT THE DONCHIAN CHANNEL ===
// Logic
dcUpper = highest(high, dcPeriod)
dcLower = lowest(low, dcPeriod)
dcMid = avg(dcUpper, dcLower)

// Plotting
dcUplot = plot(dcUpper, color=color.blue, linewidth=1, title="Upper Channel Line")
dcLplot = plot(dcLower, color=color.blue, linewidth=1, title="Lower Channel Line")
dcMidPlot = plot(dcMid, color=color.gray, linewidth=1, title="Mid-Line Average")
fill(dcUplot, dcLplot, color=color.gray, transp=90)

// == FILTERING ==
// Inputs
useMaFilter = input(title = "Use MA for Filtering?", type = input.bool, defval = true)
maType = input(defval="SMA", options=["EMA", "SMA"], title = "MA Type For Filtering")
maLength   = input(defval = 100, 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
    0

// == ENTRY AND EXIT CRITERIA ==
// Trigger stop based on candle close or High/Low (i.e. Wick) - If doing daily timeframe, can do candle close.  Intraday should use wick.
trigResistance = trigInput == "Close" ? close : trigInput == "Wick" ? high : na
trigSupport = trigInput == "Close" ? close : trigInput == "Wick" ? low : na
buySignal = trigResistance >= dcUpper[1] // The [1] looks at the previous bar's value as it didn't seem to be triggering correctly without it (likely) DC moves with each bar
sellSignal = trigSupport <= dcLower[1]

buy = buySignal and dcUpper[1] > maFilterCheck // All these conditions need to be met to buy


// (STRATEGY ONLY) Comment out for Study
// This string of code enters and exits at the close
if (trigInput == "Close")
    strategy.entry("Long", strategy.long, when = buy)
    strategy.close("Long", when = sellSignal)

// This string of code enters and exits at the wick (i.e. with pre-set stops)
if (trigInput == "Wick")
    strategy.entry("Long", strategy.long, stop = dcUpper[1], when = time > Start and time < Finish and dcUpper[1] > maFilterCheck)
    strategy.exit("Exit Long", from_entry = "Long", stop = dcLower[1])