Estratégia de rastreamento de tendências baseada no filtro Kalman

Autora:ChaoZhang, Data: 2024-01-25 14:12:26
Tags:

img

Resumo

O núcleo desta estratégia é usar a tecnologia de filtro Kalman para suavizar a média móvel de preços e gerar sinais de negociação quando o ângulo de tangente da média móvel suavizada excede um certo limiar dentro de um período especificado.

Princípio da estratégia

A lógica central desta estratégia inclui principalmente as seguintes etapas:

  1. Calcular a média móvel simples (SMA) do preço de 1 minuto como a média móvel original;

  2. Kalman filtra a média móvel original para produzir uma média móvel suavizada;

  3. Calcular o ângulo de tangência da média móvel suavizada;

  4. Definir o período do parâmetro e somar estatisticamente os ângulos tangentes dentro do período;

  5. Gerar um sinal de compra quando a soma dos ângulos tangentes dentro do período for superior a 360 graus; gerar um sinal de venda quando for inferior a -360 graus.

Com este design, quando o preço mostra uma tendência ascendente ou descendente, o ângulo tangente da média móvel irá gradualmente se acumular. Quando se acumular em certa medida, sinais de negociação serão gerados. Portanto, ele pode efetivamente rastrear tendências de médio e longo prazo.

O filtro Kalman é um algoritmo recursivo que prevê o valor do ruído do processo e do ruído de medição ao prever o estado atual, e usa esses valores de ruído para corrigir a previsão do estado atual para obter uma estimativa de estado mais precisa e confiável.

Análise das vantagens

  1. A filtragem Kalman efetivamente filtra muitos sinais falsos causados por flutuações aleatórias estimando e eliminando o ruído de forma adaptativa, tornando os sinais de negociação gerados mais confiáveis.

  2. Melhor efeito de acompanhamento: a forma suavizada da média móvel é mais suave e reflete melhor a tendência de preços a médio e longo prazo, conseguindo assim um melhor efeito de acompanhamento da tendência.

  3. Parâmetros ajustáveis flexíveis: os parâmetros ajustáveis incluem o comprimento da média móvel, os parâmetros do filtro Kalman e o ciclo estatístico, que podem adaptar-se de forma flexível aos diferentes ambientes de mercado.

  4. Fácil de implementar e expandir. O algoritmo central desta estratégia é bastante conciso e fácil de implementar e testar.

Análise de riscos

Os principais riscos desta estratégia incluem igualmente:

  1. Risco de otimização de parâmetros. Configurações inadequadas de parâmetros podem levar a negociação frequente ou atraso no sinal. Requer testes e otimização suficientes. Pode ser combinado com algoritmos de aprendizado de máquina para otimização automática.

  2. O risco de otimização excessiva. A otimização excessiva em dados históricos também pode levar a parâmetros ineficazes. A validade fora da amostra precisa ser controlada.

  3. Aumento do risco de complexidade. A introdução de algoritmos de filtro Kalman e ângulo tangente aumenta a complexidade do código. A implementação correta precisa ser garantida.

Orientações de otimização

Tendo em conta os riscos acima referidos, as direcções de otimização desta estratégia incluem:

  1. Optimização automática de parâmetros. Os algoritmos de otimização de aprendizado de máquina podem obter otimização automática de parâmetros para evitar riscos de otimização excessiva.

  2. Integrar outros indicadores Alguns outros indicadores podem ser integrados na estratégia para formar combinações de indicadores para melhorar a estabilidade da estratégia.

  3. Aumentar a avaliação da eficiência. Introduzir mais métricas ajustadas ao risco para avaliar a eficiência e a estabilidade das estratégias para uma conclusão mais abrangente e precisa.

  4. Se for eficaz, pode ser considerado para se expandir para mais produtos. No médio e longo prazo, ele acumula amostras mais ricas e facilita a otimização de parâmetros cruzados de produtos.

Conclusão


/*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="切线角") // 这是我为您添加的代码,用于显示实时计算的切线角


Mais.