La estrategia de seguimiento de tendencia de la media móvil dual es una estrategia de trading cuantitativa que rastrea las tendencias de los precios de las acciones.
Esta estrategia se basa principalmente en el sistema de media móvil exponencial dual para determinar la dirección de la tendencia del precio. La estrategia utiliza dos EMA rápidas y lentas con parámetros diferentes, la EMA rápida 1 reacciona a los cambios de precio más rápidamente, y la EMA lenta 2 responde a los cambios de precio más lentamente. Cuando la línea rápida cruza por encima de la línea lenta, es una señal de compra que indica que el precio ha comenzado a subir; cuando la línea rápida cruza por debajo de la línea lenta, es una señal de venta que indica que el precio ha comenzado a caer.
Además, la estrategia también introduce el indicador ADX para juzgar la fuerza de la tendencia. ADX calcula las fluctuaciones de precios para juzgar la fuerza de la tendencia. Cuando ADX sube, significa que la tendencia se está fortaleciendo; cuando ADX cae, significa que la tendencia se está debilitando. La estrategia establece condiciones de filtro comercial a través del indicador ADX, solo emitiendo señales comerciales cuando la fuerza de la tendencia es relativamente fuerte.
En concreto, las reglas de generación de señales de la estrategia son las siguientes:
Esto puede filtrar eficazmente las señales inválidas con una fuerza de tendencia más débil, mejorando aún más la estabilidad del sistema comercial.
Esta estrategia tiene las siguientes ventajas principales:
Captura las tendencias de los precios a medio y largo plazo: El sistema EMA dual puede determinar eficazmente las tendencias de los precios a medio y largo plazo y evitar interferencias del ruido del mercado a corto plazo.
Filtra las fugas falsas: Al juzgar la fuerza de la tendencia a través del indicador ADX, evita pérdidas innecesarias causadas por falsas rupturas alrededor de los puntos de inflexión de la tendencia.
Gran espacio de optimización de parámetros: Los parámetros de línea rápida y lenta, los parámetros ADX y más tienen espacio para la optimización que puede producir mejores resultados comerciales a través de combinaciones de parámetros.
Alta adaptabilidad: Esta estrategia es adecuada para la mayoría de las acciones y los plazos, y se ha verificado en varios mercados.
Fácil de implementar: Esta estrategia sólo requiere indicadores de medias móviles simples, consume pocos recursos, es fácil de programar y tiene bajos costos de aplicación práctica.
Esta estrategia también presenta algunos riesgos, principalmente concentrados en los siguientes ámbitos:
Riesgo de reversión de la tendencia: Cualquier estrategia de tendencia no puede determinar perfectamente los puntos de reversión de la tendencia, y está destinada a sufrir mayores pérdidas cuando la tendencia real realmente se invierte.
Sobre el riesgo de optimización: La optimización extrema de los parámetros también puede conducir a una adaptación excesiva de la estrategia a los datos históricos, lo que reducirá la estabilidad y el efecto práctico de la estrategia.
Riesgo de evento cisne negro: Eventos inesperados mayores romperán el modelo de tendencia de precios original, causando que el indicador de media móvil falle, lo que requiere una intervención manual o ajustes de stop loss para controlar las pérdidas.
Para hacer frente a los riesgos anteriores, podemos optimizar desde los siguientes aspectos:
Introduzca indicadores adicionales para determinar los puntos de inflexión de los precios, por ejemplo, introduzca el volumen de operaciones, que se amplificará cuando aparezcan los puntos de inflexión de los precios.
Relajar adecuadamente los parámetros del ADX para asegurar que las oportunidades puedan ser capturadas en las primeras etapas de una tendencia.
Realizar entrenamiento y pruebas de combinaciones de parámetros en múltiples grupos y seleccionar combinaciones con buena estabilidad y efecto práctico, evitando así los riesgos de sobreoptimización de grupos de parámetros individuales.
También hay algunas direcciones en las que esta estrategia puede ser optimizada:
Introducción de mecanismos de detención de pérdida: Establecer un stop loss móvil o un stop loss porcentual, que puede detener activamente las pérdidas cuando las tendencias se invierten para evitar pérdidas excesivas.
Combinar los indicadores de volumen de operacionesPor ejemplo, el volumen de operaciones, que puede evitar señales erróneas cuando el volumen de operaciones se expande en puntos de inflexión de precios.
Optimización automática de parámetros: Permitir que los parámetros de los indicadores se ajusten de forma adaptativa según los cambios del mercado en tiempo real, en lugar de parámetros estáticos fijos, lo que puede mejorar en gran medida la estabilidad de las estrategias.
Introducir el aprendizaje automático: Utilice algoritmos de aprendizaje automático para analizar grandes cantidades de datos históricos para determinar parámetros para las medias móviles y ADX, e incluso predecir futuros movimientos de precios.
Optimización del ciclo cruzado: Los diferentes parámetros del ciclo de negociación pueden establecerse de manera diferente, y la configuración óptima en cada ciclo puede ser probada.
En general, la estrategia de seguimiento de tendencias de promedios móviles dobles es una idea de estrategia madura y estable. Esta estrategia captura las tendencias de precios a mediano y largo plazo a través del sistema de EMA dual, y tiene el indicador ADX para filtrar las señales, lo que puede capturar eficazmente las tendencias de precios de las acciones y evitar la interferencia del ruido del mercado a corto plazo. Al mismo tiempo, esta estrategia también tiene ciertos riesgos, que requieren la optimización de combinaciones de parámetros y métodos de stop loss, e incluso puede introducir más indicadores auxiliares y algoritmos de aprendizaje automático para mejorar la estabilidad de la estrategia. En resumen, la estrategia de seguimiento de tendencias de promedios móviles dobles tiene un buen equilibrio, y es una idea de estrategia cuantitativa adecuada para inversores a mediano y largo plazo.
/*backtest start: 2022-12-14 00:00:00 end: 2023-11-10 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Kitaec Strategy4", shorttitle = "Kitaec str4", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot") len = input(14, defval=14, minval=1, maxval=1000, title="Smoothing") len2 = input(14, defval=14, minval=1, maxval=1000, title="Smoothing2") len3=input(550) src = close ema1=ema(src, len) ema2=ema(ema1, len2) d=ema1-ema2 zlema=ema1+d ema21=ema(src, (len/3)*2) ema22=ema(ema21, (len2/3)*2) d2=ema21-ema22 zlema2=ema21+d2 ema31=ema(src, len3) ema32=ema(ema21, len3) d3=ema31-ema32 zlema3=ema31+d2 fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //MAs //ma1 = security(tickerid, "60", vwma(src, len)[1]) //ma2 = security(tickerid, "120", vwma(src, len)[1]) //plot(ma1, linewidth = 2, color = blue, title = "MA") //plot(ma2, linewidth = 2, color = red, title = "MA2") // ADX lenadx = 14 lensig = 14 limadx = 18 up = change(high) down = -change(low) trur = rma(tr, lenadx) plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, lenadx) / trur) minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, lenadx) / trur) sum = plus + minus adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), lensig) adx2 = ema(adx, 14) adx2i = ema(adx2,14) dadx2 = adx2 - adx2i zladx2 = adx2 + dadx2 plus2 = ema(plus, 14) plus2i = ema (plus2, 14) dplus2 = plus2 - plus2i zlplus2 = plus2 + dplus2 minus2 = ema(minus, 14) minus2i = ema (minus2, 14) dminus2 = minus2 - minus2i zlminus2 = minus2 + dminus2 vwma = vwma(close, 150) vwma2 = ema(vwma, 9) vwma2i = ema(vwma2, 9) dvwma2 = vwma2 - vwma2i zlvwma2 = vwma2 + dvwma2 rmax=rma(src, len) rmax2=rma(rmax, len2) rmd=rmax-rmax2 zlrmax=rmax+rmd rmaxz=rma(src, (len/3)*2) rmaxz2=rma(rmaxz, (len2/3)*2) rmzd=rmaxz-rmaxz2 zlrmaxz=rmaxz+rmzd rmaxcol2=zlrmaxz[1] > zlema2[1] ? red:lime rmaxcol= zlrmax[1] > zlema[1] ? red:lime rmazlema3=rma(zlema3, 100) plot(rmazlema3, color=gray, linewidth=2) plot(zlema, color=green) plot(zlema2, color=yellow) plot(zlema3, color=teal, linewidth=2) plot(ema2, color=na) plot(rmax, color=rmaxcol2, linewidth=3) plot(zlrmax, color=rmaxcol, linewidth=3) //Trading size = strategy.position_size lot = 0.0 lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1] if zlrmax[1] < zlema[1] strategy.entry("Buy", strategy.long, needlong ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if zlrmax[1] > zlema[1] strategy.entry("Sell", strategy.short, needshort ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))