Estrategia de seguimiento de la tendencia de la media móvil doble

El autor:¿ Qué pasa?, Fecha: 2024-01-24 11:28:57
Las etiquetas:

img

Resumen general

La estrategia de seguimiento de tendencia de media móvil doble es una estrategia que utiliza una combinación de medias móviles rápidas y lentas para determinar la tendencia del mercado, y genera señales comerciales cuando la dirección de la tendencia cambia.

Estrategia lógica

La estrategia de seguimiento de tendencia de la media móvil doble utiliza dos medias móviles: una media móvil rápida (5 períodos) y una media móvil lenta (21 períodos).

La estrategia también utiliza un indicador de canal de precios para ayudar a determinar la tendencia. El canal de precios se determina por los promedios móviles de los precios más altos y más bajos. Cuando los precios rompen el canal, indica una inversión de tendencia. Esta estrategia utiliza dos canales de precios con períodos de 21 y 5 respectivamente, que coinciden con los períodos de MA.

Al determinar las señales de compra y venta, la estrategia requiere que aparezcan velas rojas/verdes consecutivas (ajustables por el usuario) como una condición de filtro adicional.

En resumen, la lógica para determinar la tendencia de esta estrategia es la siguiente:

  1. Utilizar el canal de precios para determinar la dirección de la tendencia del marco de tiempo superior
  2. Utilizar un MA rápido para determinar la tendencia a corto plazo y generar señales comerciales
  3. Combinar filtro de vela adicional para evitar señales erróneas durante las consolidaciones

Al juzgar la tendencia a través de los marcos de tiempo, el ruido del mercado se puede filtrar eficazmente y confirmar la dirección de la tendencia.

Análisis de ventajas

La estrategia de seguimiento de tendencias de la media móvil doble tiene las siguientes ventajas:

  1. El sistema de doble MA puede identificar eficazmente las tendencias y determinar la principal dirección de la tendencia
  2. El MA rápido genera señales comerciales para capturar las inversiones de tendencia a tiempo
  3. El canal de precios determina la tendencia de un marco de tiempo más largo para evitar ser engañado por el ruido del mercado a corto plazo
  4. Los filtros de velas rojo/verde reducen la probabilidad de señales erróneas durante las consolidaciones
  5. Los parámetros ajustables permiten la optimización para diferentes mercados para mejorar la robustez
  6. Se pueden añadir estrategias de stop loss para controlar eficazmente el riesgo por operación.

En conclusión, esta estrategia tiene una estabilidad general relativamente buena y tiene un buen rendimiento en mercados con tendencias fuertes.

Análisis de riesgos

La estrategia de seguimiento de la tendencia de la media móvil doble también presenta algunos riesgos, principalmente:

  1. Durante las consolidaciones prolongadas, es propenso a generar señales erróneas y pequeñas pérdidas consecutivas.
  2. La configuración incorrecta de los parámetros puede retrasar las señales comerciales y perder las mejores oportunidades de entrada
  3. Sin un stop loss efectivo, el riesgo por operación es difícil de controlar

Las medidas correspondientes para reducir los riesgos incluyen:

  1. Ajustar los ajustes del filtro de velas rojo/verde para reducir la frecuencia de negociación en los mercados consolidados
  2. Optimizar los parámetros de MA rápidos para garantizar la generación oportuna de señales comerciales
  3. Añadir movimiento o porcentaje de pérdida de detención al control estricto por pérdida comercial

Direcciones de optimización

Hay margen para una mayor optimización de la estrategia, principalmente en direcciones como:

  1. Incorporar indicadores de volatilidad como ATR para ajustar automáticamente el stop loss
  2. Utilice el aprendizaje automático para optimizar automáticamente los parámetros
  3. Añadir módulos de red neuronal para determinar la dirección de la tendencia
  4. Construir sistemas de conjunto que combinen múltiples indicadores y filtros

Estas direcciones de optimización pueden mejorar aún más la estabilidad, adaptabilidad y nivel de inteligencia de la estrategia.

Conclusión

En conclusión, la estrategia de seguimiento de tendencias de media móvil dual es una estrategia de seguimiento de tendencias relativamente robusta. Combina medias móviles y canales de precios para determinar la dirección y la fuerza de la tendencia, generando señales de negociación con el MA rápido. Los filtros de vela adicionales también ayudan a evitar señales incorrectas. Los parámetros ajustables permiten la adaptación a diferentes entornos de mercado. También hay un amplio margen para nuevas optimizaciones para construir una estrategia de negociación automatizada confiable e inteligente.


