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.
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:
Die Verkaufsbedingungen sind:
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.
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.
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.
Erwägen Sie, eine Validierung in längeren Zeitrahmen hinzuzufügen, um Lärm zu vermeiden.
Warten Sie, bis die EMA-Linien erneut getestet wurden, bevor Sie den Handel aufnehmen, um das Signal zu bestätigen.
Einbeziehen Sie andere Indikatoren wie MACD, Bollinger Bands für kombinierte Signalbestätigung.
Verwenden Sie maschinelles Lernen, um Parameter für Robustheit zu optimieren.
Überlegen Sie, ob Sie einen Stop-Loss hinzufügen, um unsichere Trends schnell zu verlassen.
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)