Estrategia de seguimiento de tendencias basada en medias móviles dinámicas


Fecha de creación: 2024-01-02 10:44:53 Última modificación: 2024-01-02 10:44:53
Copiar: 0 Número de Visitas: 559
1
Seguir
1621
Seguidores

Estrategia de seguimiento de tendencias basada en medias móviles dinámicas

Descripción general

Esta estrategia se basa en un indicador de línea de avance dinámica, que permite el seguimiento en tiempo real de la tendencia de los precios, y emite una señal de negociación a través de la ruptura de la línea de avance. La ventaja de la estrategia es que la configuración de los parámetros es simple, el juicio de las señales es claro y es adecuado para mantener posiciones en la línea media y larga.

Principio de estrategia

La estrategia utiliza indicadores de línea de avance dinámica, que incluyen varios tipos de líneas de avance, como ALMA, EMA y SMA. El principio básico es que, cuando los precios cruzan la línea de avance superior, haga más; cuando los precios cruzan la línea de avance inferior, haga hueco.

En concreto, la estrategia utiliza la media de la formación de los puntos altos y bajos, y luego toma la media de los puntos bajos como línea de señal de multiplicación, y la media de los puntos altos como línea de señal de descuento. Cuando el precio de cierre es superior a la media de los puntos bajos, hacer más; cuando el precio de cierre es inferior a la media de los puntos altos, hacer descuento.

Así, el uso de indicadores de línea media para determinar la tendencia de los precios, combinado con el principio de ruptura para emitir señales, forma una estrategia de seguimiento de tendencias sencilla y práctica.

Ventajas estratégicas

  • El uso de medias lineares para juzgar, configuración de parámetros simple y fácil de operar
  • Las reglas de la señal son claras y no producen falsas señales.
  • Algoritmos de línea uniforme de libre elección, con flexibilidad para responder a los cambios en el mercado
  • Parámetros de línea media ajustables para adaptarse a las tendencias de diferentes períodos
  • Se pueden verificar las señales en múltiples marcos de tiempo, aumentando la fiabilidad

Riesgos y soluciones

  • Los indicadores de la línea media están rezagados y podrían perderse algunas oportunidades
    • Reducción apropiada del ciclo de la media, o el uso de la media móvil EMA del índice
  • El riesgo de deterioro es mayor en el corto plazo.
    • Disminuir el margen de pérdidas adecuadamente para garantizar suficiente espacio de movimiento
  • El riesgo a largo plazo puede no detenerse a tiempo
    • En combinación con otros indicadores, evitar el seguimiento de los altos y bajos

Optimización de la estrategia

  • Ajuste de los algoritmos y parámetros de la línea media según las características de las diferentes variedades
  • Aumentar el juicio de los sub-indicadores para mejorar la eficacia de la estrategia
  • Mecanismos de contención de daños
  • Evaluación de la fiabilidad de la señal en múltiples marcos de tiempo
  • Buscar mejores parámetros combinando tecnología de aprendizaje automático

Resumir

La estrategia utiliza indicadores de línea media para determinar la dirección de la tendencia de los precios y emitir señales de negociación basadas en la teoría de la ruptura. La ventaja es que es simple y fácil de usar, adecuado para posiciones de línea media y larga, que se pueden ajustar a los cambios en el mercado a través de parámetros. Se debe tener en cuenta la prevención de los riesgos derivados de las sacudidas a corto plazo y la tenencia a largo plazo, que se puede resolver mediante un parón de pérdidas.

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

//@version=4
strategy(title="Baseline Strategy - evo", shorttitle="Baseline", overlay=true)

//INPUTS
mat =               input("ALMA", "MA Type", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "ALMA"])
baseline =          input(55, title="MA Length")
src =               input(ohlc4, title="Closing Source")

offset =            input(0.85, step=0.05, title="Offset (alma only)")
sigma =             input(10, title="Sigma (alma only)")

useCurrentRes =     input(true, title="Use Current Resolution")
resCustom =         input("1440", title="Timeframe")

showsignals =       input(false, title="Show Signals ?")

//BASELINE
baselinehigh = 

 mat=="SMA" ? sma(high,baseline) : 
 mat=="EMA" ? ema(high,baseline) : 
 mat=="WMA" ? wma(high,baseline) : 
 mat=="HMA" ? wma(2*wma(high, baseline/2)-wma(high, baseline), round(sqrt(baseline))) : 
 mat=="VWMA" ? vwma(high,baseline) : 
 mat=="RMA" ? rma(high,baseline) :
 mat=="ALMA" ? alma(high, baseline, offset, sigma) : na

baselinelow = 

 mat=="SMA" ? sma(low,baseline) : 
 mat=="EMA" ? ema(low,baseline) : 
 mat=="WMA" ? wma(low,baseline) : 
 mat=="HMA" ? wma(2*wma(low, baseline/2)-wma(low, baseline), round(sqrt(baseline))) : 
 mat=="VWMA" ? vwma(low,baseline) : 
 mat=="RMA" ? rma(low,baseline) : 
 mat=="ALMA" ? alma(low, baseline, offset, sigma) : na

//RESOLUTION
res =               useCurrentRes ? timeframe.period : resCustom

mtfhigh =           security(syminfo.tickerid, res, baselinehigh)
mtflow =            security(syminfo.tickerid, res, baselinelow)

//PLOTS
plot(mtfhigh, color=color.navy, linewidth=2, transp=0, title="Baseline High")
plot(mtflow, color=color.navy, linewidth=2, transp=0, title="Baseline Low")

long =              src > mtfhigh
short =             src < mtflow

barcolor(long ? #ffe0b2 : short ? #2a2e39 : not long and not short ? #b09e82 : na, title="BaseLine BarColor")

signal = 0
signal := long ? 1 : short ? 2 : nz(signal[1])

plotshape(showsignals ? (signal != signal[1] and long ? mtflow : na) : na, title="Long", location=location.absolute, size=size.small, style=shape.labelup, text="Long", textcolor=color.black, transp=40, color=#00ff00)
plotshape(showsignals ? (signal != signal[1] and short ? mtfhigh : na) : na, title="Short", location=location.absolute, size=size.small, style=shape.labeldown, text="Short", textcolor=color.white, transp=40, color=#ff0000)

alertcondition(signal != signal[1], title="Trend Change !", message="Trend Change !")

if (long)
    strategy.entry("Long", strategy.long)
if (short)
    strategy.entry("Short", strategy.short)