RSI-EMA-Crossover-Strategie

Schriftsteller:ChaoZhang, Datum: 2023-10-25 11:46:49
Tags:

img

Übersicht

Diese Strategie nutzt das Prinzip der exponentiellen gleitenden Durchschnitts- (EMA) -Kreuzungen in Kombination mit dem RSI-Indikator, um die Trendrichtung für Ein- und Ausstiege zu bestimmen.

Strategie Logik

Die Strategie verwendet 3 EMA-Linien mit unterschiedlichen Perioden - schnelle, mittlere und langsame Linien. Ein Kaufsignal wird erzeugt, wenn die schnelle EMA über die mittlere EMA überschreitet, und ein Verkaufssignal wird erzeugt, wenn die schnelle EMA unter die mittlere EMA überschreitet.

Die Strategie beinhaltet auch den RSI-Indikator, um Überkauf- und Überverkaufszustände zu messen. Der RSI berechnet ein Verhältnis von durchschnittlichen Auf- und Durchschnittstagen über einen Zeitraum, um die relative Stärke eines Vermögenswerts zu zeigen. Werte über dem überkauften Schwellenwert signalisieren Überkaufszustände, während Werte unter dem überverkauften Schwellenwert signalisieren Überverkaufszustände.

Die Kaufbedingungen für die Strategie sind:

  1. Preiskreuzung über die schnellen, mittleren und langsamen EMA-Linien
  2. Überschreitung des überverkauften Schwellenwerts

Die Verkaufsbedingungen sind:

  1. Schnelle EMA-Überschreitung unter der mittleren EMA
  2. RSI unterhalb der mittleren Linie

Diese Strategie verwendet EMA-Kreuzungen zur Bestimmung der Trendrichtung in Kombination mit dem RSI zur Identifizierung kurzfristiger Umkehrmöglichkeiten und setzt sowohl auf die Konzepte der Trendverfolgung als auch auf die Konzepte der mittleren Umkehrung.

Analyse der Vorteile

Diese Strategie kombiniert EMA-Kreuzungen und RSI, um sowohl den Trend als auch die Überkauf-/Überverkaufswerte zu messen und falsche Ausbrüche und laute Trades auszufiltern.

Die RSI-Einstellungen ermöglichen es der Strategie, Ein- und Ausstiege in vorteilhaften Überkauf-/Überverkaufszonen zu zeitlich festzulegen.

Die Anforderung, dass der Preis alle 3 EMA-Linien vor dem Eintritt in den Handel durchbricht, hilft zu vermeiden, dass er verwirrt wird.

Risikoanalyse

Wie bei allen zurückgetesteten Strategien besteht auch bei dieser Strategie das Risiko einer Überanpassung des Backtests.

Auf den Märkten mit unterschiedlichen Märkten kann die Strategie falsche Signale erzeugen und Verluste verursachen.

Eine schlechte Abstimmung der RSI-Parameter kann zu verpassten Gelegenheiten oder falschen Signalen führen.

Möglichkeiten zur Verbesserung

  1. Erwägen Sie, eine Validierung in längeren Zeitrahmen hinzuzufügen, um Lärm zu vermeiden.

  2. Warten Sie, bis die EMA-Linien erneut getestet wurden, bevor Sie den Handel aufnehmen, um das Signal zu bestätigen.

  3. Einbeziehen Sie andere Indikatoren wie MACD, Bollinger Bands für kombinierte Signalbestätigung.

  4. Verwenden Sie maschinelles Lernen, um Parameter für Robustheit zu optimieren.

  5. Überlegen Sie, ob Sie einen Stop-Loss hinzufügen, um unsichere Trends schnell zu verlassen.

Schlussfolgerung

Diese Strategie kombiniert EMA-Crossovers und RSI, um Trends zu identifizieren und gleichzeitig kurzfristige Umkehrungen zu nutzen. Sie nutzt sowohl Trend-Folgen- als auch Mittelumkehrkonzepte effizient. Es gibt Möglichkeiten zur Optimierung durch Signalvalidierung, Parameter-Tuning, Stop-Losses usw. Aber Backtest-Overfitting muss berücksichtigt und Live-Performance sollte bewertet werden. Insgesamt dient dies als nützliche Referenz für das Lernen, erfordert jedoch eine weitere Validierung in Live-Märkten.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © chadsadachai

