
Esta estratégia cria um oscilador MACD através do cálculo do diferencial entre o EMA de linha rápida e o EMA de linha lenta, e, em seguida, cria uma linha de sinal através do cálculo da linha média do MACD, construindo assim um sistema de filtro duplo. Quando a linha MACD atravessa a linha de sinal de cima para baixo, gera um sinal de compra, e quando a linha MACD atravessa a linha de sinal de cima para baixo, gera um sinal de venda, aproveitando as flutuações de curto e médio prazo do preço.
O indicador central desta estratégia é o MACD oscilante, que é calculado pela linha rápida EMA (geralmente definida como a EMA de 12 dias) menos a linha lenta EMA (geralmente definida como a EMA de 26 dias). A linha rápida EMA é mais sensível e consegue capturar os movimentos de preços de curto prazo; a linha lenta EMA responde mais lentamente às mudanças de preços.
Esta estratégia define os parâmetros de entrada como comprimento de linha rápida, comprimento de linha lenta, fonte de preço e comprimento de linha de sinal. O ciclo de suavização pode ser ajustado de acordo com diferentes mercados para encontrar a melhor combinação de parâmetros. O bloco de cores de fundo mostra o intervalo de tempo de retorno.
Os indicadores MACD são clássicos e fáceis de entender, e podem ser usados para capturar oportunidades de inversão de curto e médio prazo.
Um sistema MACD construído com duas EMAs tem melhor suavidade do que um sistema MA único.
Os parâmetros podem ser ajustados e otimizados para diferentes mercados.
Indicadores de massa combinados identificam sinais de alta qualidade.
Em situações de choque, o MACD produz mais sinais de erro.
A falta de conhecimento sobre as tendências pode resultar em prejuízos.
O limite de tempo de detecção pode ignorar situações extremas.
A configuração dos parâmetros requer que a combinação de mais dados de mercado seja otimizada, ou pode ser um overfit de um segmento de mercado.
O risco pode ser controlado através da combinação de indicadores de avaliação de tendências e configuração de mecanismos de parada de perdas. Ao mesmo tempo, a ampliação do escopo de ressonância e o espaço de amostragem do mercado são otimizados para os parâmetros.
Teste diferentes fontes de preços, como preço de fechamento, preço médio, preço de reposição, etc.
Buscar a melhor combinação de parâmetros com base em mais dados históricos.
Integrar outros indicadores para determinar a qualidade do sinal. Por exemplo, sinal de volume de tráfego.
Combinação de tendências e julgamentos de bandas para evitar conflitos significativos com as tendências.
Esta estratégia é uma estratégia clássica e prática de escolha do momento, através da construção de filtros duplos de EMA, capturando o fenômeno de inversão do ciclo de curta linha no preço. O risco pode ser controlado por meio de otimização de parâmetros, filtragem de sinal e paralisia. Ao mesmo tempo, combinando indicadores de julgamento de tendência, evitando o topo e o fundo, pode obter ganhos estáveis.
/*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)