Estrategia de seguimiento de tendencias basada en el filtro de Kalman

El autor:¿ Qué pasa?, Fecha: 2024-01-25 14:12:26
Las etiquetas:

img

Resumen general

Principio de la estrategia

La lógica central de esta estrategia incluye principalmente los siguientes pasos:

  1. Kalman filtra la media móvil original para obtener una media móvil suavizada;

  2. Calcular el ángulo de tangente de la media móvil suavizada.

  3. Definir el período del parámetro y sumar estadísticamente los ángulos tangentes dentro del período;

Análisis de ventajas

En comparación con las simples estrategias de promedio móvil y otros indicadores técnicos, la mayor ventaja de esta estrategia es que utiliza el filtro Kalman para reducir el impacto del ruido, haciendo que las señales de negociación sean más claras y confiables.

  1. El riesgo controlado: esta estrategia se centra más en las tendencias a medio y largo plazo que en las fluctuaciones a corto plazo, logrando un buen equilibrio riesgo-rendimiento.

Análisis de riesgos

Los principales riesgos de esta estrategia también incluyen:

  1. El riesgo de reversión de tendencia. Esta estrategia se centra en el seguimiento de tendencias. En caso de una fuerte reversión de tendencia, dará lugar a mayores pérdidas. Esto se puede mitigar acortando adecuadamente el ciclo estadístico para reducir la pérdida por operación.

  2. El riesgo de sobre-optimización. La optimización excesiva en los datos históricos también puede conducir a parámetros ineficaces. La validez fuera de la muestra debe controlarse.

Direcciones de optimización

  1. Introduzca el stop loss y el dimensionamiento de las posiciones. El stop loss adecuado puede controlar eficazmente el riesgo de pérdida de una sola operación; el dimensionamiento dinámico de las posiciones también puede ajustar las posiciones para cubrir los riesgos de acuerdo con las condiciones del mercado.

  2. Optimización automática de parámetros: Los algoritmos de optimización de aprendizaje automático pueden lograr la optimización automática de parámetros para evitar riesgos de sobre-optimización.

Conclusión


/*backtest
start: 2024-01-17 00:00:00
end: 2024-01-24 00:00:00
period: 15m
basePeriod: 5m
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="切线角") // 这是我为您添加的代码,用于显示实时计算的切线角


Más.