/*backtest
start: 2023-12-24 00:00:00
end: 2024-01-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title = "Noro's Trend MAs Strategy v1.8", shorttitle = "Trend MAs str 1.8", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, "long")
needshort = input(true, "short")
needstops = input(false, "stops")
stoppercent = input(5, defval = 5, minval = 1, maxval = 50, title = "Stop, %")
useohlc4 = input(false, defval = false, title = "Use OHLC4")
usefastsma = input(true, "Use fast MA Filter")
fastlen = input(5, defval = 5, minval = 1, maxval = 50, title = "fast MA Period")
slowlen = input(21, defval = 20, minval = 2, maxval = 200, title = "slow MA Period")
bars = input(2, defval = 2, minval = 0, maxval = 3, title = "Bars Q")
needbg = input(false, defval = false, title = "Need trend Background?")
needarr = input(false, defval = false, title = "Need entry arrows?")

src = useohlc4 == true ? ohlc4 : close
fastsma = ema(src, 5)

//PriceChannel 1
lasthigh = highest(src, slowlen)
lastlow = lowest(src, slowlen)
center = (lasthigh + lastlow) / 2

//PriceChannel 2
lasthigh2 = highest(src, fastlen)
lastlow2 = lowest(src, fastlen)
center2 = (lasthigh2 + lastlow2) / 2

//Trend
//ma = type == 1 ? sma(src, len) : type == 2 ? ema(src, len) : type == 3 ? vwma(src, len) : type == 4 ? dema : type == 5 ? tema : type == 6 ? kama : type == 7 ? center : 0
//trend = low > ma and low[1] > ma[1] and low[2] > ma[2] ? 1 : high < ma and high[1] < ma[1] ? -1 : trend[1]

trend1 = low > center and low[1] > center[1] ? 1 : high < center and high[1] < center[1] ? -1 : trend1[1]
trend2 = low > center2 and low[1] > center2[1] ? 1 : high < center2 and high[1] < center2[1] ? -1 : trend1[1]
trend = trend1 == 1 and trend2 == 1 ? 1 : trend2 == -1 and trend2 == -1 ? -1 : trend[1]

//Bars
bar = close > open ? 1 : close < open ? -1 : 0
redbars = bars == 0 ? 1 : bars == 1 and bar == -1 ? 1 : bars == 2 and bar == -1 and bar[1] == -1 ? 1 : bars == 3 and bar == -1 and bar[1] == -1 and bar[2] == -1 ? 1 : 0
greenbars = bars == 0 ? 1 : bars == 1 and bar == 1 ? 1 : bars == 2 and bar == 1 and bar[1] == 1 ? 1 : bars == 3 and bar == 1 and bar[1] == 1 and bar[2] == 1 ? 1 : 0

//Signals
up = trend == 1 and (low < center2 or usefastsma == false) and (redbars == 1) ? 1 : 0
dn = trend == -1 and (high > center2 or usefastsma == false) and (greenbars == 1) ? 1 : 0

//Lines
colorfastsma = usefastsma == true ? red : na
plot(fastsma, color = colorfastsma, title = "Fast MA")
plot(center, color = blue, linewidth = 3, transp = 0, title = "Slow MA")
plot(center2, color = red, linewidth = 3, transp = 0, title = "PriceChannel 2")

//Arrows
plotarrow(up == 1 and needarr == true ? 1 : 0, colorup = black, colordown = black, transp = 0)
plotarrow(dn == 1 and needarr == true ? -1 : 0, colorup = black, colordown = black, transp = 0)

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 90)

//Alerts
alertcondition(up == 1, title='buy', message='Uptrend')
alertcondition(dn == 1, title='sell', message='Downtrend')

//Trading
stoplong = up == 1 and needstops == true ? close - (close / 100 * stoppercent) : stoplong[1]
stopshort = dn == 1 and needstops == true ? close + (close / 100 * stoppercent) : stopshort[1]

longCondition = up == 1
if (longCondition)
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)
    strategy.exit("Stop Long", "Long", stop = stoplong)

shortCondition = dn == 1
if (shortCondition)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
    strategy.exit("Stop Short", "Short", stop = stopshort)

Más.