Die RSI-Indikatorkombinations-Umkehrstrategie für zwei gleitende Durchschnittswerte

Schriftsteller:ChaoZhang, Datum: 2023-11-10
Tags:

img

Übersicht

Diese Strategie kombiniert den doppelten gleitenden Durchschnitt, den Relative Strength Index (RSI) und den parabolischen SAR (PSAR), um Preisumkehrpunkte zu identifizieren und entsprechend Kauf- und Verkaufsentscheidungen zu treffen.

Grundsätze

Die Strategie verwendet hauptsächlich folgende technische Indikatoren zur Bestimmung von Preisumkehrpunkten:

  1. Dual Moving Average: Berechnen Sie einen schnellen gleitenden Durchschnitt (MA-schnelle Linie) und einen langsamen gleitenden Durchschnitt (MA-slow line). Wenn die schnelle Linie über die langsame Linie geht, zeigt dies einen Bullenmarkt an und geht lang. Wenn die schnelle Linie unter die langsame Linie geht, zeigt sie einen Bärenmarkt an und geht kurz.

  2. RSI-Indikator: Der RSI beurteilt Überkauf- und Überverkaufszustände, indem er den durchschnittlichen Schließgewinn und den durchschnittlichen Schließverlust über einen bestimmten Zeitraum berechnet.

  3. PSAR-Indikator: Parabolische SAR zeigt die Trendrichtung an. SAR-Punkte unter dem Preis zeigen einen Bullenmarkt an und über dem Preis einen Bärenmarkt.

  4. ADX-Indikator: Der ADX misst die Stärke eines Trends, indem er die Richtungsbewegung berechnet.

Die Logik für Kauf- und Verkaufssignale ist wie folgt:

Kaufsignal: Fast MA überschreitet langsames MA, RSI unter 30 (überverkauft), SAR-Punkte über Preis, ADX über 20.

Verkaufssignal: Schnelle MA überschreitet langsame MA, RSI über 70 (überkauft), SAR-Punkte unter dem Preis, ADX über 20.

Wenn ein Kauf- oder Verkaufssignal auftritt, nehmen Sie eine Position mit 10% des Eigenkapitals bzw. schließen Sie die Position rechtzeitig, wenn das Umkehrsignal fehlschlägt.

Vorteile

  • Die beiden MAs bestimmen die Haupttrendrichtung, wobei RSI und SAR falsche Signale filtern, die Umkehrpunkte genau identifizieren können.

  • Die Kombination mehrerer Indikatoren verhindert falsche Signale von einem einzigen Indikator.

  • Stop-Loss vermeidet übermäßige Risiken.

  • Einfache und klare Logik macht es leicht umzusetzen.

  • Es funktioniert sowohl für Aufwärtstrend als auch für Abwärtstrend.

Risiken und Lösungen

  • Es kann vorkommen, dass doppelte MA falsche Ausbrüche haben.

  • Der RSI kann falsche Signale erzeugen, wenn er nicht ordnungsgemäß eingestellt ist.

  • Stoppen Sie den Handel, wenn der ADX unter 20 liegt, um eine Umkehrung des Handels in richtungslosen Märkten zu vermeiden oder verkürzen Sie die ADX-Periode.

  • SetStringry-Stop-Loss kann zu unnötigen Verlusten führen. Setze einen angemessenen Stop-Loss basierend auf der Marktvolatilität.

  • Hohe Handelsfrequenz: MA-Perioden an niedrigere Handelsfrequenz anpassen.

Verbesserungen

  • Versuche verschiedene MA-Perioden, um die optimale Kombination zu finden.

  • Versuche verschiedene RSI-Parameter, um ein besseres Überkauf-/Überverkaufsgut zu ermitteln.

  • Fügen Sie andere Indikatoren wie Bollinger Bands, KDJ hinzu, um die Logik zu bereichern.

  • Dynamische Stop-Loss-Einstellungen für verschiedene Produkte und Märkte.

  • Fügen Sie die Positionsgröße hinzu, um Trends besser zu verfolgen.

  • Versuche verschiedene ADX-Parameter, um den besten Wert zur Bestimmung der Trendstärke zu finden.

  • Hinzufügen einer automatischen Verlustfunktion.

