Diese Strategie ist eine automatisierte Handelsstrategie, die auf dem doppelten gleitenden Durchschnitts-Crossover des MACD-Technischen Indikators basiert.
Die Strategie berechnet zunächst die drei Linien des MACD-Indikators: schnelle Linie, langsame Linie und Histogramm. Die schnelle Linie ist ein schnellerer gleitender Durchschnitt über einen kürzeren Zeitraum, während die langsame Linie ein langsamerer gleitender Durchschnitt über einen längeren Zeitraum ist. Das Histogramm ist der Unterschied zwischen den schnellen und langsamen Linien. Wenn die schnelle Linie über die langsame Linie kreuzt, ist es ein goldenes Kreuzsignal, das ein Kaufsignal anzeigt. Wenn die schnelle Linie unter die langsame Linie kreuzt, ist es ein Todeskreuzsignal, das ein Verkaufssignal anzeigt.
Die Strategie nutzt diese Logik, um auf Goldkreuze lang zu gehen und auf Todkreuze nahe zu gehen; oder auf Todkreuze kurz zu gehen und auf Goldkreuze nahe zu stehen, um automatisch dem Trend zu folgen. In der Zwischenzeit beurteilt die Strategie auch, ob die absolute MACD-Linie positiv oder negativ ist, um falsche Signale zu vermeiden und Trendumkehrpunkte wirklich zu erfassen.
Risikominderung:
Die Strategie kann in folgenden Aspekten verbessert werden:
Einbeziehung anderer Indikatoren wie KDJ, Bollinger Bands usw., um Signale zu bestätigen und falsche Signale zu filtern
Verbesserung des Eingangsmechanismus, z. B. Hinzufügen eines Breakout-Filters, um vorzeitige oder verspätete Eingaben zu vermeiden
Optimierung der Parameter-Einstellungen, Anpassung von schnellen und langsamen Zeilen auf der Grundlage verschiedener Zeitrahmen und Marktregime
Hinzufügen von Stop Loss zur Kontrolle von Einzelhandelsverlusten
Erweitern Sie sich auf andere Produkte wie Forex, Kryptowährungen usw.
/*backtest start: 2023-01-16 00:00:00 end: 2024-01-22 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © DeMindSET //@version=4 strategy("MACD Trend Follow Strategy", overlay=false) // Getting inputs LSB = input(title="Long/Short", defval="Long only", options=["Long only", "Short only" , "Both"]) fast_length = input(title="Fast Length", type=input.integer, defval=12) slow_length = input(title="Slow Length", type=input.integer, defval=26) src = input(title="Source", type=input.source, defval=close) signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9) sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false) sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false) // Plot colors col_grow_above = #26A69A col_grow_below = #FFCDD2 col_fall_above = #B2DFDB col_fall_below = #EF5350 col_macd = #0094ff col_signal = #ff6a00 // Calculating fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length) slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length) macd = fast_ma - slow_ma signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length) hist = macd - signal plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 ) plot(macd, title="MACD", color=col_macd, transp=0) plot(signal, title="Signal", color=col_signal, transp=0) // Bull= macd > signal Bear= macd < signal ConBull=macd>0 ConBear=macd<0 // Green= Bull and ConBull Red= Bear and ConBear Yellow= Bull and ConBear Blue= Bear and ConBull // bcolor = Green ? color.green : Red ? color.red : Yellow ? color.yellow : Blue ? color.blue : na barcolor(color=bcolor) // === INPUT BACKTEST RANGE === FromYear = input(defval = 2019, title = "From Year", minval = 1920) FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2009) ToMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true // create function "within window of time" if LSB == "Long only" and Green strategy.entry("L",true) if LSB == "Long only" and Red strategy.close("L",qty_percent=100,comment="TP Long") if LSB == "Both" and Green strategy.entry("L",true) if LSB == "Both" and Red strategy.entry("S",false) if LSB == "Short only" and Red strategy.entry("S",false) if LSB == "Short only" and Green strategy.close("S",qty_percent=100,comment="TP Short")