Scalping-Strategie auf Basis des RSI-Indikators mit Trailing Stop Loss

Schriftsteller:ChaoZhang, Datum: 12.12.2023
Tags:

img

Übersicht

Diese Strategie wird Scalping Strategy genannt, die auf dem RSI-Indikator mit Trailing Stop Loss basiert. Sie verwendet den RSI-Indikator, um überkaufte und überverkaufte Bedingungen zu bestimmen, kombiniert sich mit schnellen und langsamen gleitenden Durchschnitten (MA), um die Trendrichtung zu bestimmen, und setzt die Einstiegsbedingungen. Sie verwendet auch einen Prozentsatz-Stop-Loss-Mechanismus zum Ausstieg aus Positionen.

Strategie Logik

Die Eintrittssignale dieser Strategie werden hauptsächlich durch den RSI-Indikator und die MA-Kreuzungen bestimmt. Der RSI-Parameter ist auf 2 Perioden festgelegt, um schnell überkaufte und überverkaufte Situationen für Umkehrmöglichkeiten zu erfassen. Der schnelle MA und der langsame MA sind auf 50 bzw. 200 Perioden festgelegt, um die Trendrichtung zu identifizieren.

Long-Entry: Fast MA überschreitet langsames MA, der Preis liegt über langsamem MA und der RSI liegt unter dem Überverkaufsniveau (Standstillstand 10%); Kurzer Einstieg: Der schnelle Marktanteil überschreitet den langsamen Marktanteil, der Preis liegt unter dem langsamen Marktanteil und der RSI liegt über dem Überkaufniveau (Default 90%).

Darüber hinaus gibt es einen optionalen Volatilitätsfilter in der Strategie. Er berechnet die Differenz zwischen den Neigungen von schnellen und langsamen MAs. Positionen werden nur geöffnet, wenn die Differenz einen Schwellenwert übersteigt. Der Zweck ist es, zu vermeiden, Positionen zu eröffnen, wenn es keine klare Richtung während der Marktschwankungen gibt.

Auf der Ausfahrtsseite verwendet die Strategie prozentualen Trailing Stop Loss. Basierend auf dem Eingabeprozentsatz berechnet sie den Stop-Loss-Preis in Kombination mit der Tick-Größe, um den Stop-Loss dynamisch anzupassen.

Analyse der Vorteile

Die wichtigsten Vorteile dieser Strategie sind:

  1. Der RSI, der auf zwei Perioden eingestellt ist, kann schnell überkaufte und überverkaufte Situationen für Umkehrmöglichkeiten erfassen.
  2. Schnelle und langsame MAs können effektiv Trendrichtung und Wendepunkte erkennen.
  3. Die Kombination von RSI- und MA-Doppelindikatoren verhindert falsche Ausbrüche.
  4. Der Volatilitätsfilter verhindert, dass Positionen geöffnet werden, wenn während der Schwankungen keine klare Richtung besteht.
  5. Der Prozentsatz des Stop-Loss-Verlustes kann auf der Grundlage der Marktvolatilität angepasst werden, um die Risiken wirksam zu kontrollieren.

Risikoanalyse

Diese Strategie birgt auch einige Risiken:

  1. Die RSI- und MA-Indikatoren haben eine gewisse Verzögerungswirkung und können einige Umkehrmöglichkeiten verpassen.
  2. Der Prozentsatz des Stopp-Loss wird bei niedrigen Volumenrückgängen wahrscheinlich ausgelöst.
  3. Es wird nicht effektiv mit erheblichen Übernachtungs- und Preisschwankungen vor dem Markt umgehen.

Die Optimierungsrichtungen für die Risiken sind:

  1. Der RSI-Parameter wird auf 1 Periode eingestellt, um den Verzögerungseffekt zu reduzieren.
  2. Optimierung der MA-Perioden auf der Grundlage der Symbolmerkmale.
  3. Anpassung des prozentualen Stop-Loss-Niveaus an das Gleichgewicht zwischen Stop-Loss und Schwankungsvermögen.

Optimierungsrichtlinien

Die Optimierungsrichtungen für diese Strategie sind:

  1. Hinzufügen anderer Indikatorentscheidungen, wie Volumen, um falsche Ausbruchssignale zu vermeiden.
  2. Hinzufügen von Vorhersagen von maschinellen Lernmodellen, um bei der Entscheidungsfindung zu helfen.
  3. Optimieren Sie die Zeit der Pyramiden und die Positionsgröße, um die Rendite weiter zu verbessern.
  4. Stellen Sie Filter für Preisschwankungen vor dem Markt ein und entscheiden Sie, ob Sie am nächsten Handelstag anhand der Schwankungen teilnehmen.

Schlussfolgerung

Im Allgemeinen handelt es sich um einen relativ stabilen Trend nach der Strategie. Durch die Kombination von doppelten RSI- und MA-Indikatoren gewährleistet es eine gewisse Stabilität, während klarere Trendumkehrmöglichkeiten erfasst werden. Der Volatilitätsfilter vermeidet einige Risiken und der prozentuale Stop-Loss kontrolliert auch effektiv den Einzelverlust. Diese Strategie kann als generische Multi-Symbol-Strategie verwendet werden und kann auch auf Parametern und Modellen für bestimmte Symbole optimiert werden, um bessere Ergebnisse zu erzielen.


/*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")


Mehr