Die MACD Stochastics Range Breakout Strategie kombiniert die MACD und Stochastics Indikatoren zu einer quantitativen Handelsstrategie. Sie versucht, die Trendrichtung der Aktienkurse zu identifizieren und Positionen einzunehmen, wenn die Preise aus den Bereichszonen ausbrechen.
Bei Positionen berücksichtigt diese Strategie sowohl die Signale des MACD als auch die Stochastics, um die Qualität der Einträge zu verbessern.
Die MACD Stochastics Range Breakout Strategie basiert hauptsächlich auf folgenden Prinzipien:
Insbesondere verwendet die Strategie die MACDDIFF-Linie, die über die DEA-Linie kreuzt, um Aufwärtstrendsignale zu bestimmen.
In der Zwischenzeit erzeugen Kreuzungen zwischen der K-Linie und der D-Linie der Stochastics um Überkauf-/Überverkaufsbereiche (Default 30 und 70) ebenfalls Handelssignale.
Wenn der MACD und der Stochastiker ausgerichtete Signale geben, wird die Strategie eine Position einnehmen.
Nach dem Eintritt werden Stop-Loss- und Take-Profit-Punkte so eingestellt, dass einzelne Handelsverluste rationell kontrolliert und Gewinne erzielt werden.
Die MACD Stochastics Range Breakout Strategie weist folgende Stärken auf:
Die Kombination von Indikatoren verbessert die Signalqualität
Die Verwendung von MACD und Stochastics filtert einige gefälschte Signale aus und ermöglicht eine bessere Einstiegsqualität.
Erfassung von Ausbruchbewegungen und Trendhandel
Die Strategie ist darauf spezialisiert, nach dem Ranging bedeutende Ausbruchsbewegungen zu erfassen.
Optimiertes Stop-Loss-/Take-Profit-Mechanismus kontrolliert Risiken wirksam
Die eingebaute Stop-Loss-/Take-Profit-Logik begrenzt den Einzelhandelsverlust und die rechtzeitige Sperrung der Gewinne.
Trotz sorgfältiger Konzeption hat die MACD Stochastics Range Breakout Strategie einige inhärente Risiken:
Fehlt der perfekte Einstiegszeitpunkt
Falsche Ausbrüche sind häufig, bevor gültige Ausbrüche auftreten.
Ausbruch versagt
Auch wenn vor Eintritt angemessene Vorbereitungen getroffen werden, sind noch immer fehlgeschlagene Ausbrüche möglich, die zu Verlusten führen.
Fehlende Optimierung der Parameter
Unangemessene Parameter-Einstellungen beeinträchtigen die Strategie.
Um den oben genannten Risiken entgegenzuwirken, können folgende Optimierungen vorgenommen werden:
Hinzufügen anderer Indikatoren zu Filtersignalen
Manuelle Intervention zur Gewährleistung eines gültigen Ausbruchs
Strenge Optimierungstests für mehrere Parametermengen
Es bleibt Raum für eine weitere Optimierung der MACD Stochastics Range Breakout Strategie:
Optimieren der MACD-Parameter, um die beste Kombination zu finden
Optimieren Sie die Stochastikparameter, um die beste Kombination zu finden
Einbeziehung anderer Indikatoren wie KDJ, BOLL zur Verbesserung der Eingangsqualität
Verschiedene Haltezeiträume testen, Stop-Loss/Take-Profit optimieren
Versuchskreuzparameterunterschiede
Einführung von Algorithmen für maschinelles Lernen zur automatisierten Optimierung von Parametern
Die MACD Stochastics Range Breakout Strategie profitiert von Range Breakouts, indem sie auf der Grundlage ausgerichteter Signale von MACD und Stochastics eingeht. Der Stop-Loss/Take-Profit-Mechanismus kontrolliert die Risiken weiter.
/*backtest start: 2022-12-04 00:00:00 end: 2023-12-10 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="macd stoch strategy", shorttitle="benzo MACD stoch",overlay=true) // Getting inputs fast_length = input(title = "Fast Length", defval = 180) slow_length = input(title = "Slow Length", defval = 390) src = input(title = "Source", defval = close) signal_length = input.int(title = "Signal Smoothing", minval = 1, maxval = 500, defval = 135) 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"]) // 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 // hline(0, "Zero Line", color = color.new(#787B86, 50)) // plot(hist, title = "Histogram", style = plot.style_columns, color = (hist >= 0 ? (hist[1] < hist ? #26A69A : #B2DFDB) : (hist[1] < hist ? #FFCDD2 : #FF5252))) // plot(macd, title = "MACD", color = #2962FF) // plot(signal, title = "Signal", color = #FF6D00) periodK = input.int(14, title="%K Length", minval=1) smoothK = input.int(1, title="%K Smoothing", minval=1) periodD = input.int(3, title="%D Smoothing", minval=1) k = ta.sma(ta.stoch(close, high, low, periodK), smoothK) d = ta.sma(k, periodD) // plot(k, title="%K", color=#2962FF) // plot(d, title="%D", color=#FF6D00) // h0 = hline(80, "Upper Band", color=#787B86) // hline(50, "Middle Band", color=color.new(#787B86, 50)) // h1 = hline(20, "Lower Band", color=#787B86) // fill(h0, h1, color=color.rgb(33, 150, 243, 90), title="Background") // Make inputs that set the take profit % (optional) longProfitPerc = input.float(3, title="Long Take Profit (%)", minval=0.0, step=0.1) * 0.01 shortProfitPerc = input.float(3, title="Short Take Profit (%)",minval=0.0, step=0.1) * 0.01 // Calculate trading conditions enterLong = macd>signal and ta.crossover(k,30) enterShort = macd<signal and ta.crossunder(k,70) // Figure out take profit price longExitPrice = strategy.position_avg_price * (1 + longProfitPerc) shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc) // Plot take profit values for confirmation plot(strategy.position_size > 0 ? longExitPrice : na, color=color.green, style=plot.style_circles, linewidth=3, title="Long Take Profit") plot(strategy.position_size < 0 ? shortExitPrice : na, color=color.red, style=plot.style_circles, linewidth=3, title="Short Take Profit") // Submit entry orders if enterLong strategy.entry("long", strategy.long) if enterShort strategy.entry("short", strategy.short) // STEP 3: // Submit exit orders based on take profit price if strategy.position_size > 0 strategy.exit("long TP", limit=longExitPrice) if strategy.position_size < 0 strategy.exit("short TP", limit=shortExitPrice)