
Cette stratégie prend ses décisions de négociation en fonction des caractéristiques du changement de dynamique du MACD. Le cœur de la stratégie est de prédire les éventuelles fourches et les fourches mortes en observant les tendances du changement du histogramme du MACD. La stratégie ne se concentre pas uniquement sur les signaux de croisement du MACD traditionnel.
La stratégie utilise une version améliorée du système d’indicateurs MACD, comprenant le calcul des différences entre les moyennes mobiles rapides (EMA12) et les moyennes mobiles lentes (EMA26), ainsi que des lignes de signal basées sur 2 cycles. La logique de négociation de base est basée sur les points clés suivants:
La stratégie utilise de manière innovante les caractéristiques de changement dynamique du diagramme de la colonne MACD pour améliorer et optimiser le système de négociation MACD traditionnel. Le mécanisme de préjugé de la stratégie permet de fournir des signaux d’entrée plus tôt, tandis que des conditions de négociation strictes et des mesures de contrôle des risques assurent la stabilité de la stratégie.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title="Demo GPT - Moving Average Convergence Divergence", shorttitle="MACD", commission_type=strategy.commission.percent, commission_value=0.1, slippage=3, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// Getting inputs
fast_length = input(title="Fast Length", defval=12)
slow_length = input(title="Slow Length", defval=26)
src = input(title="Source", defval=close)
signal_length = input.int(title="Signal Smoothing", minval=1, maxval=50, defval=2) // Set smoothing line to 2
sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])
// Date inputs
start_date = input(title="Start Date", defval=timestamp("2018-01-01T00:00:00"))
end_date = input(title="End Date", defval=timestamp("2069-12-31T23:59:59"))
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
// Strategy logic
isInDateRange = true
// Calculate the rate of change of the histogram
hist_change = hist - hist[1]
// Anticipate a bullish crossover: histogram is negative, increasing, and approaching zero
anticipate_long = isInDateRange and hist < 0 and hist_change > 0 and hist > hist[1] and hist > hist[2]
// Anticipate an exit (bearish crossover): histogram is positive, decreasing, and approaching zero
anticipate_exit = isInDateRange and hist > 0 and hist_change < 0 and hist < hist[1] and hist < hist[2]
if anticipate_long
strategy.entry("Long", strategy.long)
if anticipate_exit
strategy.close("Long")
// Plotting
hline(0, "Zero Line", color=color.new(#787B86, 50))
plot(hist, title="Histogram", style=plot.style_columns, color=(hist >= 0 ? (hist > hist[1] ? #26A69A : #B2DFDB) : (hist < hist[1] ? #FF5252 : #FFCDD2)))
plot(macd, title="MACD", color=#2962FF)
plot(signal, title="Signal", color=#FF6D00)
// Plotting arrows when anticipating the crossover
plotshape(anticipate_long, title="Long +1", location=location.belowbar, color=color.green, style=shape.arrowup, size=size.tiny, text="Long +1")
plotshape(anticipate_exit, title="Short -1", location=location.abovebar, color=color.red, style=shape.arrowdown, size=size.tiny, text="Short -1")