
Strategi ini didasarkan pada MACD (Moving Average Convergence Line) yang merupakan versi tanpa lag dari indikator MACD. Strategi ini menggunakan dua periode berbeda untuk membangun indikator MACD (moving averages, yaitu garis cepat dan garis lambat). Strategi ini menggunakan algoritma tanpa lag untuk menghilangkan lag dari indikator dan harga dan meningkatkan waktu sinyal.
Strategi perdagangan MACD dengan konversi nol lag dengan merespons perubahan harga dengan cepat, menangkap tren jangka pendek, dan memungkinkan perdagangan frekuensi tinggi. Algoritma nol lag dan desain rata-rata bergerak ganda meningkatkan waktu dan akurasi sinyal. Strategi ini memiliki keuntungan tertentu, seperti intuisi sinyal, kemudahan operasi, dll, tetapi juga ada risiko overtrading, parameter sensitif, dll.
/*backtest
start: 2024-04-23 00:00:00
end: 2024-05-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("BNM INTRADAY SETUP MACD 3M - Version 1.2", shorttitle="Zero Lag MACD Enhanced 1.2")
source = close
fastLength = input(12, title="Fast MM period", minval=1)
slowLength = input(26,title="Slow MM period", minval=1)
signalLength =input(9,title="Signal MM period", minval=1)
useEma = input(true, title="Use EMA (otherwise SMA)")
useOldAlgo = input(false, title="Use Glaz algo (otherwise 'real' original zero lag)")
showDots = input(true, title="Show symbols to indicate crossing")
dotsDistance = input(1.5, title="Symbols distance factor", minval=0.1)
// Fast line
ma1 = useEma ? ema(source, fastLength) : sma(source, fastLength)
ma2 = useEma ? ema(ma1, fastLength) : sma(ma1, fastLength)
zerolagEMA = ((2 * ma1) - ma2)
// Slow line
mas1 = useEma ? ema(source, slowLength) : sma(source, slowLength)
mas2 = useEma ? ema(mas1, slowLength) : sma(mas1, slowLength)
zerolagslowMA = ((2 * mas1) - mas2)
// MACD line
ZeroLagMACD = zerolagEMA - zerolagslowMA
// Signal line
emasig1 = ema(ZeroLagMACD, signalLength)
emasig2 = ema(emasig1, signalLength)
signal = useOldAlgo ? sma(ZeroLagMACD, signalLength) : (2 * emasig1) - emasig2
hist = ZeroLagMACD - signal
upHist = (hist > 0) ? hist : 0
downHist = (hist <= 0) ? hist : 0
p1 = plot(upHist, color=color.blue, transp=40, style=plot.style_columns, title='Positive delta')
p2 = plot(downHist, color=color.red, transp=40, style=plot.style_columns, title='Negative delta')
zeroLine = plot(ZeroLagMACD, color=color.red, transp=0, linewidth=2, title='MACD line')
signalLine = plot(signal, color=color.blue, transp=0, linewidth=2, title='Signal')
ribbonDiff = hist > 0 ? color.blue : color.red
fill(zeroLine, signalLine, color=ribbonDiff)
circleYPosition = signal * dotsDistance
ribbonDiff2 = hist > 0 ? color.blue : color.red
// Generate dots for cross signals
plot(showDots and cross(ZeroLagMACD, signal) ? circleYPosition : na, style=plot.style_circles, linewidth=4, color=ribbonDiff2, title='Dots')
// Alerts for buy and sell signals
buySignal = cross(ZeroLagMACD, signal) and (ribbonDiff2 == color.blue) and (ZeroLagMACD < 0)
sellSignal = cross(ZeroLagMACD, signal) and (ribbonDiff2 == color.red) and (ZeroLagMACD > 0)
// Use 'strategy.entry' for placing orders in strategy context
if (buySignal)
strategy.entry("Buy", strategy.long)
alert("Buy Signal: Blue dot below zero line", alert.freq_once_per_bar_close)
if (sellSignal)
strategy.entry("Sell", strategy.short)
alert("Sell Signal: Red dot above zero line", alert.freq_once_per_bar_close)