
O núcleo desta estratégia é o uso da técnica de filtro de Carman para suavizar a linha média de preços, produzindo um sinal de negociação quando o ângulo de corte da linha média após a suavização é calculado. A estratégia se dedica a seguir a tendência de linha média-longa, reduzindo o impacto do ruído com a técnica de filtro de Carman, resultando em um sinal de tendência mais claro e confiável.
A lógica central desta estratégia consiste principalmente nos seguintes passos:
Calcule a média móvel simples (SMA) do preço por minuto como a média original;
Uma onda de Karmann sobre a linha de equilíbrio original e uma linha de equilíbrio de saída;
Calcule o ângulo de corte da linha média depois de suavizada;
Definir o período de parâmetros, a soma dos ângulos de corte dentro do período estatístico;
Quando a soma dos ângulos de corte no ciclo é maior que 360 graus, o sinal de compra é gerado; quando é menor que 360 graus, o sinal de venda é gerado.
Com esse design, quando os preços tendem para cima ou para baixo, os ângulos de corte da linha uniforme se acumulam gradualmente, e quando se acumulam até certo ponto, geram um sinal de negociação, permitindo assim acompanhar efetivamente a tendência da linha média longa.
O filtro de Kalman é um algoritmo recursivo que, ao mesmo tempo em que prevê o estado atual, também prevê o ruído do processo e mede os valores do ruído, e usa os valores desse ruído para corrigir as previsões do estado anterior, resultando em uma estimativa de estado mais precisa e confiável.
Nesta estratégia, o SMA de preço pode ser visto como uma medida de estado, influenciado pelo ruído do mercado. O filtro de Kalman estimará a tendência real dos preços de forma recursiva, reduzindo significativamente o impacto do ruído, tornando a operação de mediana posterior mais confiável, resultando em um sinal de negociação mais estável e preciso.
Em comparação com as estratégias de indicadores como a média móvel simples, a maior vantagem desta estratégia é que o uso do filtro de Kalman reduz o impacto do ruído, tornando os sinais de negociação mais claros e confiáveis. As vantagens concretas se manifestam principalmente nos seguintes aspectos:
Redução de falsos sinais. O filtro de Kármán, estimulando e eliminando o ruído de forma adaptativa, efetivamente filtra o grande número de falsos sinais causados por oscilações aleatórias, tornando os sinais de negociação gerados mais confiáveis.
Melhor efeito de acompanhamento. A forma de linha uniforme depois do suavização é mais fluida e pode refletir melhor a tendência de linha média e longa de preços, permitindo um melhor efeito de acompanhamento de tendências.
Parâmetros ajustáveis incluem comprimento médio da linha, parâmetros da onda de Kármán e períodos estatísticos, permitindo adaptação flexível a diferentes condições de mercado.
Risco controlado. Esta estratégia foca mais na tendência de longo prazo do que na volatilidade de curto prazo, alcançando um melhor equilíbrio de risco e retorno.
Implementação simples e fácil de expandir. O algoritmo central desta estratégia é simples, fácil de implementar e testar, e também oferece espaço para expansão, como parâmetros de otimização automática de algoritmos de aprendizado de máquina que podem ser introduzidos.
A estratégia também apresenta os seguintes principais riscos:
Risco de reversão de tendência. Esta estratégia se concentra no acompanhamento de tendências, com grandes perdas em caso de reversão de tendência acentuada.
Risco de otimização de parâmetros. A configuração inadequada de parâmetros pode causar frequência de transações ou atraso de sinais, o que requer otimização de testes completos. A otimização automática pode ser combinada com algoritmos de aprendizagem de máquina.
Risco de otimização excessiva. A otimização excessiva em dados históricos também pode levar a falhas de parâmetros, que precisam ser controladas fora da amostra.
A implementação de complexidade aumenta o risco. A introdução de algoritmos de onda de Karmann e de ângulo de corte aumenta a complexidade do código e é necessário garantir a implementação correta.
Tendo em conta os fatores de risco acima mencionados, a estratégia pode ser otimizada de forma a:
Introdução de stop loss e gestão de posições. O stop loss adequado pode controlar eficazmente o risco de perda individual. A gestão de posições dinâmica também pode ajustar o risco de cobertura de posições de acordo com as condições do mercado.
Otimização automática de parâmetros. Com algoritmos de otimização de aprendizado de máquina, é possível otimizar automaticamente os parâmetros, evitando o risco de otimização excessiva.
Integração de outros indicadores. Pode-se integrar alguns outros indicadores na estratégia, formando um portfólio de indicadores para melhorar a estabilidade da estratégia.
Aumentar a avaliação de eficiência. Introduzir mais indicadores de ajuste de risco, avaliar a eficiência e a estabilidade da estratégia, resultando em conclusões mais abrangentes e precisas.
Expandir para várias variedades. Se o resultado for bom, pode-se considerar a expansão para mais variedades, acumulando uma amostra mais rica a médio e longo prazo, facilitando a otimização de parâmetros entre variedades.
Em geral, esta estratégia é uma estratégia de acompanhamento de tendências mais simples e prática. Em comparação com a estratégia de média móvel tradicional, a introdução do algoritmo de onda de Kalman é a maior inovação e permite que a estratégia produza um sinal de negociação mais claro e confiável.
/*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="切线角") // 这是我为您添加的代码,用于显示实时计算的切线角