Estrategia de negociación de media móvil de varios plazos

El autor:¿ Qué pasa?, Fecha: 2023-09-21 20:45:38
Las etiquetas:

Resumen general

Esta estrategia utiliza cruces medios móviles entre diferentes marcos de tiempo para generar señales comerciales. Permite observar MAs de marcos de tiempo más largos en el gráfico actual para detectar tendencias más grandes.

Estrategia lógica

La estrategia utiliza dos promedios móviles calculados en marcos de tiempo separados.

Por ejemplo, en el gráfico de 15 minutos utiliza 20MA y 50MA:

  • 20 MA se calcula en barras de corriente de 15 min
  • 50 MA se calcula en barras diarias

Cuando 15min 20MA cruza por encima de 50MA diarios, se hace largo.

Esto consigue el efecto de observar tendencias de margen de tiempo más largo en el período actual.

Los puntos de cruce pueden marcarse para señales comerciales claras.

Ventajas

  • Analiza en diferentes períodos de tiempo, descubre tendencias más amplias
  • Las líneas de TF más altas son más estables, evitando señales falsas
  • Las líneas inferiores de TF más sensibles, la tendencia de captura cambia rápidamente
  • Combinaciones de períodos de admisión personalizadas
  • Señales claramente marcadas en el gráfico

Los riesgos

  • Aumento de la complejidad con marcos de tiempo múltiples
  • Signos falsos de TF más bajos aún posibles
  • En general, el retraso con los sistemas de MA, puede perderse las mejores entradas
  • Filtración limitada con sistema de MA puro
  • Ajuste del período necesario para diferentes productos

Los riesgos pueden reducirse:

  • Mantener durante más tiempo las MAs de TF altas para una dirección de tendencia robusta
  • Añadir otros indicadores para un mayor filtrado de señales
  • Optimización de los períodos de admisión para obtener las mejores combinaciones
  • Relajar las reglas de entrada como añadir patrones de candelabro

Direcciones de mejora

La estrategia puede mejorarse mediante:

  1. Prueba de más combinaciones de períodos de MA para la optimización

  2. Añadir confirmación secundaria cuando ocurre el cruce

    Por ejemplo, comprobar el impulso del MACD

  3. Optimización de las paradas para evitar una salida prematura

    Considera la evidencia de Post123 para decidir las salidas

  4. Diferentes filtros para TF corto y largo

    Más estricto para TF corto, más relajado para TF largo

  5. Considere diferentes conjuntos de parámetros para diferentes sesiones

    Las condiciones del mercado varían según las sesiones

Resumen de las actividades

Esta estrategia observa los cruces entre los MAs de múltiples marcos de tiempo para determinar la dirección de la tendencia y descubrir tendencias más grandes. Esto filtra ruidos a corto plazo y se centra en movimientos de precios más grandes. Sin embargo, existen desafíos como la sintonización de marcos de tiempo y las señales rezagadas. Las mejoras se pueden hacer a través de rigurosas pruebas de retroceso y optimización para parámetros robustos, agregando filtros para confirmación, validación en vivo para mejoras continuas de acuerdo con la retroalimentación del mercado.


/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 7d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2

//Run script on a long interval gives better result for e.g. 1 Day
//Plots The Majority of Moving Averages
//Defaults to Current Chart Time Frame --- But Can Be Changed to Higher Or Lower Time Frames
//2nd MA Capability with Show Crosses Feature
//study(title="CM_Ultimate_MA_MTF", shorttitle="CM_Ultimate_MA_MTF", overlay=true)
strategy("Stratergy CM_Ultimate_MA_MTF", shorttitle = "Stratergy CM_Ultimate_MA_MTF", overlay = true) 
//,default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//inputs
src = close
useCurrentRes = input(true, title="Use Current Chart Resolution?")
resCustom = input(title="Use Different Timeframe? Uncheck Box Above",  defval="D")
len = input(20, title="Moving Average Length - LookBack Period")
atype = input(1,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA, 5=VWMA, 6=RMA, 7=TEMA")
cc = input(true,title="Change Color Based On Direction?")
smoothe = input(2, minval=1, maxval=10, title="Color Smoothing - 1 = No Smoothing")
doma2 = input(false, title="Optional 2nd Moving Average")
len2 = input(50, title="Moving Average Length - Optional 2nd MA")
atype2 = input(1,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA, 5=VWMA, 6=RMA, 7=TEMA")
cc2 = input(true,title="Change Color Based On Direction 2nd MA?")
warn = input(false, title="***You Can Turn On The Show Dots Parameter Below Without Plotting 2nd MA to See Crosses***")
warn2 = input(false, title="***If Using Cross Feature W/O Plotting 2ndMA - Make Sure 2ndMA Parameters are Set Correctly***")
sd = input(false, title="Show Dots on Cross of Both MA's")


res = useCurrentRes ? timeframe.period : resCustom
//hull ma definition
hullma = wma(2*wma(src, len/2)-wma(src, len), round(sqrt(len)))
//TEMA definition
ema1 = ema(src, len)
ema2 = ema(ema1, len)
ema3 = ema(ema2, len)
tema = 3 * (ema1 - ema2) + ema3

avg = atype == 1 ? sma(src,len) : atype == 2 ? ema(src,len) : atype == 3 ? wma(src,len) : atype == 4 ? hullma : atype == 5 ? vwma(src, len) : atype == 6 ? rma(src,len) : tema
//2nd Ma - hull ma definition
hullma2 = wma(2*wma(src, len2/2)-wma(src, len2), round(sqrt(len2)))
//2nd MA TEMA definition
sema1 = ema(src, len2)
sema2 = ema(sema1, len2)
sema3 = ema(sema2, len2)
stema = 3 * (sema1 - sema2) + sema3

avg2 = atype2 == 1 ? sma(src,len2) : atype2 == 2 ? ema(src,len2) : atype2 == 3 ? wma(src,len2) : atype2 == 4 ? hullma2 : atype2 == 5 ? vwma(src, len2) : atype2 == 6 ? rma(src,len2) : tema

out = avg 
out_two = avg2

out1 = security(syminfo.tickerid, res, out)
out2 = security(syminfo.tickerid, res, out_two)

ma_up = out1 >= out1[smoothe]
ma_down = out1 < out1[smoothe]

col = cc ? ma_up ? lime : ma_down ? red : aqua : aqua
col2 = cc2 ? ma_up ? lime : ma_down ? red : aqua : aqua

circleYPosition = out2
chk=col==red?1:0

if (not na(chk))
    if (chk[1]==1 and chk==0)
        strategy.entry("RsiLE", strategy.long, comment="RsiLE")
    else
        strategy.exit("RsiLE")

    if (chk[1]==0 and chk==1)
        strategy.entry("RsiSE", strategy.short, comment="RsiLE")
    else
        strategy.exit("RsiSE")
        
plot(out1, title="Multi-Timeframe Moving Avg", style=line, linewidth=4, color = col)
plot(doma2 and out2 ? out2 : na, title="2nd Multi-TimeFrame Moving Average", style=circles, linewidth=4, color=col2)
plot(sd and cross(out1, out2) ? circleYPosition : na,style=cross, linewidth=5, color=yellow)



Más.