이 전략은 MACD (Moving Average Convergence Divergence) 인디케이터의 제로 레이그 버전에 기반을 두고 있으며, 가격 변화에 신속하게 반응함으로써 단기 트렌드를 포착하여 고주파 트레이딩을 가능하게 한다. 이 전략은 MACD 인디케이터를 구성하기 위해 서로 다른 기간 (고속 및 느린 라인) 을 가진 두 개의 이동 평균을 사용하며 인디케이터와 가격 사이의 지연을 제거하기 위해 제로 레이그 알고리즘을 도입하여 신호의 시기성을 향상시킨다. 또한, 신호 라인과 MACD 라인의 크로스오버가 구매 및 판매 신호로 사용되며, 트레이더가 거래 기회를 제때 포착하는 데 도움이 되는 알레트가 설정된다.
MACD 듀얼 크로스오버 제로 레이그 트레이딩 전략은 가격 변화에 빠르게 반응하고 단기 트렌드를 포착함으로써 고주파 트레이딩을 달성합니다. 제로 레이그 알고리즘과 듀얼 이동 평균 설계는 신호의 시기적절성과 정확성을 향상시킵니다. 전략은 직관적인 신호와 편리한 운영과 같은 특정 장점이 있지만 과거래 및 매개 변수 민감성과 같은 위험도 있습니다. 미래에 전략의 견고성과 수익성을 향상시키기 위해 트렌드 확인 지표, 매개 변수 최적화, 다중 요인 모델 등을 도입하여 전략을 최적화 할 수 있습니다.
/*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)