Trendfolgende Stop-Loss-Strategie basierend auf dem RSI-Indikator


Erstellungsdatum: 2023-12-12 15:46:49 zuletzt geändert: 2023-12-12 15:46:49
Kopie: 0 Klicks: 1051
1
konzentrieren Sie sich auf
1621
Anhänger

Trendfolgende Stop-Loss-Strategie basierend auf dem RSI-Indikator

Überblick

Die Strategie nennt sich Trend-Tracking-Stopp-Strategie, die auf dem RSI-Indikator basiert. Die Strategie verwendet den RSI-Indikator, um Überkauf-Überverkauf zu ermitteln, in Kombination mit dem schnellen und langsamen MA-Indikator, um die Richtung des Trends zu ermitteln und die Einstiegsbedingungen festzulegen.

Strategieprinzip

Die Strategie entscheidet über die Eintrittszeit hauptsächlich durch den RSI- und den MA-Indikator. Die RSI-Indikatorparameter sind auf 2 Zyklen eingestellt, um Überkauf-Überverkauf zu beurteilen. Der schnelle MA ist auf 50 Zyklen und 200 Zyklen eingestellt, um die Trendrichtung zu bestimmen.

Mehrköpfigen Einstieg: Schnell-MA überschreitet langsam-MA, und der Preis ist höher als der langsam-MA, während der RSI unterhalb der Überverkaufszone (default 10%) ist.
Eintritt mit leerem Kopf: Fast-MA unterhalb von Slow-MA, und der Preis ist niedriger als der Slow-MA, während der RSI oberhalb der Überkaufzone (default 90%) leer ist.

Zusätzlich gibt es einen optionalen Volatilitätsfilter, der den Schrägstand des MA berechnet und nur dann eröffnet, wenn der Schrägstand den festgelegten Schwellenwert überschreitet. Der Zweck ist es, Positionen zu vermeiden, wenn die Kursschwankungen keine eindeutige Richtung haben.

Die Strategie verwendet die Prozentsatz-Stop-Tracking-Methode bei der Ausgabe. Die Stop-Loss-Prozentsätze werden nach der Eingabe berechnet, kombiniert mit jeder Sprung-Differenz, um einen Stop-Loss zu erzielen.

Analyse der Stärken

Diese Strategie hat folgende Vorteile:

  1. Der RSI-Indikator ist auf zwei Zyklen eingestellt, um Überkauf und Überverkauf schnell zu erfassen und die Möglichkeit einer Umkehr zu beurteilen.
  2. Schnell und langsam kann der MA Trends und Wendepunkte erkennen.
  3. In Kombination mit dem RSI und dem MA-Doppelindikator kann ein False-Breakout vermieden werden.
  4. Setzen Sie einen Fluktuationsfilter, der die Schwankungen in Zeiten ohne klare Richtung filtert.
  5. Der Prozentsatz-Stop-Tracking-Methode kann die Stop-Loss-Marge an die Marktvolatilität anpassen, um das Risiko effektiv zu kontrollieren.

Risikoanalyse

Die Strategie birgt Risiken, die sich in folgenden Punkten widerspiegeln:

  1. Der RSI und der MA sind etwas zurückgeblieben und haben möglicherweise einige Umkehrmöglichkeiten verpasst.
  2. Der Prozentsatz der Stop-Losses kann bei einem Rückgang der Konzentration leicht ausgelöst werden.
  3. Es ist unmöglich, die Schwankungen der Nacht- und Vorplatte effektiv zu behandeln.

Für die oben genannten Risiken können Optimierungen in folgenden Bereichen vorgenommen werden:

  1. Die RSI-Parameter werden auf 1 Zyklus angepasst, um die Verzögerung zu verringern.
  2. Anpassung der MA-Zyklusparameter an die Eigenschaften der verschiedenen Sorten.
  3. Anpassung der prozentualen Stop-Loss-Ebene unter Berücksichtigung der Stop-Loss- und Erschütterungstoleranz.

Richtung der Strategieoptimierung

Die Strategie kann optimiert werden durch:

  1. Erhöhung anderer Indikatoren, wie z. B. der Umsatzindex, um falsche Durchbrüche zu vermeiden.
  2. Erhöhung der Machine-Learning-Modell-Beschlüsse, um die Ergebnisse der Modell-Prognosen zu nutzen, um Entscheidungen zu unterstützen.
  3. Optimierung der Ertragszahl und der Positionsverwaltung, um die strategische Rendite weiter zu steigern.
  4. Einrichtung von Overnight- und Pre-Overlay-Filtermechanismen. Entsprechend der Schwankungsbreite wird festgelegt, ob am nächsten Handelstag entschieden werden soll.

Zusammenfassen

