Estrategia del sistema de inversión de oscilaciones de la EMA

El autor:¿ Qué pasa?, Fecha: 2023-10-18 12:23:13
Las etiquetas:

img

Resumen general

Esta estrategia utiliza un sistema de media móvil para determinar la dirección de la tendencia y combina el índice de volatilidad para evitar los mercados oscilantes de baja volatilidad, con salida de lámpara de araña para gestionar las operaciones.

Principio

La estrategia juzga la dirección de la tendencia comparando promedios móviles rápidos y lentos. Va largo cuando el MA rápido cruza por encima del MA lento, y va corto cuando el MA rápido cruza por debajo del MA lento. Para evitar mercados oscilantes, la estrategia también incorpora bandas de Bollinger.

En concreto, la lógica de negociación es la siguiente:

  1. Calcular el MA rápido (default de 20 días) y el MA lento (default de 50 días).

  2. Calcular la tasa de cambio de la anchura de la banda de Bollinger (default de 40 días, 2 desviaciones estándar).

  3. Se realizará una operación larga cuando el MA rápido se cruce por encima del MA lento y la tasa de cambio de anchura BB exceda el umbral predeterminado del 9%.

  4. Se realizará un cortocircuito cuando el MA rápido se cruce por debajo del MA lento y la tasa de cambio de anchura BB exceda el umbral predeterminado del 9%.

  5. Calcular las paradas largas y cortas de Chandelier.

  6. La parada larga es el más alto alto - ATR * multiplicador.

Ventajas

  1. El sistema de MA sigue de forma eficaz las tendencias.

  2. El cambio de ancho de BB filtra la oscilación, reduciendo las operaciones innecesarias.

  3. Chandelier sale a tiempo para detener las pérdidas evitando quedar atrapado.

  4. Varios parámetros ajustables para la optimización.

  5. Lógica clara, fácil de entender e implementar.

Los riesgos

  1. El retraso en la MA puede no tener rápidas reversiones.

  2. Los parámetros BB incorrectos pueden filtrar señales válidas.

  3. Las salidas excesivas de candelabros causan un exceso de operaciones.

  4. La optimización inadecuada de los parámetros conduce a la tenencia de riesgos.

  5. Incapaz de adaptarse a los cambios extremos del mercado por los grandes eventos.

Optimización

  1. Prueba diferentes combinaciones de MA para encontrar los parámetros óptimos.

  2. Probar diferentes períodos BB para obtener el mejor filtro de volatilidad.

  3. Añadir otros indicadores para la confirmación de entrada.

  4. Introducir paradas dinámicas para seguir mejor los mercados.

  5. Utilice el aprendizaje automático para optimizar automáticamente los mercados cambiantes.

Resumen de las actividades

Esta estrategia integra el sistema MA, el indicador BB y las salidas de candelabros para formar un sistema de seguimiento de tendencia relativamente estable. La optimización adecuada de parámetros puede lograr buenos resultados. Pero persisten los riesgos de inversión de tendencia y oscilación. El aprendizaje automático puede mejorar aún más la robustez.


/*backtest
start: 2022-10-11 00:00:00
end: 2023-10-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © juanchez

//@version=4
strategy("CHI", overlay = true, close_entries_rule = "ANY")

n = input(title= "highest high o lowest low period", defval= 22)
f= input(title= "multiplicador", defval= 4)
long = highest(high, n) - atr(n)*f
short= lowest(low, n) + atr(n)*f
plot(long, color= color.red)
plot(short, color= color.green)

//moving averages
period= input(title= "moving averages period", defval= 50)
period2= input(title= "moving averages period2", defval= 20)
type= input(title= "moving averages type", options= ["sma", "ema"], defval= "ema")

//moving average function
mo(p, t) =>
    if t == "sma"
        sma(close[barstate.islast ? 1: 0], p)
    else  if t== "ema"
        ema(close[barstate.islast ? 1: 0], p)

m= mo(period, type)
m2= mo(period2, type)

trend= m2 > m 

plot(m, color = color.maroon, linewidth = 3)
plot(m2, linewidth= 3)


//BOLLINGER BANDS ENTRIES
bb1_period= input(title= "Bollinger bands 1 period", defval=40, minval=1)
bb1_source=input(title="Bollinger band 1 source", defval=close)
bb1_multi=input(title="Bollinger Bands 1 factor", defval=2, minval=1, step=0.1)
show_bb1= input(title="Show Bollinger bands 1", defval=false)
//BOLLINGER BANDS
_bb(src, lenght, multi)=>
    float moving_avg= sma(src[barstate.islast? 1: 0], lenght)
    float deviation= stdev(src[barstate.islast? 1: 0], lenght)
    float lowerband = moving_avg - deviation*multi
    float upperband = moving_avg + deviation*multi
    
    [moving_avg, lowerband, upperband]
    
[bb1, lowerband1, upperband1]= _bb(bb1_source,  bb1_period, bb1_multi)

//FIRST BAND    
plot(show_bb1? bb1 : na, title="BB1 Moving average", linewidth= 3, color= color.fuchsia)
plot(show_bb1? upperband1 : na, title="BB1 Upper Band", linewidth= 3, color= color.green)
plot(show_bb1? lowerband1 : na, title="BB1 Lower Band", linewidth= 3, color= color.red)

//BB's Width threshold 
thresh= input(title= "widen %", defval= 9, minval = 0, step = 1, maxval= 100)

widht= (upperband1 - lowerband1)/bb1
roc= change(widht)/widht[1]*100
cross=crossover(roc, thresh)

// entry
//long
elong= input(true, title= "enable long")
longcondition= m2 > m and cross and elong

//short
eshort= input(true, title= "enable short")
shortcondition= m2 < m and cross and eshort


plotshape(longcondition? true: false , location= location.belowbar, style= shape.labelup, size= size.small, color= color.green, text= "Buy", textcolor= color.white)
plotshape(shortcondition? true: false , location= location.abovebar, style= shape.labeldown, size= size.small, color= color.red, text= "Sell", textcolor= color.white)

out= crossunder(close, long)
outt= crossover(close, short)

strategy.entry("long", strategy.long, when = longcondition)
strategy.close("long", when = out)

strategy.entry("short", strategy.short, when = shortcondition)
strategy.close("short", when = outt)

Más.