Estratégia de negociação MACD baseada no EVWMA

Autora:ChaoZhang, Data: 2024-01-22 10:50:25
Tags:

img

Resumo

Esta estratégia é uma estratégia de negociação MACD baseada na Elastic Volume Weighted Moving Average (EVWMA).

Princípios

O indicador EVWMA incorpora informações de volume no cálculo das médias móveis, permitindo que as médias móveis reflitam com mais precisão as mudanças de preço. Os cálculos da linha rápida e da linha lenta nesta estratégia são ambos baseados no EVWMA. As configurações de parâmetros da linha rápida são mais sensíveis para capturar flutuações de preços de curto prazo; as configurações de parâmetros da linha lenta são mais robustas para filtrar algum ruído. O MACD formado pelos dois EVWMA desencadeia sinais longos e curtos no crossover, e o histograma fornece instruções de negociação visualmente aprimoradas.

Análise das vantagens

A maior vantagem desta estratégia é que, alavancando o poder do indicador EVWMA, as configurações de parâmetros da estratégia MACD se tornam mais estáveis e os sinais de negociação se tornam mais claros.

Análise de riscos

O principal risco desta estratégia é que o próprio MACD tem um certo atraso e não pode capturar prontamente as reversões de preços. Além disso, as configurações de parâmetros do EVWMA também afetam o desempenho da estratégia.

Para mitigar os riscos, os parâmetros devem ser ajustados adequadamente para ter uma diferença moderada entre as linhas rápidas e lentas. O histograma pode ajudar a julgar se um ajuste de parâmetro é necessário.

Orientações de otimização

Os principais aspectos para a otimização desta estratégia incluem:

  1. Usar técnicas de definição de parâmetros adaptativos para ajustar automaticamente os parâmetros EVWMA de acordo com as condições do mercado, a fim de garantir a clareza do sinal.

  2. Aumentar os mecanismos de stop loss para controlar eficazmente as perdas individuais.

  3. Incorporar outros indicadores para filtrar sinais falsos, por exemplo, combinar com o volume para apenas desencadear sinais durante mudanças significativas de preço.

  4. Otimizar as seleções de pontos de entrada. Atualmente, a estratégia abre posições em cruzamento de linha zero do MACD. Testar se o uso de divergência funciona melhor pode ser examinado.

Conclusão

Esta estratégia utiliza as vantagens do indicador EVWMA para construir uma estratégia MACD simples e prática. Tem melhor estabilidade e adaptabilidade. Ao mesmo tempo, também tem o problema de atraso inerente ao MACD. Podemos melhorar a robustez da estratégia através da otimização de parâmetros adaptativos, design de stop loss, filtragem de sinal e outros aspectos.


/*backtest
start: 2023-01-15 00:00:00
end: 2024-01-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("QuantNomad - EVWMA MACD Strategy", shorttitle = "EVWMA MACD", overlay = false)

// Inputs
fast_sum_length = input(10, title = "Fast Sum Length",  type = input.integer)
slow_sum_length = input(20, title = "Slow Sum Length",  type = input.integer)
signal_length   = input(9,  title = "Signal Smoothing", type = input.integer, minval = 1, maxval = 50)

// Calculate Volume Period
fast_vol_period = sum(volume, fast_sum_length)
slow_vol_period = sum(volume, slow_sum_length)

// Calculate EVWMA
fast_evwma = 0.0
fast_evwma := ((fast_vol_period - volume) * nz(fast_evwma[1], close) + volume * close) / (fast_vol_period)

// Calculate EVWMA
slow_evwma = 0.0
slow_evwma := ((slow_vol_period - volume) * nz(slow_evwma[1], close) + volume * close) / (slow_vol_period)

// Calculate MACD
macd   = fast_evwma - slow_evwma
signal = ema(macd, signal_length)
hist   = macd - signal

// Plot 
plot(hist,   title = "Histogram", style = plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? #26A69A : #B2DFDB) : (hist[1] < hist ? #FFCDD2 : #EF5350) ), transp=0 )
plot(macd,   title = "MACD",      color = #0094ff, transp=0)
plot(signal, title = "Signal",    color = #ff6a00, transp=0)

// Strategy
strategy.entry("Long",   true, when = crossover(fast_evwma, slow_evwma))
strategy.entry("Short", false, when = crossunder(fast_evwma, slow_evwma))

Mais.