
La stratégie est basée sur la version zéro retard de l’indicateur MACD, qui permet de réaliser des transactions à haute fréquence en répondant rapidement aux variations de prix, en capturant les tendances à court terme. La stratégie utilise deux moyennes mobiles de différentes périodes (la moyenne rapide et la moyenne lente) pour construire l’indicateur MACD et introduire un algorithme zéro retard, éliminant le retard entre l’indicateur et le prix et améliorant la rapidité du signal.
La stratégie de négociation MACD double conversion à zéro décalage permet de négocier à haute fréquence en répondant rapidement aux variations de prix, en capturant les tendances à court terme. La conception de l’algorithme à zéro décalage et de la double moyenne mobile améliore la rapidité et l’exactitude du signal. La stratégie présente certains avantages, tels que l’intuition du signal, la facilité d’utilisation, etc., mais présente également des risques d’excès de trading, de sensibilité aux paramètres, etc.
/*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)