La estrategia de media móvil doble 360° es una estrategia de negociación cuantitativa que incorpora medias móviles dobles y determinación de la fuerza de la tendencia.
La lógica central de la estrategia de media móvil doble 360 ° es:
Específicamente, la estrategia define el promedio móvil en bruto de 1 minuto y el promedio móvil filtrado por Kalman. El filtro Kalman elimina algo de ruido del promedio móvil para hacerlo más suave. El ángulo tangente entre los dos promedios móviles refleja los cambios de tendencia de precios. Por ejemplo, cuando el ángulo tangente es positivo, indica una tendencia al alza; por el contrario, un ángulo negativo representa una tendencia a la baja.
La estrategia elige 30 minutos como el período de cálculo para sumar todos los ángulos tangentes positivos y negativos dentro de ese período. Cuando la suma excede los 360 grados, indica una tendencia extremadamente fuerte y emite una señal larga; por el contrario, cuando la suma está por debajo de -360 grados, indica una inversión de tendencia y emite una señal corta.
Las principales ventajas de la estrategia de media móvil doble 360° son:
La estrategia de media móvil doble 360° también conlleva algunos riesgos:
Para mitigar los riesgos anteriores, se pueden adoptar medidas como acortar el período de media móvil, optimizar las combinaciones de parámetros, agregar mecanismos de stop-loss.
La estrategia de media móvil doble 360° se puede optimizar aún más mediante:
La estrategia de media móvil doble 360° utiliza el filtrado de media móvil y los juicios de tendencia del ángulo tangente cuantitativo para lograr una estrategia comercial cuantitativa relativamente robusta.
/*backtest start: 2024-01-25 00:00:00 end: 2024-01-30 08:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 //@library=math strategy("策略360°(测试)", overlay=true) // 定义1分钟均线 ma1 = request.security(syminfo.tickerid, "1", ta.sma(close, 1)) // 在这里使用了 math.sma() 函数 //plot(ma1, color=color.yellow, title="原始均线") // 定义卡尔曼滤波函数,参考了[1](https://www.tradingview.com/pine-script-docs/en/v5/language/Methods.html)和[2](https://www.tradingview.com/pine-script-docs/en/v5/language/Operators.html)的代码 kalman(x, g) => kf = 0.0 dk = x - nz(kf[1], x) // 在这里使用了 nz() 函数 smooth = nz(kf[1], x) + dk * math.sqrt(g * 2) // 在这里使用了 math.sqrt() 函数 velo = 0.0 velo := nz(velo[1], 0) + g * dk // 在这里使用了 nz() 函数 kf := smooth + velo kf // 定义卡尔曼滤波后的均线 ma2 = kalman(ma1, 0.01) plot(ma2, color=color.blue, title="卡尔曼滤波后的均线") // 定义切线角 angle = math.todegrees(math.atan(ma2 - ma2[1])) // 在这里使用了 math.degrees() 和 math.atan() 函数 // 定义累加的切线角 cum_angle = 0.0 cum_angle := nz(cum_angle[1], 0) + angle // 在这里使用了 nz() 函数 // 定义30分钟周期 period = 30 // 您可以根据您的需要修改这个参数 // 定义周期内的切线角总和 sum_angle = 0.0 sum_angle := math.sum(angle, period) // 在这里使用了 math.sum() 函数,把周期内的切线角总和改成简单地把 5 个切线角相加 // 定义买入和卖出条件 buy = sum_angle > 360// 在这里使用了 math.radians() 函数 sell = sum_angle < -360 // 执行买入和卖出操作 strategy.entry("Long", strategy.long, when=buy) strategy.close("Short", when=buy) strategy.entry("Short", strategy.short, when=sell) strategy.close("Long", when=sell) // 绘制曲线图 plot(sum_angle, color=color.green, title="周期内的切线角总和") plot(angle, color=color.red, title="切线角") // 这是我为您添加的代码,用于显示实时计算的切线角