Schlussfolgerung

Diese Strategie identifiziert die Haupttrendrichtung mit doppelten MAs und verwendet RSI, SAR für zusätzliches Signalfiltern. Sie kann Wirksam Umkehrpunkte nach Parameteroptimierung bestimmen und Trends um Umkehrungen herum fangen. In der Praxis ist das Risikomanagement durch einen ordnungsgemäßen Stop-Loss und laufende Parameteroptimierung wichtig. Insgesamt kombiniert die Strategie Indikatoren mit klarer Logik und einfacher Bedienung, was sie zu einer zuverlässigen Umkehrhandelsstrategie macht.


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

//@version=2
//Based on Senpai BO 3
strategy(title="Senpai_Strat_3", shorttitle="Senpai_Strat_3", overlay=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
src = close

//psar
start = input(0.02)
increment = input(0.02)
maximum = input(0.2)
psar = sar(start, increment, maximum)


//ADX Init
adxlen = input(30, title="ADX Smoothing")	
dilen = input(30, title="DI Length")	
dirmov(len) =>	
	up = change(high)
	down = -change(low)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange)
	minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange)
	[plus, minus]
	
adx(dilen, adxlen) => 	
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
	[adx, plus, minus]
	
[sig, up, down] = adx(dilen, adxlen)	


// BB Init
source = close
length = input(50, minval=1)
mult = input(0.5, title="Mult Factor", minval=0.001, maxval=50)
alertLevel=input(0.1)
impulseLevel=input(0.75)
showRange = input(false, type=bool)


//RSI CODE
up1 = rma(max(change(src), 0), 14)
down1 = rma(-min(change(src), 0), 14)
rsi = down1 == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up1 / down1))


//BB CODE
basis = sma(source, length)
dev = mult * stdev(source, length)
upper = basis + dev
lower = basis - dev
bbr = source>upper?(((source-upper)/(upper-lower))/10): source<lower?(((source-lower)/(upper-lower))/10) : 0.05
bbi = bbr - nz(bbr[1]) 

//////////////////// Algo

//if (rsi>50 and n1>n2)
   //strategy.exit("Close", "Short")
  // strategy.entry("Long", strategy.long)
//if (rsi<50 and n2>n1)
   //strategy.exit("Close", "Long")
//   strategy.entry("Short", strategy.short)

//col = ma30 > ma50 > ma200 and rsi <=53?lime: ma50 < ma200  and rsi >= 60?red : silver
//short1 =  sig<18.5 and high>=upper and rsi>=70 and psar<close = 100%
//long1 = sig<18.5 and low<=lower and rsi<=30 and psar>close = 100%
short1 =  sig<18.5 and high>=upper and rsi>=70 and psar<close
long1 = sig<18.5 and low<=lower and rsi<=30 and psar>close

//Entry

long = long1[1] == 0 and long1 == 1
short = short1[1] == 0 and short1 == 1
longclose = long[3] == 1
shortclose = short[3] == 1
strategy.entry("short", strategy.short,qty = 10, when=short)
strategy.entry("long", strategy.long,qty=10, when=long)
strategy.close("long",when=longclose)
strategy.close("short",when=shortclose)



/////////////////////
///PLOT

plot(long,"long",color=green,linewidth=1)
plot(short,"short",color=red,linewidth=1)
plot(longclose,"close",color=blue,linewidth=1)
plot(shortclose,"close",color=orange,linewidth=1)


//plot(short,"short",color=red,linewidth=1)
//

//strategy.exit(id="long",qty = 100000,when=longclose)
//strategy.exit(id="short",qty = 100000,when=shortclose)

//strategy.exit(id="Stop", profit = 20, loss = 100)

Mehr