VRSI und MARSI-Strategie

Schriftsteller:ChaoZhang, Datum: 2024-02-02 17:21:09
Tags:

img

Übersicht

Die VRSI- und MARSI-Strategie nutzt gleitende Durchschnitte, um die RSI-Indikatoren zu glätten, und implementiert eine Dual-Indikator-Strategie. Sie verwendet sowohl den RSI-Indikator für Preis und Volumen als auch ihre gleitenden Durchschnitte, um Handelssignale zu generieren. Sie geht lang, wenn der Preis RSI steigt, und kurz, wenn der Preis RSI fällt. In der Zwischenzeit beobachtet sie die Veränderungen des Volumens RSI, um die Marktstärke und mögliche Trendänderungen zu beurteilen.

Strategie Logik

Die Strategie berechnet zunächst den 9-Perioden-RSI-Indikator für den Preis (RSI) und den 9-Perioden-RSI-Indikator für das Volumen (VRSI).

Die Handelssignale werden basierend auf dem MARSI-Indikator erzeugt. Es geht lang, wenn MARSI steigt und kurz, wenn MARSI fällt. Darüber hinaus wird der MAVRSI-Indikator verwendet, um die Marktstärke und mögliche Trendänderungen zu beurteilen.

Wenn der Preis während eines Aufwärtstrends weiter steigt, aber das Volumen abnimmt, signalisiert dies beispielsweise, dass sich die bullische Stärke abschwächen kann und man sich darauf vorbereiten sollte, Long-Positionen zu schließen.

Analyse der Vorteile

Durch die Kombination der gleitenden Durchschnitte von doppelten RSI-Indikatoren kann diese Strategie Trends effektiv erfassen und gleichzeitig Volumenveränderungen nutzen, um die Marktstärke zu beurteilen und nicht in die Falle zu geraten.

Die Verwendung von gleitenden Durchschnitten filtert auch etwas Rauschen aus, um die Signale zuverlässiger zu machen.

Risikoanalyse

Das Hauptrisiko dieser Strategie liegt in den zwischen den zwei Indikatoren auftretenden Abweichungen. Wenn zwischen Preis und Volumen eine Abweichung besteht, können die Handelssignale weniger zuverlässig werden. Ein manuelles Urteil über die Beziehung zwischen den Indikatoren ist dann erforderlich.

Ein weiteres Risiko besteht darin, dass man in Bereichsgebundenen Märkten gefangen wird. Wenn sich der Preis in einem Bereich bewegt, neigt der RSI-Indikator dazu, nach oben und unten zu schwanken, was unnötige Trades auslöst.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Anpassung der Parameter des RSI und der gleitenden Durchschnittswerte, um optimale Kombinationen zu finden

  2. Hinzufügen anderer Bedingungen bei der Erzeugung von Signalen, z. B. Umkehrsignale, die im Überkauf-/Überverkaufsbereich ausgelöst werden, sind in der Regel zuverlässiger

  3. Hinzufügen von Stop-Loss-Strategien wie bewegliche Stop-Loss oder Indikator Stop-Loss

  4. Einbeziehung anderer Indikatoren, z. B. Kerzenmuster, Volatilitätsindikatoren usw., um Fallen zu vermeiden

Zusammenfassung

Die VRSI- und MARSI-Strategie kombiniert erfolgreich die RSI-Indikatoren von Preis und Volumen. Der Vergleich und die Beurteilung zwischen den beiden Indikatoren können die Signalgenauigkeit und Rentabilität verbessern. Parameteroptimierung und Stop-Loss-Strategien ermöglichen auch einen stabilen Lauf. Zusammenfassend erreicht diese Strategie durch die Kombination von Indikatoren eine überlegene Leistung gegenüber einem einzigen RSI-Indikator.


/*backtest
start: 2024-01-02 00:00:00
end: 2024-02-01 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("VRSI-MARSI Strategy", shorttitle="(V/MA)RSI Str.", overlay=false, default_qty_type=strategy.percent_of_equity, calc_on_order_fills=true, calc_on_every_tick=true, pyramiding=0, default_qty_value=5, initial_capital=100)

// RSI(close, ="RSI") and RSI(Volume, ="VRSI")
src = close, len = input(9, minval=1, title="Length RSI")
src2 = volume, len2 = input(9, minval=1, title="Length VRSI)")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
up2 = rma(max(change(src2), 0), len2)
down2 = rma(-min(change(src2), 0), len2)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsi2 = down2 == 0 ? 100 : up2 == 0 ? 0 : 100 - (100 / (1 + up2 / down2))

// MA(=Moving Average) of RSI(close, ="MARSI") and RSI(Volume, ="MAVRSI")
len3 = input(5, minval=1, title="Length MARSI")
marsi = sma(rsi, len3)
len4 = input(5, minval=1, title="Length MAVRSI")
marsi2 = sma(rsi2, len4)

// Plot: 
// Default plot of RSI and VRSI: not visible but can be made visible
// Default plot MARSI and MAVRSI: visible
p1 = plot(rsi, linewidth=2, transp=100, color=color.yellow, title="RSI")
p2 = plot(rsi2, linewidth=2, transp=100, color=color.orange, title="VRSI")
m1 = plot(marsi, color=(marsi>=0 ? (marsi[1] < marsi ? color.yellow : color.blue) : (marsi[1] < marsi ? color.yellow : color.blue) ), linewidth = 2, transp = 0, title="MARSI")
m2 = plot(marsi2, color=color.orange, linewidth = 2, transp = 0, title="MAVRSI")

// Color fill:
// Default color fill "RSI - VRSI": not visible but can be made visible
// Default color fill "MARSI - MAVRSI": visible
fill(p1,p2, color = rsi>rsi2 ? color.green : color.red, transp=100, title="BG RSI-VRSI")
fill(m1,m2, color = marsi>marsi2 ? color.green : color.red, transp=75, title="BG MARSI-MAVRSI")

// Lines:
h2=hline(20, color=color.green, linestyle=hline.style_dotted, title="Extreme Oversold Rsi")
h3=hline(30, color=color.black, linestyle=hline.style_dotted, title="Oversold Rsi")
h5=hline(50, color=color.yellow, linestyle=hline.style_dashed, title="Middle line")
h7=hline(70, color=color.black, linestyle=hline.style_dotted, title="Overbought Rsi")
h8=hline(80, color=color.red, linestyle=hline.style_dotted, title="Extreme Overbought Rsi")

// Color fill between Lines "20-30" and "70-80" represents the crossing of "MARSI" and "MAVRSI":
fill(h2, h3, color=(marsi2 > marsi ? color.red : color.green), transp=80, title="20-30 BG color X MARSI/MAVRSI")
fill(h7, h8, color=(marsi2 > marsi ? color.red : color.green), transp=80, title="70-80 BG color X MARSI/MAVRSI")

///Long Entry///
longCondition = marsi > marsi[1] 
if (longCondition)
    strategy.entry("Long", strategy.long)

///Long exit///
Xlong =input(true)
closeConditionLong = marsi < marsi[1] and Xlong
if (closeConditionLong)
    strategy.close("Long")

///Short Entry///
shortCondition = marsi < marsi[1] 
if (shortCondition)
    strategy.entry("Short", strategy.short)
    
///Short exit///
Xshort =input(true)
closeConditionShort = marsi > marsi[1] and Xshort
if (closeConditionShort)
    strategy.close("Short")
    

Mehr