Estrategia de tendencia basada en la ruptura del canal


Fecha de creación: 2023-09-15 12:02:10 Última modificación: 2023-09-15 12:02:10
Copiar: 0 Número de Visitas: 739
1
Seguir
1617
Seguidores

En este artículo se detalla una estrategia cuantitativa para el comercio de tendencias que utiliza una ruptura de canal. Esta estrategia identifica la dirección de la tendencia a través de la canal EMA, y el juicio de la banda de Brin se invierte para operar de manera inversa.

El principio de la estrategia

La estrategia incluye los siguientes elementos:

  1. Establecer un EMA de línea media y ampliar el canal ascendente y descendente según la proporción;

  2. Cuando el precio se rompe la línea de canal superior, hacer más seguimiento; cuando se rompe la línea de canal inferior, hacer seguimiento en blanco;

  3. Cuando el cordón de Brin se estrecha, se determina la reversión de la tendencia y se hace la operación inversa.

  4. La configuración de ATR para limitar el riesgo de pérdidas.

  5. Los parámetros del canal se pueden personalizar para encontrar la combinación óptima de parámetros.

La estrategia utiliza el canal EMA para determinar la dirección de las tendencias dominantes, y utiliza la banda de Brin para identificar oportunidades de reversión y formar un sistema de tendencias completo.

Dos, las ventajas estratégicas

La mayor ventaja de esta estrategia es que los indicadores se utilizan de manera razonable, la EMA juzga que es dominante y la banda de Brin captura la inversión.

Otra ventaja es que el Stop Loss es efectivo y permite controlar el riesgo.

Por último, los parámetros se pueden personalizar y optimizar para diferentes variedades.

Tercero, el riesgo potencial.

Pero la estrategia también tiene sus problemas:

En primer lugar, hay un retraso tanto en el EMA como en el indicador de la franja de Brin.

En segundo lugar, hay que considerar el riesgo de fracaso de la operación de reversión.

Finalmente, la optimización de parámetros requiere mucho trabajo para evitar la optimización excesiva.

Cuatro contenido, resumen

Este artículo detalla una estrategia para el comercio de tendencias que utiliza la ruptura del canal EMA. Esta estrategia puede identificar tendencias dominantes y hacer operaciones inversas en los puntos de inflexión. La estrategia puede obtener ganancias estables a través de la optimización de parámetros, pero también requiere problemas como la dificultad de la optimización y el retraso del indicador.

Código Fuente de la Estrategia
/*backtest
start: 2023-08-15 00:00:00
end: 2023-09-14 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="[mdeacey] EMA Percentage Channel + Bollinger Band Trending Strategy", shorttitle="[mdeacey] EMA% Channel + BB Trend Strategy", overlay=true)

//EMA 200

len = input(title="EMA Length", type=input.integer, defval=100)
srce = input(title="EMA Source", type=input.source, defval=close)

ema1= ema(srce,len)

percent = input(title="Inside Channel (%)", type=input.float, defval= 1) 
valuee = (percent*ema1)/100
upperbande = ema1 + valuee
lowerbande = ema1 - valuee
///2
percent2 = input(title="Outside Channel (%)", type=input.float, defval= 2) 
valuee2 = (percent2*ema1)/100
upperbande2 = ema1 + valuee2
lowerbande2 = ema1 - valuee2

plot(upperbande, title='Inside Channel Upperband', color=color.black, linewidth=1, style=plot.style_line )
plot(lowerbande, title='Inside Channel Lowerband', color=color.black, linewidth=1, style=plot.style_line )
plot(upperbande2, title='Outside Channel Upperband', color=color.black, linewidth=1, style=plot.style_line )
plot(lowerbande2, title='Outside Channel Lowerband', color=color.black, linewidth=1, style=plot.style_line )

length = input(20, minval=2)
src = input(close, title="Close price")
mult = input(2.0, title="Multiplier", minval=0.001, maxval=50)

MA2 = sma(src, length)
dev = mult * stdev(src, length)
upper = MA2 + dev
lower = MA2 - dev

signalColor = crossunder(close, upper) ? color.red : crossover(close, lower) ? color.green : color.white

barcolor(color=signalColor)
nopo= strategy.position_size==0

upperBand = plot(upper, title='Upper Bollinger Band', color=color.gray, linewidth=1)
lowerBand = plot(lower, title='Lower Bollinger Band', color=color.gray, linewidth=1)
fill(upperBand, lowerBand, title='Bollinger Band', color=color.black)
strategy.entry("Long",true,when = crossover(close,lower)  and close <lowerbande and close>lowerbande2)
strategy.close("Long",when = crossunder(close,lowerbande2))//crossunder(close,lowerbande) or crossunder(close,lowerbande2))

strategy.entry("Short",false,when = crossunder(close,upper)  and close >upperbande and close<upperbande2)
strategy.close("Short",when = crossover(close,upperbande2) )//crossover(close,upperbande) or crossover(close,upperbande2) )

//Inputs
atrPeriod = input(defval=14, title="ATR Period",group='ATR Stoploss', type=input.integer) // Adjust this to change the ATR calculation length
multiplierPeriod = input(defval=1.75, title="ATR Multiplier",group='ATR Stoploss',  type=input.float)// Adjust this to change the distance between your candles and the line

//ATR Calculation
pine_rma(x, y) =>
    alpha = y
    sum = 0.0
    sum := (x + (alpha - 1) * nz(sum[1])) / alpha

true_range() =>
    max(high - low, max(abs(high - close[1]), abs(low - close[1])))

//Long SL
plot(low - pine_rma(true_range() * multiplierPeriod, atrPeriod), "Long Stop", color=color.red, offset = 1)
// Short SL
plot(high +pine_rma(true_range() * multiplierPeriod, atrPeriod), "Short Stop", color=color.red, offset = 1)
strategy.exit("Exit","Long",limit=upper ,stop = low - pine_rma(true_range() * multiplierPeriod, atrPeriod)  )
strategy.exit("Exit","Short",limit=lower ,stop =high +pine_rma(true_range() * multiplierPeriod, atrPeriod)  )

/////////////////////new strategy
strategy.entry("Long",true,stop =upperbande  ,when = close <upperbande and  close[1] <upperbande and nopo )
strategy.close("Long",when = crossunder(close,upper) )//  and close <upperbande and close>lowerbande)

strategy.entry("Short",false,stop =lowerbande  ,when = close >lowerbande and close[1] >lowerbande and nopo )
strategy.close("Short",when = crossover(close, lower) )

strategy.exit("Exit","Long",stop = low - pine_rma(true_range() * multiplierPeriod, atrPeriod)  )
strategy.exit("Exit","Short",stop =high +pine_rma(true_range() * multiplierPeriod, atrPeriod)  )