Strategie für einen gleitenden durchschnittlichen relativen Stärkeindex

Schriftsteller:ChaoZhang, Datum: 2023-11-28 14:07:46
Tags:

img

Übersicht

Die Moving Average Relative Strength Index Strategie ist eine quantitative Handelsstrategie, die sowohl gleitende Durchschnittslinien als auch den Relative Strength Index (RSI) als Handelssignale verwendet, um Chancen in Markttrends zu erfassen.

Strategie Logik

Diese Strategie beruht hauptsächlich auf zwei Indikatoren:

  1. Einfacher gleitender Durchschnitt (SMA): spiegelt die durchschnittliche Kursentwicklung wider.
  2. Relative Strength Index (RSI): spiegelt die Stärke oder Schwäche der Preisentwicklung wider.

Die Kernlogik der Strategie lautet:

Wenn die RSI-Indikatorlinie niedriger als die gleitende Durchschnittslinie ist, befindet sie sich in der Überverkauft-Region und zeigt an, dass die Aktie unterschätzt ist, was ein Kaufsignal erzeugt.

Mit anderen Worten, die gleitende Durchschnittslinie spiegelt bis zu einem gewissen Grad den beizulegenden Zeitwert der Aktie wider, während der RSI-Indikator die aktuelle Stärke oder Schwäche des Preises darstellt.

Insbesondere erzeugt diese Strategie Handelssignale durch folgende Schritte:

  1. Berechnen Sie den RSI-Wert und den einfachen gleitenden Durchschnitt des Aktienkurses.
  2. Vergleichen Sie die Beziehung zwischen dem RSI-Wert und der gleitenden Durchschnittslinie.
  3. Ein Verkaufssignal wird erzeugt, wenn die RSI-Linie über die gleitende Durchschnittslinie geht.
  4. Ein Kaufsignal wird ausgelöst, wenn die RSI-Linie unterhalb der gleitenden Durchschnittslinie kreuzt.
  5. Einstellen von Stop-Loss und Trailing-Stop zur Risikokontrolle.

Vorteile der Strategie

Durch die Kombination der Trendbeurteilung von gleitenden Durchschnitten und der Überkauf/Überverkaufsanzeige des RSI kann diese Strategie inflexionale Punkte auf dem Markt effektiv bestimmen, indem die Stärken verschiedener Indikatoren genutzt werden.

Die wichtigsten Vorteile sind:

  1. Gleitende Durchschnitte können effektiv auf Preisentwicklungen hinweisen.
  2. Der RSI kann überkauft/überverkauft sein.
  3. Die Kombination von zwei Indikatoren verbessert die Genauigkeit der Ermittlung von Wendepunkten auf dem Markt.
  4. Der Stop-Loss kann zur Risikokontrolle verwendet werden.

Risiken der Strategie

Diese Strategie birgt auch einige Risiken:

  1. Es besteht die Wahrscheinlichkeit falscher Signale der Indikatoren, die unnötige Verluste verursachen können.
  2. Der Stop-Loss kann bei starken Marktschwankungen ausgelöst werden, was zu großen Verlusten führt.
  3. Falsche Parameter-Einstellungen können auch die Strategieleistung beeinträchtigen.

Um Risiken zu bewältigen, können Optimierungen wie folgt vorgenommen werden:

  1. Anpassung der Parameter des gleitenden Durchschnitts und des RSI, um die Indikatorsignale zuverlässiger zu machen.
  2. Stellen Sie den Stop-Loss entsprechend breiter ein, um zu häufiges Auslösen zu vermeiden.
  3. Ein dynamischer Trailing Stop Loss wird angewendet, um den Stop Loss flexibler zu machen.

Richtungen für die Optimierung der Strategie

Weitere Optimierungsrichtungen sind:

  1. Testen Sie verschiedene Parameterkombinationen über Zeitrahmen hinweg, um optimale Parameter zu finden.
  2. Hinzufügen anderer Indikatoren wie Volumen für den Filter zur Verbesserung der Signalzuverlässigkeit.
  3. Optimieren Sie Stop-Loss-Strategien, um den Stop-Loss dynamischer und vernünftiger zu gestalten.
  4. Einbeziehung von Deep-Learning-Modellen für die adaptive Parameteroptimierung.
  5. Hinzufügen eines Positionsdimensionierungsmoduls zur dynamischen Anpassung von Positionen anhand der Marktbedingungen.

Durch Parameteroptimierung, Indikatoroptimierung, Risikomanagementoptimierung usw. können die Stabilität und Rentabilität dieser Strategie kontinuierlich verbessert werden.