//@version=5
strategy("EMA Cross V1", overlay= true)

//rsi
length = input.int(title = "Rsi Lenght" , defval=26 , minval=1, maxval=50)
overS = input.int(title = "Rsi OVS line" , defval=30 , minval=1, maxval=40)
overB = input.int(title = "Rsi OVB line" , defval=70 , minval=1, maxval=100)
mLine = input.int(title = "Rsi Medium line" , defval=42 , minval=1, maxval=60)
price = close
vrsi = ta.rsi(price, length)
co = vrsi >= mLine and vrsi < overB 
cu = ta.crossunder(vrsi, overB)
//ema
F = input.int(title = "EMA Fast" , defval=17 , minval=1, maxval=50)
M = input.int(title = "EMA Medium" , defval=35, minval=1, maxval=100)
S = input.int(title = "EMA Slow" , defval=142, minval=1, maxval=200)
emaF = ta.ema(price , F)
emaM = ta.ema(price , M)
emaS = ta.ema(price , S)

//plot
plot(emaF , color = color.green , linewidth=1)
plot(emaM , color = color.yellow , linewidth=1)
plot(emaS , color = color.red , linewidth=1)

//Time Stamp
start = timestamp(input.int(title = "Start Year" , defval=2011 , minval=2011, maxval=2025), input.int(title = "Start Month" , defval=1 , minval=1, maxval=12), input.int(title = "Start Day" , defval=1 , minval=1, maxval=31), 0, 0)
end = timestamp(input.int(title = "End Year" , defval=2025 , minval=2011, maxval=2025), input.int(title = "End Month" , defval=1 , minval=1, maxval=12), input.int(title = "End Day" , defval=1 , minval=1, maxval=31), 0, 0)
// years = input.int(title = "Year" , defval=2018 , minval=2011, maxval=2025)
// months = input.int(title = "Month" , defval=1 , minval=1, maxval=12)
// days = input.int(title = "Day" , defval=1 , minval=1, maxval=31)

//longCondition Default
// longCondition1 = EMA_Fast >= EMA_Slow and EMA_Fast >= EMA_Medium//ta.crossover(EMA_Fast, EMA_Slow)  EMA_Fast > EMA_Slow and EMA_Medium > EMA_Slow
// longCondition3 = price >= EMA_Medium and price > EMA_Slow
// longCondition2 = vrsi >= overSold and vrsi <= overBought 

//longCondition & shortCondition ETHUSD
// 1.price > emaF > emaM > emaS
// 2.rsi overcross overS
longC1 = price > emaF and price > emaM and price > emaS 
// longC1 = ta.crossover(emaF, emaM)
longC2 = if longC1
    co
// shortC1 = EMA_Fast < EMA_Medium //and EMA_Fast < EMA_Slow and EMA_Medium < EMA_Slow //and cu
// shortC2 = overBought > vrsi //and vrsi < overBought //overSold < vrsi and vrsi < mediumLine

// exitLong Condition
// 1.price < emaF < emaM < emaS
// 2.rsi overcross mediumLine
exitLong1 = ta.crossunder(emaF, emaM) //or emaF < emaM//and price < emaM and price < emaF
exitLong2 = ta.crossunder(vrsi,mLine)
//exitLong3 = price < emaM
//strategy.entry
if time >=start and time <=end
    strategy.entry("Buy", strategy.long , when = longC1 and longC2)

// if(exitLong1 or exitLong2)
strategy.close("Buy" , when = exitLong1 or exitLong2)
    
// exitShort1 = EMA_Fast > EMA_Medium
// //exitShort2 = ta.crossover(vrsi , mediumLine) 
// exitShort2 = ta.crossunder (vrsi,mediumLine)
// strategy.close("Short" , when = exitShort1 or exitShort2)
// //shortCondition = cu


// //if (shortCondition1 and shortCondition2)
//     //strategy.entry("My Short Entry Id", strategy.short)


Mehr