O recurso está a ser carregado... Carregamento...

Estratégia de negociação de taxas transitórias baseada no filtro Kalman e na reversão da média

Autora:ChaoZhang, Data: 2023-12-29 17:23:14
Tags:

img

Resumo

Esta estratégia utiliza os conceitos de filtro de Kalman e reversão média para capturar flutuações anormais de curto prazo nos preços das ações e implementar a negociação direcional de ações. A estratégia estabelece primeiro um modelo de relação de preço entre uma ação e um índice de mercado, e depois usa a técnica de filtro de Kalman para prever e filtrar a relação. Os sinais de negociação são gerados quando a relação desvia dos níveis normais. Além disso, a estratégia também incorpora filtragem de volume para evitar falsos negócios.

Princípio da estratégia

A ideia central da estratégia é estabelecer um modelo de relação de preço entre o preço da própria ação e o preço do índice de mercado. Esta relação reflete o nível de preço de ações individuais em relação ao mercado geral. Quando a relação é alta, considera-se que a ação individual está sobrevalorizada e um sinal de venda é gerado. Quando a relação é baixa, considera-se que a ação individual está subvalorizada e um sinal de compra é gerado.

Para filtrar o sinal de relação sem problemas, a estratégia adota o algoritmo do filtro Kalman. O filtro Kalman pesa o valor observado real da relação com o valor previsto e atualiza a previsão da relação em tempo real. E calcula um valor de filtro Kalman suave. Os sinais de negociação são gerados quando o valor filtrado excede 2 desvios padrão acima ou abaixo dos níveis normais.

Além disso, a estratégia também considera fatores de volume de negociação.

Análise das vantagens

A maior vantagem desta estratégia é a suavização e previsão efetivas da relação de preços usando o algoritmo do filtro Kalman. Em comparação com modelos de reversão média simples, o filtro Kalman pode refletir melhor as mudanças dinâmicas nos preços, especialmente quando os preços flutuam acentuadamente. Isso permite que a estratégia detecte anomalias de preços em tempo hábil e gere sinais de negociação precisos.

Em segundo lugar, a combinação do volume de negociação também aumenta a aplicabilidade prática da estratégia.

No geral, a estratégia combina com êxito a filtragem Kalman, a reversão média, a análise do volume de negociação e outras técnicas para formar uma estratégia de negociação quantitativa robusta.

Análise de riscos

Embora a estratégia seja teórica e tecnicamente válida, ainda existem alguns riscos potenciais na utilização real que necessitam de atenção.

O primeiro é o risco do modelo. Alguns parâmetros-chave no modelo de filtro de Kalman, como a variância do ruído do processo, a variância do ruído da observação, etc., precisam ser estimados com base em dados históricos.

Em segundo lugar, o risco de custos de deslizamento. O comércio freqüente incorrerá em custos de deslizamento mais altos, o que erodirá os retornos da estratégia. A otimização de parâmetros e a filtragem do volume de transações podem reduzir as transações desnecessárias até certo ponto.

Por fim, há algum risco sistémico de mercado em seguir o índice de mercado como referência. Quando todo o mercado flutua acentuadamente, a relação de preços entre ações individuais e o mercado também será anormal. A estratégia gerará então sinais errados. Podemos considerar a escolha de um índice mais estável como referência.

Orientações de otimização

A estratégia pode ser ainda melhorada:

  1. Usar modelos de aprendizagem profunda mais complexos para ajustar e prever proporções de preços.

  2. Otimizar as regras de filtragem do volume de negociação para obter configurações de limiar mais dinâmicas e inteligentes, reduzindo assim a probabilidade de transações falsas.

  3. Teste diferentes índices de mercado como referências estratégicas e escolha índices com flutuações menores e mais estáveis, reduzindo assim o impacto do risco sistémico de mercado.

  4. Incorporar análise fundamental de ações para evitar a negociação de algumas ações com fundamentes significativamente deteriorados.

  5. Usar dados intradiários de alta frequência para backtesting e otimização da estratégia.

Conclusão

A estratégia capta com sucesso flutuações anormais de preços de curto prazo em ações usando o modelo de filtro Kalman. Enquanto isso, a introdução de sinais de volume também aumenta a praticidade da estratégia. Embora ainda existam alguns riscos de modelo e riscos de mercado, esta é uma estratégia de negociação quantitativa muito promissora. Há grande espaço para melhoria e potencial de aplicação na futura otimização de modelos e sinais.


/*backtest
start: 2023-12-21 00:00:00
end: 2023-12-28 00:00:00
period: 1m
basePeriod: 1m
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/
// © xXM3GAXx

//@version=5
strategy("My strategy", overlay=true)

//SPY or QQQ
context = request.security("BTC_USDT:swap", timeframe.period, input(close))
//our stock
particular = input(close)

//ratio
src = ta.roc(particular, 1) / math.abs(ta.roc(context, 1))

//kalman calculation
Sharpness = input.float(1.0)
K = input.float(1.0)


greencolor =  color.lime
redcolor =  color.red

velocity = 0.0
kfilt = 0.0

Distance = src - nz(kfilt[1], src)
Error = nz(kfilt[1], src) + Distance * math.sqrt(Sharpness*K/ 100)
velocity := nz(velocity[1], 0) + Distance*K / 100
kfilt := Error + velocity

//2 std devs up and down
upper = kfilt[1] + 2 * ta.stdev(kfilt, input(20))
lower = kfilt[1] - 2 * ta.stdev(kfilt, input(20))

//plotting for visuals
plot(kfilt, color=velocity > 0 ? greencolor : redcolor, linewidth = 2)
plot(upper)
plot(lower)
//plot(ta.ema(ta.roc(particular, 1)/ta.roc(context, 1), 5), color = #00ffff, linewidth=2)

//volume data
vol = volume
volema = ta.ema(volume, 10)

//buy when ratio too low
longCondition = kfilt<=lower and vol>=volema
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

//sell when ratio too high
shortCondition = kfilt>=upper and vol>=volema
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)


Mais.