Schlussfolgerung

Die Moving Average RSI Strategie nutzt sowohl den Preistrend als auch die Überkauf/Überverkaufsanalyse, um Marktturnpunkte effektiv zu identifizieren und Umkehrmöglichkeiten zu erfassen.


/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-24 06:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2

strategy(title = "RSI versus SMA", shorttitle = "RSI vs SMA", overlay = false, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, currency = currency.GBP)

// Revision:        1
// Author:          @JayRogers
//
// *** USE AT YOUR OWN RISK ***
// - Nothing is perfect, and all decisions by you are on your own head. And stuff.
//
// Description:
//  - It's RSI versus a Simple Moving Average.. Not sure it really needs much more description.
//  - Should not repaint - Automatically offsets by 1 bar if anything other than "open" selected as RSI source.

// === INPUTS ===
// rsi
rsiSource   = input(defval = open, title = "RSI Source")
rsiLength   = input(defval = 8, title = "RSI Length", minval = 1)
// sma
maLength    = input(defval = 34, title = "MA Period", minval = 1)
// invert trade direction
tradeInvert = input(defval = false, title = "Invert Trade Direction?")
// risk management
useStop     = input(defval = false, title = "Use Initial Stop Loss?")
slPoints    = input(defval = 25, title = "Initial Stop Loss Points", minval = 1)
useTS       = input(defval = true, title = "Use Trailing Stop?")
tslPoints   = input(defval = 120, title = "Trail Points", minval = 1)
useTSO      = input(defval = false, title = "Use Offset For Trailing Stop?")
tslOffset   = input(defval = 20, title = "Trail Offset Points", minval = 1)
// === /INPUTS ===

// === BASE FUNCTIONS ===
// delay for direction change actions
switchDelay(exp, len) =>
    average = len >= 2 ? sum(exp, len) / len : exp[1]
    up      = exp > average
    down    = exp < average
    state   = up ? true : down ? false : up[1]
// === /BASE FUNCTIONS ===

// === SERIES and VAR ===
// rsi
shunt = rsiSource == open ? 0 : 1
rsiUp = rma(max(change(rsiSource[shunt]), 0), rsiLength)
rsiDown = rma(-min(change(rsiSource[shunt]), 0), rsiLength)
rsi = (rsiDown == 0 ? 100 : rsiUp == 0 ? 0 : 100 - (100 / (1 + rsiUp / rsiDown))) - 50 // shifted 50 points to make 0 median
// sma of rsi
rsiMa   = sma(rsi, maLength)
// self explanatory..
tradeDirection = tradeInvert ? 0 <= rsiMa ? true : false : 0 >= rsiMa ? true : false
// === /SERIES ===

// === PLOTTING ===
barcolor(color = tradeDirection ? green : red, title = "Bar Colours")
// hlines
medianLine  = hline(0, title = 'Median', color = #996600,  linewidth = 1)
limitUp     = hline(25, title = 'Limit Up', color = silver,  linewidth = 1)
limitDown   = hline(-25, title = 'Limit Down', color = silver,  linewidth = 1)
// rsi and ma
rsiLine     = plot(rsi, title = 'RSI', color = purple, linewidth = 2, style = line, transp = 50)
areaLine    = plot(rsiMa, title = 'Area MA', color = silver, linewidth = 1, style = area, transp = 70)
// === /PLOTTING ===

goLong() => not tradeDirection[1] and tradeDirection
killLong() => tradeDirection[1] and not tradeDirection
strategy.entry(id = "Buy", long = true, when = goLong())
strategy.close(id = "Buy", when = killLong())

goShort() => tradeDirection[1] and not tradeDirection
killShort() => not tradeDirection[1] and tradeDirection
strategy.entry(id = "Sell", long = false, when = goShort())
strategy.close(id = "Sell", when = killShort())

if (useStop)
    strategy.exit("XSL", from_entry = "Buy", loss = slPoints)
    strategy.exit("XSS", from_entry = "Sell", loss = slPoints)
// if we're using the trailing stop
if (useTS and useTSO) // with offset
    strategy.exit("XSL", from_entry = "Buy", trail_points = tslPoints, trail_offset = tslOffset)
    strategy.exit("XSS", from_entry = "Sell", trail_points = tslPoints, trail_offset = tslOffset)
if (useTS and not useTSO) // without offset
    strategy.exit("XSL", from_entry = "Buy", trail_points = tslPoints)
    strategy.exit("XSS", from_entry = "Sell", trail_points = tslPoints)

Mehr