Diese Strategie nutzt das Dual Moving Average Crossover Prinzip, kombiniert den MACD-Indikator für Trendbeurteilung und Cross-Background-Highlighting und bestätigt Einträge mit Musterpunkten, mit dem Ziel, mittelfristige Trends auf dem Markt zu erfassen.
Die Strategie erstellt doppelte gleitende Durchschnitte unter Verwendung von schnellen EMA und langsamen EMA und bestimmt die Trendrichtung basierend auf dem Übergang zwischen den schnellen und langsamen Linien.
Nach dem Code beträgt die schnelle Linienlänge 12 und die langsame Linienlänge 26, was kurz- und langfristige Trends darstellt.
Crossover-Logik:
Trend_up = MACD > Signal: Schnelle Linie überläuft langsame Linie, was auf einen kurzfristigen Aufwärtstrend hinweist
Trend_dn = macd < Signal: Schnelle Linie unter der langsamen Linie, was auf einen kurzfristigen Abwärtstrend hinweist
Erkennung von Kreuzungspunkten:
cross_UP = Signal[1] >= macd[1] und Signal < macd: Schnelle Linie kreuzt langsame Linie von unten
cross_DN = Signal[1] <= macd[1] und Signal > macd: Schnelle Linie kreuzt langsame Linie von oben
Die Farbwechselung des Histogramms bestimmt die Impulsstärke:
histA_IsUp = Histogrammsäule wächst und größer als 0, Momentum stärkt sich im Aufwärtstrend
histA_IsDown = Histogrammsäule sinkend, aber immer noch größer als 0, Momentum schwächer im Aufwärtstrend
Die gleiche Logik unter 0
Doppel gleitende Durchschnitte bestimmen den mittelfristigen Trend, vermeiden kurzfristigen Lärm
MACD hilft bei der Beurteilung von kurzfristigen Trends und Dynamik für eine höhere Rentabilität
Histogramm-Farbänderung hilft, bessere Eingangszeitpunkte zu identifizieren
Crossover-Hintergrundfarbe hebt Signale hervor
Anpassungsfähige gleitende Durchschnittsperioden für verschiedene Marktumgebungen
Regelmäßige MACD-Parameter optimieren den Indikator
Bereitstellung mehrerer Eingabebestätigungen: Trend, Crossover, Musterbruch
Doppelfinanzierte Finanzinstitute, die nicht auf kurzfristige Schwankungen reagieren, können kurzfristige Chancen verpassen
Ein schlechter MACD-Effekt bei unsachgemäßen Parametereinstellungen kann zu falschen Signalen führen
Einträge, die sich ausschließlich auf MAs und MACD stützen, haben einige blinde Punkte
Keine Stop-Loss-Mechanismen führen zu einem Risiko für zunehmende Verluste
Mangelnde strenge Geldverwaltung und Positionsgröße
Mögliche Lösungen:
Kombination anderer Indikatoren zur Festlegung von kurzfristigen Swing-Bereichern und zur Kontrolle des Risikos
Optimierung der MACD-Parameter und Test auf verschiedenen Märkten
Hinzufügen von Muster, Impuls usw., um Signale zu bestätigen
Einrichtung von Stop-Loss-Mechanismen zur Begrenzung der Verlustgröße
Hinzufügen eines Geldmanagementmoduls zu den Größen von Positionen auf der Grundlage des Kapitals
Prüfung und Optimierung von Kombinationen von MA-Parametern für eine höhere Anpassungsfähigkeit des Marktes
Versuchen Sie verschiedene MA-Typen wie VWAP, Bollinger Midline usw.
Um falsche Ausbrüche zu vermeiden, sollten Sie das Handelsvolumen berücksichtigen
Einbeziehung von RSI usw. zur Bestätigung von Überkauf/Überverkauf
Es sollten robuste Stop-Loss-Mechanismen wie Trailing Stop, Volatility Stop usw. aufgebaut werden.
Einbeziehung von Positionsgrößen auf der Grundlage der Kontogröße
Maschinelles Lernen für die Optimierung von Parametern
Erweiterung des Strategieuniversums für einen verbesserten Portfolioansatz
Diese Strategie integriert die doppelte gleitende Durchschnitts-Trendfilterung und MACD-Impuls, fügt Mustermerkmale hinzu und baut ein relativ stabiles mittelfristiges Handelssystem auf. Der Hauptvorteil liegt darin, den großen Trend zu erfassen und gleichzeitig kurzfristigen Lärm zu vermeiden. Es gibt aber auch Bereiche, die verbessert werden könnten, wie das Hinzufügen von Stop-Loss-Mechanismen und Risikomanagement. Insgesamt dient dies als wertvolles konzeptionelles Beispiel, erfordert aber umfassende Tests und Verfeinerungen für den Live-Handel.
/*backtest start: 2022-11-15 00:00:00 end: 2023-11-15 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="Histogram MacD MVP_V2.1", shorttitle="Histogram MacD MVP_2.1") //Plot Inputs res = input.timeframe("", "Indicator TimeFrame") fast_length = input.int(title="Fast Length", defval=12) slow_length = input.int(title="Slow Length", defval=26) src = input.source(title="Source", defval=close) signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 999, defval = 9) 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"]) // Show Plots T/F show_macd = input.bool(true, title="Show MACD Lines", group="Show Plots?", inline="SP10") show_macd_LW = input.int(3, minval=0, maxval=5, title = "MACD Width", group="Show Plots?", inline="SP11") show_signal_LW= input.int(2, minval=0, maxval=5, title = "Signal Width", group="Show Plots?", inline="SP11") show_Hist = input.bool(true, title="Show Histogram", group="Show Plots?", inline="SP20") show_hist_LW = input.int(5, minval=0, maxval=5, title = "-- Width", group="Show Plots?", inline="SP20") show_trend = input.bool(true, title = "Show MACD Lines w/ Trend Color", group="Show Plots?", inline="SP30") show_HB = input.bool(false, title="Show Highlight Price Bars", group="Show Plots?", inline="SP40") show_cross = input.bool(false, title = "Show BackGround on Cross", group="Show Plots?", inline="SP50") show_dots = input.bool(true, title = "Show Circle on Cross", group="Show Plots?", inline="SP60") show_dots_LW = input.int(5, minval=0, maxval=5, title = "-- Width", group="Show Plots?", inline="SP60") //show_trend = input(true, title = "Colors MACD Lines w/ Trend Color", group="Show Plots?", inline="SP5") // MACD Lines colors col_macd = input.color(#FF6D00, "MACD Line ", group="Color Settings", inline="CS1") col_signal = input.color(#2962FF, "Signal Line ", group="Color Settings", inline="CS1") col_trnd_Up = input.color(#4BAF4F, "Trend Up ", group="Color Settings", inline="CS2") col_trnd_Dn = input.color(#B71D1C, "Trend Down ", group="Color Settings", inline="CS2") // Histogram Colors col_grow_above = input.color(#26A69A, "Above Grow", group="Histogram Colors", inline="Hist10") col_fall_above = input.color(#FF5252, "Fall", group="Histogram Colors", inline="Hist10") col_grow_below = input.color(#FF5252, "Below Grow", group="Histogram Colors", inline="Hist20") col_fall_below = input.color(#f8f524, "Fall", group="Histogram Colors", inline="Hist20") // Alerts T/F Inputs alert_Long = input.bool(true, title = "MACD Cross Up", group = "Alerts", inline="Alert10") alert_Short = input.bool(true, title = "MACD Cross Dn", group = "Alerts", inline="Alert10") alert_Long_A = input.bool(false, title = "MACD Cross Up & > 0", group = "Alerts", inline="Alert20") alert_Short_B = input.bool(false, title = "MACD Cross Dn & < 0", group = "Alerts", inline="Alert20") // Calculating fast_ma = request.security(syminfo.tickerid, res, sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)) slow_ma = request.security(syminfo.tickerid, res, sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)) macd = fast_ma - slow_ma signal = request.security(syminfo.tickerid, res, sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)) hist = macd - signal // MACD Trend and Cross Up/Down conditions trend_up = macd > signal trend_dn = macd < signal cross_UP = signal[1] >= macd[1] and signal < macd cross_DN = signal[1] <= macd[1] and signal > macd cross_UP_A = (signal[1] >= macd[1] and signal < macd) and macd > 0 cross_DN_B = (signal[1] <= macd[1] and signal > macd) and macd < 0 // Condition that changes Color of MACD Line if Show Trend is turned on.. trend_col = show_trend and trend_up ? col_trnd_Up : trend_up ? col_macd : show_trend and trend_dn ? col_trnd_Dn: trend_dn ? col_macd : na //Var Statements for Histogram Color Change var bool histA_IsUp = false var bool histA_IsDown = false var bool histB_IsDown = false var bool histB_IsUp = false histA_IsUp := hist == hist[1] ? histA_IsUp[1] : hist > hist[1] and hist > 0 histA_IsDown := hist == hist[1] ? histA_IsDown[1] : hist < hist[1] and hist > 0 histB_IsDown := hist == hist[1] ? histB_IsDown[1] : hist < hist[1] and hist <= 0 histB_IsUp := hist == hist[1] ? histB_IsUp[1] : hist > hist[1] and hist <= 0 hist_col = histA_IsUp ? col_grow_above : histA_IsDown ? col_fall_above : histB_IsDown ? col_grow_below : histB_IsUp ? col_fall_below :color.silver // Plot Statements //Background Color bgcolor(show_cross and cross_UP ? col_trnd_Up : na, editable=false) bgcolor(show_cross and cross_DN ? col_trnd_Dn : na, editable=false) //Highlight Price Bars barcolor(show_HB and trend_up ? col_trnd_Up : na, title="Trend Up", offset = 0, editable=false) barcolor(show_HB and trend_dn ? col_trnd_Dn : na, title="Trend Dn", offset = 0, editable=false) //Regular Plots plot(show_Hist and hist ? hist : na, title="Histogram", style=plot.style_columns, color=color.new(hist_col ,0),linewidth=show_hist_LW) plot(show_macd and signal ? signal : na, title="Signal", color=color.new(col_signal, 0), style=plot.style_line ,linewidth=show_signal_LW) plot(show_macd and macd ? macd : na, title="MACD", color=color.new(trend_col, 0), style=plot.style_line ,linewidth=show_macd_LW) hline(0, title="0 Line", color=color.new(color.gray, 0), linestyle=hline.style_dashed, linewidth=1, editable=false) plot(show_dots and cross_UP ? macd : na, title="Dots", color=color.new(trend_col ,0), style=plot.style_circles, linewidth=show_dots_LW, editable=false) plot(show_dots and cross_DN ? macd : na, title="Dots", color=color.new(trend_col ,0), style=plot.style_circles, linewidth=show_dots_LW, editable=false) //Alerts if alert_Long and cross_UP alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD Crosses Up.", alert.freq_once_per_bar_close) if alert_Short and cross_DN alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD Crosses Down.", alert.freq_once_per_bar_close) //Alerts - Stricter Condition - Only Alerts When MACD Crosses UP & MACD > 0 -- Crosses Down & MACD < 0 if alert_Long_A and cross_UP_A alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD > 0 And Crosses Up.", alert.freq_once_per_bar_close) if alert_Short_B and cross_DN_B alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD < 0 And Crosses Down.", alert.freq_once_per_bar_close) if (histA_IsUp) strategy.entry("buy", strategy.long, comment="buy") if (histA_IsDown) strategy.entry("sell", strategy.short, comment="sell")