Diese Strategie ist insgesamt eine eher stabile Trend-Tracking-Strategie. Sie kombiniert RSI und MA-Doppel-Indikator-Urteil, während eine gewisse Stabilität zu gewährleisten, kann auch deutlich Trend-Umkehr-Chancen zu erfassen. Gleichzeitig Einstellung der Fluktuationsrate Filter zu vermeiden, teilweise Risiken, Prozent Stop-Loss-Methode kann auch die Einzelschaden effektiv zu steuern. Die Strategie kann als eine allgemeine Strategie für mehrere Sorten verwendet werden, kann auch für bestimmte Sorten Parameter-Anpassung und Modell-Optimierung, so dass eine bessere Strategie Wirkung.

Strategiequellcode
/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// Scalping strategy
// © Lukescream and Ninorigo
// (original version by Lukescream - lastest versions by Ninorigo) - v1.3
//

//@version=4
strategy(title="Scalping using RSI 2 indicator", shorttitle="RSI 2 Strategy", overlay=true, pyramiding=0, process_orders_on_close=false)

var bool ConditionEntryL = false
var bool ConditionEntryS = false


//***********
// Costants
//***********
def_start_date = timestamp("01 Jan 2021 07:30 +0000")
def_end_date   = timestamp("01 Dec 2024 07:30 +0000")

def_rsi_length = 2
def_overbought_value = 90
def_oversold_value   = 10

def_slow_ma_length = 200
def_fast_ma_length = 50
def_ma_choice      = "EMA"

def_tick   = 0.5
def_filter = true

def_trailing_stop = 1


//***********
// Change the optional parameters
//***********
start_time  = input(title="Start date", defval=def_start_date, type=input.time)
end_time    = input(title="End date", defval=def_end_date, type=input.time)
// RSI
src         = input(title="Source", defval=close, type=input.source)
rsi_length  = input(title="RSI Length", defval=def_rsi_length, minval=1, type=input.integer)
overbought_threshold = input(title="Overbought threshold", defval=def_overbought_value, type=input.float)
oversold_threshold   = input(title="Oversold threshold", defval=def_oversold_value, type=input.float)
// Moving average
slow_ma_length = input(title="Slow MA length", defval=def_slow_ma_length, type=input.integer)
fast_ma_length = input(title="Fast MA length", defval=def_fast_ma_length, type=input.integer)
ma_choice = input(title="MA choice", defval="EMA", options=["SMA", "EMA"])
// Input ticker
tick   = input(title="Ticker size", defval=def_tick, type=input.float)
filter = input(title="Trend Filter", defval=def_filter, type=input.bool)
// Trailing stop (%)
ts_rate = input(title="Trailing Stop %", defval=def_trailing_stop, type=input.float)


//***********
// RSI
//***********
// Calculate RSI
up   = rma(max(change(src), 0), rsi_length)
down = rma(-min(change(src), 0), rsi_length)
rsi = (down == 0 ? 100 : (up == 0 ? 0 : 100-100/(1+up/down)))


//***********
// Moving averages
//***********
slow_ma = (ma_choice == "SMA" ? sma(close, slow_ma_length) : ema(close, slow_ma_length))
fast_ma = (ma_choice == "SMA" ? sma(close, fast_ma_length) : ema(close, fast_ma_length))
// Show the moving averages
plot(slow_ma, color=color.white,  title="Slow MA")
plot(fast_ma, color=color.yellow, title="Fast MA")


//***********
// Strategy
//***********
if true
    // Determine the entry conditions (only market entry and market exit conditions)
    // Long position
    ConditionEntryL := (filter == true ? (fast_ma > slow_ma and close > slow_ma and rsi < oversold_threshold) : (fast_ma > slow_ma and rsi < oversold_threshold))
    // Short position
    ConditionEntryS := (filter == true ? (fast_ma < slow_ma and close < slow_ma and rsi > overbought_threshold) : (fast_ma < slow_ma and rsi > overbought_threshold))
   
    // Calculate the trailing stop
    ts_calc = close * (1/tick) * ts_rate * 0.01

    // Submit the entry orders and the exit orders
    // Long position
    if ConditionEntryL
        strategy.entry("RSI Long", strategy.long)
    // Exit from a long position
    strategy.exit("Exit Long", "RSI Long", trail_points=0, trail_offset=ts_calc)

    // Short position 
    if ConditionEntryS
        strategy.entry("RSI Short", strategy.short)
    // Exit from a short position
    strategy.exit("Exit Short", "RSI Short", trail_points=0, trail_offset=ts_calc)

// Highlights long conditions
bgcolor (ConditionEntryL ? color.navy : na, transp=60, offset=1, editable=true, title="Long position band")
// Highlights short conditions
bgcolor (ConditionEntryS ? color.olive : na, transp=60, offset=1, editable=true, title="Short position band")