Dieser Artikel beschreibt hauptsächlich eine Handelsstrategie, die den Relative Strength Index (RSI) und die Fibonacci-Retracement-Level kombiniert. Die Strategie berechnet zunächst die wichtigsten Fibonacci-Retracement-Level auf der Grundlage der historischen Preisdynamik über einen bestimmten Zeitraum und verwendet dann den RSI-Indikator, um zu beurteilen, ob der Markt in der Nähe der Retracement-Levels überkauft oder überverkauft ist, um Handelssignale zu generieren.
Die wichtigsten Grundsätze dieser Strategie sind:
Verwendung von Preisdaten über einen bestimmten Zeitraum (z. B. 200 Baren) zur Berechnung des Medianpreises, der Standardabweichung und der wichtigsten Fibonacci-Retracement-Levels (z. B. 0,764) für diesen Zeitraum;
Wenn sich der Preis an die oberen oder unteren Retracement-Niveaus nähert, wird der RSI-Indikator verwendet, um festzustellen, ob es um diese Niveaus herum eine Überkauf- oder Überverkaufslage gibt;
Wenn der RSI-Indikator überkaufte oder überverkaufte Signale zeigt, werden um die Retracement-Levels herum Long- oder Short-Signale generiert.
Setzen Sie einen Stop-Loss und nehmen Sie Gewinn, um Positionen zu schließen, wenn der Preis die vorgegebenen Niveaus übersteigt oder ein Stop-Loss ausgelöst wird.
Das ist der grundlegende Arbeitsablauf für die Ermittlung von Handelsmöglichkeiten in dieser Strategie.
Im Vergleich zur Verwendung von RSI oder Fibonacci allein hat diese kombinierte Strategie folgende Vorteile:
Die doppelte Indikatorfilterung kann falsche Signale reduzieren und die Signalqualität verbessern.
Der Handel mit Fibonacci-Retracement-Leveln ist eine klassische Technik der technischen Analyse.
Mit Stop Loss und Take Profit im Tempo kann der maximale Verlust pro Trade effektiv kontrolliert werden.
Die Parameter können für verschiedene Zeiträume und Produkte optimiert werden.
Für diese Strategie sind auch einige Risiken zu beachten:
Die Wahrscheinlichkeit einer Umkehrung an den wichtigsten Niveaus beträgt nicht 100%, muss mit der Kursbewegung kombiniert werden;
Einmalige Periode RSI kann falsche Signale aus toten Katzen Sprünge erzeugen, berücksichtigen mehrere Zeitrahmen Validierung;
Eine lockere Einstellung des Stop-Loss kann die Verluste erhöhen;
Bei volatilen Kursschwankungen können Stops durchgeführt werden, breitere Stops sollten in Betracht gezogen werden.
Diese Risiken können durch Parameter-Tuning, Optimierung von Indikatorenkombinationen usw. verwaltet werden.
Zu den Bereichen, in denen weitere Optimierungen erforderlich sind, gehören:
Hinzufügen eines Lautstärkenindikators, um falsche Ausbrüche bei geringer Lautstärke zu vermeiden;
Bollinger-Bänder gelten für Signale von Bandbreakouts;
Erstellen von Modellen für maschinelles Lernen zur automatischen Erkennung hochwertiger Handelsmöglichkeiten;
Verwenden Sie genetische Algorithmen für die automatische Parameter-Ausrichtung und Anpassung von Stop-Loss/Profit-Niveaus.
Dieser Artikel beschreibt detailliert eine quantitative Handelsstrategie, die RSI und Fibonacci-Retracement-Analyse kombiniert.
/*backtest start: 2023-11-26 00:00:00 end: 2023-12-26 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="Gab Fib + RSI", overlay=true, default_qty_type=strategy.cash, default_qty_value=100000, initial_capital=1000, currency=currency.USD, commission_type=strategy.commission.cash_per_order, commission_value=4) // Inputs timeFilter = year >= 2000 // Stop Loss stop_loss = input(title="SL in % of Instrum. i.e 1.5%=150pips", minval=0, step=0.1, defval=1.5) /100 // RSI Inputs len = input(title="[RSI] Length", minval=0, step=1, defval=14) overSold = input(title="[RSI] Over Sold %", defval=30) overBought = input(title="[RSI] Over Bought %", defval=70) // Fibonacci Levels length = input(title="[Fibonacci] Length", defval=200, minval=1) src = input(hlc3, title="[Fibonacci] Source") mult = input(title="[Fibonacci] Multiplier", defval=3.0, minval=0.001, maxval=50) level = input(title="[Fibonacci] Level", defval=764) // Calculate Fibonacci basis = vwma(src, length) dev = mult * stdev(src, length) fu764= basis + (0.001*level*dev) fu1= basis + (1*dev) fd764= basis - (0.001*level*dev) fd1= basis - (1*dev) // Calculate RSI vrsi = rsi(close, len) // Calculate the Targets targetUp = fd764 targetDown = fu764 // Actual Targets bought = strategy.position_size[0] > strategy.position_size[1] exit_long = valuewhen(bought, targetUp, 0) sold = strategy.position_size[0] < strategy.position_size[1] exit_short = valuewhen(sold, targetDown, 0) // Calculate Stop Losses sl_long = close * (1-stop_loss) sl_short = close * (1+stop_loss) // Conditions to Open Trades openLong = low < fd1 and crossover(vrsi[1], overSold) openShort = high > fu1 and crossunder(vrsi[1], overBought) // Conditions to Close Trades closeLong = high > exit_long or sl_long closeShort = low < exit_short or sl_short //Rounding to MinTick value roundtargetUp = round_to_mintick(targetUp) roundtargetDown = round_to_mintick(targetDown) roundsllong = round_to_mintick(sl_long) roundslshort = round_to_mintick(sl_short) // Plots plot(basis, color=color.blue, linewidth=2, title="[Fibonacci Level] Basis") plot(fu764, color=color.white, linewidth=1, title="[Fibonacci Level] Short Target") plot(fu1, color=color.red, linewidth=2, title="[Fibonacci Level] Top") plot(fd764, color=color.white, linewidth=1, title="[Fibonacci Level] Long Target") plot(fd1, color=color.green, linewidth=2, title="[Fibonacci Level] Bottom") // Strategy Orders if timeFilter // Entry Orders strategy.entry(id="buy", long=true, when=openLong and high < targetUp, limit=close, alert_message="buy,"+tostring(syminfo.ticker)+",tp="+tostring(roundtargetUp)+",sl="+tostring(roundsllong)) strategy.entry(id="sell", long=false, when=openShort and low > targetDown, limit=close, alert_message="sell,"+tostring(syminfo.ticker)+",tp="+tostring(roundtargetDown)+",sl="+tostring(roundslshort)) // Exit Orders strategy.exit(id="closelong", when=closeLong and strategy.position_size > 0, limit=exit_long, stop=sl_long, alert_message="closelong,"+tostring(syminfo.ticker)) strategy.exit(id="closeshort", when=closeShort and strategy.position_size < 0, limit=exit_short, stop=sl_short, alert_message="closeshort,"+tostring(syminfo.ticker))