La estrategia de combinación de optimización de tendencia de impulso es una estrategia de negociación cuantitativa a medio y largo plazo que combina factores de impulso y tendencia. Genera señales de compra y venta mediante la combinación de promedios móviles exponenciales, promedios móviles, indicadores de volumen y pendiente. La estrategia está optimizada para el comercio T + 1 y solo es adecuada para posiciones largas. Las optimizaciones también son aplicables a los mercados bursátiles internacionales.
La estrategia utiliza un promedio móvil simple de 6 días y un promedio móvil simple de 35 días para definir dos promedios móviles. La línea de señal de compra se define como una media móvil exponencial de 2 días, y la línea de señal de venta se calcula en función de la pendiente durante los últimos 8 precios de cierre. Además, un promedio móvil exponencial de volumen de 20 días se define como el indicador de volumen.
Cuando el precio de cierre es mayor que el promedio móvil de 35 días, el volumen de negociación es mayor que el volumen de negociación promedio de 20 días, y el chequeo semanal muestra un mercado alcista, una cruz dorada desde la parte inferior desencadena una señal de compra.
Para la gestión del riesgo, la estrategia introduce un mecanismo dinámico de ajuste de la posición. La posición real se calcula sobre la base del patrimonio neto de la cuenta, el índice de posición máxima, el ATR y el factor de riesgo. Esto ayuda a controlar el aprovechamiento máximo de la estrategia.
La estrategia combina factores de impulso y filtrado de tendencias, que pueden identificar eficazmente las direcciones a mediano y largo plazo. Al mismo tiempo, también se utiliza el filtrado de ruido para evitar señales falsas en mercados volátiles. Además, la introducción de mecanismos de gestión de riesgos también permite un control adecuado de las reducciones máximas, lo que garantiza la robustez de la estrategia.
A partir de los resultados de las pruebas de retroceso, el rendimiento general de la estrategia alcanzó el 128,86%, con un alfa muy significativo. Al mismo tiempo, la tasa de ganancia de la estrategia también alcanzó el 60,66%, lo que refleja la estabilidad del efecto de la estrategia.
Aunque la estrategia en sí misma se ha optimizado para los mecanismos de gestión de riesgos, todavía hay algunos riesgos que necesitan atención.
El riesgo de descenso. A partir de la pérdida más grande de 222.021,46 yuanes, se puede ver que la amplitud de retroceso de la estrategia es grande. Esto está relacionado con el mecanismo de gestión de posiciones imperfecto.
El riesgo de estabilidad de la señal: la señal de la estrategia puede verse afectada por factores especiales de las existencias individuales, lo que puede dar lugar a situaciones de falsa señal, lo que tendrá cierto impacto en los rendimientos de la estrategia.
Si el entorno del mercado macro cambia significativamente, es posible que sea necesario ajustar los parámetros de la estrategia para mantener el efecto.
De acuerdo con el análisis de riesgos anterior, todavía existe la necesidad y la posibilidad de optimizar esta estrategia.
A juzgar por la pérdida máxima, el mecanismo de gestión de posiciones puede optimizarse aún más mediante la introducción de un módulo de stop loss para controlar la magnitud de las pérdidas individuales.
Considere la posibilidad de añadir más indicadores de filtrado para identificar algunos fenómenos especiales de existencias y reducir la probabilidad de falsas señales.
Continuar con las pruebas retroactivas y la verificación de los parámetros de la estrategia, y realizar ajustes oportunos de los parámetros en función de los cambios en las condiciones del mercado.
La estrategia de combinación de optimización de tendencias de impulso es una estrategia de comercio cuantitativa a medio y largo plazo que combina factores de impulso y filtrado de tendencias y está especialmente optimizada para el comercio T + 1. A juzgar por los indicadores de backtest, el efecto general de la estrategia es significativo, con un alfa muy sorprendente. Pero también deben preocuparse los riesgos potenciales y los parámetros deben ajustarse a tiempo de acuerdo con los cambios en las condiciones del mercado. La estrategia puede traer alfa adicional a los operadores cuantitativos y vale la pena investigar y verificar más.
/*backtest start: 2024-01-06 00:00:00 end: 2024-02-05 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © fzj20020403 ////@version=5 //@version=5 strategy("Optimized Zhaocaijinbao", overlay=true, margin_long=100, margin_short=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // Define two moving averages ma6 = ta.sma(close, 6) ma35 = ta.sma(close, 35) // Define buy and sell signal lines buyLine = ta.ema(close, 2) sellSlope = (close - close[8]) / 8 sellLine = sellSlope * 1 + ta.sma(close, 8) // Define volume indicator volumeEMA = ta.ema(volume, 20) // Define weekly slope factor weeklyMa = ta.sma(close, 50) weeklySlope = (weeklyMa - weeklyMa[4]) / 4 > 0 // Generate buy and sell signals buySignal = ta.crossover(buyLine, sellLine) and close > ma35 and volume > volumeEMA and weeklySlope sellSignal = ta.crossunder(sellLine, buyLine) // Define dynamic position sizing factor equity = strategy.equity maxPositionSize = equity * input.float(title='Max Position Size (%)', defval=0.01, minval=0.001, maxval=0.5, step=0.001) riskFactor = input.float(title='Risk Factor', defval=2.0, minval=0.1, maxval=10.0, step=0.1) atr = ta.atr(14) positionSize = maxPositionSize * riskFactor / atr // Define position status var inPosition = false // Define buy and sell conditions buyCondition = buySignal and not inPosition sellCondition = sellSignal and inPosition // Perform buy and sell operations if (buyCondition) strategy.entry("Long", strategy.long, qty=positionSize) inPosition := true if (sellCondition) strategy.close("Long") inPosition := false // Draw vertical line markers for buy and sell signals plotshape(buyCondition, style=shape.arrowdown, location=location.belowbar, color=color.green, size=size.small) plotshape(sellCondition, style=shape.arrowup, location=location.abovebar, color=color.red, size=size.small) // Draw two moving averages plot(ma6, color=color.blue) plot(ma35, color=color.orange) // Draw volume indicator line plot(volumeEMA, color=color.yellow) // Define stop loss and take profit stopLoss = strategy.position_avg_price * 0.5 takeProfit = strategy.position_avg_price * 1.25 if inPosition strategy.exit("Long Stop Loss", "Long", stop=stopLoss) strategy.exit("Long Take Profit", "Long", limit=takeProfit)