Estrategia de media móvil dinámica de varios períodos

El autor:¿ Qué pasa?, Fecha: 2023-10-27 16:07:16
Las etiquetas:

img

Esta estrategia selecciona dinámicamente diferentes tipos de promedios móviles en múltiples marcos de tiempo para generar señales comerciales.

Estrategia lógica

La estrategia permite seleccionar de las medias móviles SMA, EMA, TEMA, WMA y HMA, con longitudes de período personalizables.

Específicamente, la estrategia define primero el período de backtest basado en parámetros de entrada.

  • Promedio móvil simple
  • Promedio móvil exponencial de la EMA
  • Promedio móvil exponencial triple de TEMA
  • Promedio móvil ponderado de la WMA
  • Promedio móvil de HMA Hull

La media móvil correspondiente se traza en función de la selección.

Al combinar diferentes tipos de promedios móviles, la estrategia puede suavizar los datos de precios y filtrar el ruido del mercado para generar señales comerciales más confiables.

Ventajas

  • Combina varias medias móviles para una mayor fiabilidad
  • Los períodos personalizables se adaptan a los diferentes plazos de negociación
  • El cambio dinámico de las medias permite una optimización flexible
  • Seguimiento de tendencias sencillo e intuitivo adecuado para principiantes

Los riesgos

  • El retraso de las medias móviles puede perder los puntos de inflexión de la tendencia
  • Sobreajuste con parámetros fijos, bajo rendimiento en el comercio en vivo probable
  • Las señales largas/cortas agresivas afectan a la eficiencia del uso del capital

Los riesgos pueden reducirse:

  • Añadir otros indicadores para determinar con mayor precisión las entradas
  • Optimización de los parámetros en el comercio real para los diferentes regímenes de mercado
  • Optimización del tamaño de las posiciones en función del tamaño de la cuenta y de la gestión del riesgo

Oportunidades de mejora

La estrategia puede mejorarse en varios aspectos:

  1. Añadir otros filtros para señales más estables

    Por ejemplo, indicadores de volumen para evitar falsos breakouts sin confirmación de volumen.

  2. Optimiza la lógica de entrada y salida

    Establezca canales de precios y detenga las pérdidas para reducir las pérdidas innecesarias.

  3. Periodos de media móvil dinámica

    Utilice períodos más largos en tendencias fuertes y períodos más cortos durante las consolidaciones.

  4. Mejorar la gestión del dinero

    Ajustar el tamaño de las posiciones en función de las reducciones y la obtención de beneficios.

Conclusión

La estrategia combina varios promedios móviles a través de marcos de tiempo para generar efectos de seguimiento de tendencia relativamente estables.


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

//@version=3
strategy("MA_strategy ", shorttitle="MA_strategy", overlay=true, initial_capital=100000)

qty = input(100000000, "Buy quantity")

testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testStartMin = input(0, "Backtest Start Minute")

testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,testStartMin)

testStopYear = input(2099, "Backtest Stop Year")
testStopMonth = input(1, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)


testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false


ma1 = input( "SMA",title="Select MA", options=["SMA", "EMA","TEMA", "WMA","HMA"])


len1 = input(7, minval=1, title="Period")

s=sma(close,len1)

e=ema(close,len1)


xEMA1 = ema(close, len1)
xEMA2 = ema(xEMA1, len1)
xEMA3 = ema(xEMA2, len1)
t = 3 * xEMA1 - 3 * xEMA2 + xEMA3


f_hma(_src, _length)=>
    _return = wma((2 * wma(_src, _length / 2)) - wma(_src, _length), round(sqrt(_length)))

h = f_hma(close, len1)

w = wma(close, len1)

ma = ma1 == "SMA"?s:ma1=="EMA"?e:ma1=="WMA"?w:ma1=="HMA"?h:ma1=="TEMA"?t:na

buy= close>ma
sell= close<ma

alertcondition(buy, title='buy', message='buy')
alertcondition(sell, title='sell', message='sell')

ordersize=floor(strategy.equity/close)

if testPeriod()
    strategy.entry("long",strategy.long,ordersize,when=buy)
    strategy.close("long", when = sell )


    
  









Más.