Estratégia de média móvel dupla 360°

Autora:ChaoZhang, Data: 2024-02-02 14:29:59
Tags:

img

Resumo

A estratégia de média móvel dupla 360° é uma estratégia de negociação quantitativa que incorpora médias móveis duplas e determinação da força da tendência.

Estratégia lógica

A lógica básica da Estratégia 360° da média móvel dupla é:

  1. Calcular as médias móveis de 1 minuto e filtradas por Kalman;
  2. Calcular o ângulo de tangência com base na diferença de preço entre as duas médias móveis;
  3. Acumular ângulos tangentes para determinar sinais de força de tendência;
  4. Emissão de sinais de negociação com base em se os ângulos tangentes acumulados excedem limiares pré-estabelecidos.

Especificamente, a estratégia define a média móvel bruta de 1 minuto e a média móvel filtrada por Kalman. O filtro Kalman elimina algum ruído da média móvel para torná-la mais suave.

A estratégia escolhe 30 minutos como o período de cálculo para somar todos os ângulos tangentes positivos e negativos dentro desse período.

Análise das vantagens

As principais vantagens da estratégia de média móvel dupla 360° são:

  1. As médias móveis filtram o ruído do mercado a curto prazo para decisões de negociação mais fiáveis;
  2. Os ângulos tangentes quantificam a força da tendência, evitando a subjetividade de julgar apenas pelos padrões de média móvel;
  3. A soma de múltiplos ângulos tangentes tem melhores efeitos de redução de ruído, resultando em sinais de negociação mais fiáveis;
  4. Em comparação com as estratégias de média móvel única, as médias móveis duplas combinadas com as determinações da força da tendência tornam a estratégia mais abrangente e robusta.

Análise de riscos

A estratégia de média móvel dupla 360° também traz alguns riscos:

  1. As médias móveis atrasam as variações de preços e podem perder pontos de viragem da tendência a curto prazo;
  2. A dependência exclusivamente do sinal de força da tendência acumulada pode ser perturbada pela volatilidade do mercado;
  3. As configurações incorretas dos parâmetros (tais como comprimentos dos períodos de cálculo) podem levar à ausência de negociações ou à geração de sinais incorretos.

Para mitigar os riscos acima referidos, podem ser adotadas medidas como a redução do período da média móvel, a otimização das combinações de parâmetros, a adição de mecanismos de stop-loss.

Orientações de otimização

A estratégia de média móvel dupla 360° pode ser ainda mais otimizada:

  1. Incorporar médias móveis adaptativas que ajustem parâmetros com base na volatilidade do mercado;
  2. Referenciar vários períodos de média móvel para formar combinações de parâmetros otimizadas;
  3. Adição de módulos dinâmicos de determinação de tendências com base na volatilidade, nos volumes de negociação, etc.;
  4. Auxiliar no ajuste de parâmetros ou decisões comerciais com modelos de aprendizagem de máquina.

Resumo

A estratégia de média móvel dupla 360° utiliza filtragem de média móvel e julgamentos de tendência de ângulo tangente quantitativo para alcançar uma estratégia comercial quantitativa relativamente robusta. Em comparação com indicadores técnicos únicos, esta estratégia constitui uma consideração mais abrangente e tem uma praticidade mais forte.


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


Mais.