Estratégia de ruptura da DEMA do MACD com atraso zero

Autora:ChaoZhang, Data: 2023-09-11 14:43:52
Tags:

O indicador MACD DEMA calcula a diferença entre a linha rápida DEMA e a linha lenta DEMA, com processamento de atraso zero, eliminando efetivamente a emissão de atraso do MACD regular.

As regras de negociação são: ir longo quando o MACD de atraso zero cruza acima da linha 0, e ir curto quando o MACD cruza abaixo da linha 0.

A vantagem desta estratégia de MACD de atraso zero é que pode capturar mudanças de tendência de forma mais sensível. Usando DEMA em vez de EMA também filtra falhas. No entanto, o MACD em si tem capacidade limitada de julgar a ação de preços complexos, com algum risco de sinais falsos.

Em resumo, a estratégia de ruptura do MACD DEMA com atraso zero funciona muito bem em movimentos de tendência fortes, capturando oportunidades rapidamente. Mas tem um desempenho inferior em períodos de faixa, exigindo uso cauteloso. Somente através de otimização contínua e controle de risco rigoroso, essa estratégia pode ser aplicada com sucesso no longo prazo.


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

//@version=4
// strategy(title="Patron04 MACD DEMA Strategy",default_qty_type = strategy.percent_of_equity,default_qty_value = 3500, overlay=true)

testStartYear = input(2000, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2100, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false

sma = input(12,title='DEMA Courte')
lma = input(26,title='DEMA Longue')
tsp = input(9,title='Signal')
dolignes = input(true,title="Lignes")

MMEslowa = ema(close,lma)
MMEslowb = ema(MMEslowa,lma)
DEMAslow = ((2 * MMEslowa) - MMEslowb )

MMEfasta = ema(close,sma)
MMEfastb = ema(MMEfasta,sma)
DEMAfast = ((2 * MMEfasta) - MMEfastb)

LigneMACDZeroLag = (DEMAfast - DEMAslow)

MMEsignala = ema(LigneMACDZeroLag, tsp)
MMEsignalb = ema(MMEsignala, tsp)
Lignesignal = ((2 * MMEsignala) - MMEsignalb )

MACDZeroLag = (LigneMACDZeroLag - Lignesignal)

long = LigneMACDZeroLag > 0
short = LigneMACDZeroLag < 0

if testPeriod()

    strategy.entry("Long", strategy.long,when=long)
    strategy.entry("Short", strategy.short,when=short)







Mais.