RSI und Fibonacci-Retracement-Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-12-27 16:49:52
Tags:

img

Übersicht

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.

Strategieprinzip

Die wichtigsten Grundsätze dieser Strategie sind:

  1. 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;

  2. 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;

  3. Wenn der RSI-Indikator überkaufte oder überverkaufte Signale zeigt, werden um die Retracement-Levels herum Long- oder Short-Signale generiert.

  4. 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.

Analyse der Vorteile

Im Vergleich zur Verwendung von RSI oder Fibonacci allein hat diese kombinierte Strategie folgende Vorteile:

  1. Die doppelte Indikatorfilterung kann falsche Signale reduzieren und die Signalqualität verbessern.

  2. Der Handel mit Fibonacci-Retracement-Leveln ist eine klassische Technik der technischen Analyse.

  3. Mit Stop Loss und Take Profit im Tempo kann der maximale Verlust pro Trade effektiv kontrolliert werden.

  4. Die Parameter können für verschiedene Zeiträume und Produkte optimiert werden.

Risikoanalyse

Für diese Strategie sind auch einige Risiken zu beachten:

  1. Die Wahrscheinlichkeit einer Umkehrung an den wichtigsten Niveaus beträgt nicht 100%, muss mit der Kursbewegung kombiniert werden;

  2. Einmalige Periode RSI kann falsche Signale aus toten Katzen Sprünge erzeugen, berücksichtigen mehrere Zeitrahmen Validierung;

  3. Eine lockere Einstellung des Stop-Loss kann die Verluste erhöhen;

  4. 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.

Optimierungsrichtlinien

Zu den Bereichen, in denen weitere Optimierungen erforderlich sind, gehören:

  1. Hinzufügen eines Lautstärkenindikators, um falsche Ausbrüche bei geringer Lautstärke zu vermeiden;

  2. Bollinger-Bänder gelten für Signale von Bandbreakouts;

  3. Erstellen von Modellen für maschinelles Lernen zur automatischen Erkennung hochwertiger Handelsmöglichkeiten;

  4. Verwenden Sie genetische Algorithmen für die automatische Parameter-Ausrichtung und Anpassung von Stop-Loss/Profit-Niveaus.

Zusammenfassung

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))

Mehr