This strategy is based on the zero-lag version of the MACD (Moving Average Convergence Divergence) indicator, which captures short-term trends by quickly responding to price changes, enabling high-frequency trading. The strategy uses two moving averages with different periods (fast and slow lines) to construct the MACD indicator and introduces a zero-lag algorithm to eliminate the delay between the indicator and the price, improving the timeliness of signals. Additionally, the crossover of the signal line and the MACD line is used as buy and sell signals, and alerts are set up to help traders seize trading opportunities in a timely manner.
The MACD Dual Crossover Zero Lag Trading Strategy achieves high-frequency trading by quickly responding to price changes and capturing short-term trends. The zero-lag algorithm and dual moving average design improve the timeliness and accuracy of signals. The strategy has certain advantages, such as intuitive signals and convenient operation, but also faces risks such as overtrading and parameter sensitivity. In the future, the strategy can be optimized by introducing trend confirmation indicators, parameter optimization, multi-factor models, etc., to improve the robustness and profitability of the strategy.
/*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)