Estratégia de cronometragem da média móvel diferencial do oscilador

Autora:ChaoZhang, Data: 2023-12-26 14:40:12
Tags:

img

Resumo

Esta estratégia calcula a diferença entre a EMA rápida e a EMA lenta para formar o oscilador MACD, e calcula a EMA da própria MACD para formar a linha de sinal, construindo assim um sistema de filtragem dupla.

Princípio da estratégia

O indicador central desta estratégia é o oscilador MACD, que é calculado subtraindo a EMA lenta (normalmente 26 dias EMA) da EMA rápida (normalmente 12 dias EMA). A EMA rápida é mais sensível e pode capturar flutuações de preços de curto prazo. A EMA lenta responde às mudanças de preço mais lentamente. Subtraindo os dois forma um oscilador que representa a diferença entre os ciclos de preços de curto e médio prazo. A EMA (normalmente 9 dias) do próprio oscilador MACD é então calculada para obter a linha de sinal.

Os parâmetros de entrada desta estratégia são definidos para o comprimento da linha rápida, comprimento da linha lenta, fonte de preço e período de suavização da linha de sinal, respectivamente. Estes podem ser ajustados de acordo com diferentes mercados para encontrar as combinações ótimas de parâmetros. O bloco de cor de fundo mostra o prazo de backtest. A estratégia abre posições apenas dentro desse prazo.

Análise das vantagens

  1. O indicador MACD é clássico e fácil de entender, capturando eficazmente oportunidades de reversão de curto a médio prazo.

  2. A construção da EMA dupla do sistema MACD tem uma melhor suavidade do que os sistemas de MA única.

  3. Os parâmetros relativamente mais ajustáveis permitem a otimização em diferentes mercados.

  4. A combinação com os indicadores de volume ajuda a identificar sinais de alta qualidade.

Análise de riscos

  1. O MACD pode produzir mais sinais falsos em mercados oscilantes.

  2. Não pode determinar tendências e pode produzir perdas ao cruzar tendências.

  3. O prazo limitado de backtest pode ignorar condições de mercado extremas.

  4. O ajuste dos parâmetros requer mais dados de mercado para evitar a adaptação excessiva a períodos de mercado específicos.

Os riscos podem ser controlados através da incorporação de indicadores de tendência e mecanismos de stop loss.

Orientações de otimização

  1. Teste diferentes fontes de preços, como preços de fechamento, mediana, redefinição, etc.

  2. Procurar conjuntos de parâmetros ideais com base em dados mais históricos.

  3. Integrar outros indicadores para avaliar a qualidade do sinal, por exemplo, os sinais de volume.

  4. Incorporar análises de tendências e de ciclos para evitar conflitos significativos de tendências.

Conclusão

Esta estratégia capta oportunidades de reversão de curto a médio prazo através da construção de um sistema de filtro EMA duplo. Ela pertence a uma estratégia clássica e prática de tempo de mercado. Os riscos podem ser controlados por meio de otimização de parâmetros, filtragem de sinal e meios de stop loss. Incorporar ferramentas de análise de tendências para evitar picos de compra e vendas de fundos pode levar a lucros constantes.


/*backtest
start: 2022-12-19 00:00:00
end: 2023-12-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="MACD Histogram Backtest", shorttitle="MACD")

// Getting inputs
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

grow = (hist[1] < hist)
fall = (hist[1] > hist) and hist >= 0
stop = (hist[1] > hist)

plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
plot(macd, title="MACD", color=col_macd, transp=0)
plot(signal, title="Signal", color=col_signal, transp=0)

//Strategy Testing

// Component Code Start
// Example usage:
// if testPeriod()
//   strategy.entry("LE", strategy.long)
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(2, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

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

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=input.bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
// Component Code Stop

//Entry and Close settings
if testPeriod() 
    strategy.entry("grow", true, 10, when = grow, limit = close)
    strategy.close("grow", when = fall)
    strategy.close("grow", when = stop)
    
//if testPeriod() 
//   strategy.entry("fall", false, 1000, when = fall, limit = close)
//    strategy.close("fall", when = grow)    



Mais.