
Die Madrid Ribbon RSI-Enhanced Multi-Time-Frame EMA-Trendstrategie ist ein umfassendes quantitatives Handelssystem, das die Kombination von einem Moving Average Ribbon System (Madrid Ribbon) und einem relativ starken RSI-Filter (RSI-Filter) für die Trenderkennung und die Ausführung von Trades mit einer doppelten Bestätigungsmechanismus bietet. Die Strategie basiert auf einer Bandstruktur, die durch die Überwachung von mehreren Perioden verschiedener Indikatoren (Moving Average EMAs) gebildet wird (von 5 bis 90), während die RSI-Indikatoren als Filterbedingungen eingeführt werden, um falsche Signale wirksam zu reduzieren.
Die Kernprinzipien der Strategie basieren auf der Analyse von Moving Average-Clustern für mehrere Zeiträume und der Filterwirkung des RSI:
Mehrere Zeitrahmen bewegliche DurchschnittsbandsystemeDie Strategie erstellt 18 Moving Averages mit Perioden von 5 bis 90 und vergleicht sie mit einer Referenzlinie mit 100 Perioden. Jeder Moving Average wird entsprechend seiner Richtungsänderung und seiner Position gegenüber der Referenzlinie mit Farben gekennzeichnet:
Quantifizierung der TrendstärkeStrategie: Die Trendstärke wird durch die Berechnung der Anzahl der gleitenden Durchschnittswerte in grün (steigend) und rot (absteigend) quantifiziert:
RSI-FiltermechanismusDie Strategie beinhaltet die Einführung des RSI als Filterbedingungen, um falsche Signale zu reduzieren:
RisikomanagementDie Strategie setzt die Stop-Loss-Parameter auf Prozent:
VermögensverwaltungStrategie: Die Strategie erlaubt dem Benutzer, den Anfangsbetrag einzustellen und die Positiongröße basierend auf dem aktuellen Preis automatisch zu berechnen.
MehrfachbestätigungDurch die Kombination von Moving Average Bands und RSI-Indikatoren bietet die Strategie eine Mehrfachbestätigungsmechanismus, der die Wahrscheinlichkeit eines falschen Signals erheblich reduziert. Die Signalzuverlässigkeit wird erheblich erhöht, wenn der Moving Average Cluster und der RSI gleichzeitig die Bedingungen erfüllen.
Quantifizierung der TrendstärkeIm Gegensatz zu einer einfachen Kreuzungsstrategie quantifiziert die Strategie die Trendstärke durch die Berechnung der Anzahl der unterschiedlich farbigen gleitenden Durchschnitte, was die Handelsentscheidung objektiver und datenorientierter macht.
Visualisierung von HandelssignalenStrategie: Die Signale werden durch Hintergrundfarbänderungen und Formmarkierungen deutlich auf den Diagrammen angezeigt, so dass Händler potenzielle Handelsmöglichkeiten intuitiv erkennen können.
Eingebettete RisikomanagementDie Strategie integriert standardmäßig einen Stop-Loss-Mechanismus mit einer klaren Vorgabe der maximalen Gewinne und Verluste für jeden Handel und einer effektiven Kontrolle der Risikolockage.
Äußerst anpassungsfähigDie Strategie erlaubt den Benutzern die Wahl zwischen EMA oder SMA, wobei die EMA flexibel auf unterschiedliche Marktbedingungen angepasst werden kann. EMA ist empfindlicher auf die jüngsten Preisänderungen, während SMA glatter ist und unterschiedliche Einstellungen für unterschiedliche Marktbedingungen verwendet werden können.
Umfassende Überwachung der MarktlageDurch die Überwachung von 18 unterschiedlichen Perioden von Moving Averages kann die Strategie die Marktdynamik umfassend erfassen und die Blindstellen verringern, die eine einzelne Zeitrahmenanalyse verursachen kann.
Trendwende verzögertDa die Strategie auf mehrere bewegliche Durchschnitte angewiesen ist, kann es bei schnellen Trendwechseln zu einer Reaktionsverzögerung kommen, die zu einem ungünstigen Zeitpunkt für den Ein- oder Ausstieg führt. Gegen dieses Risiko kann es in Betracht gezogen werden, Indikatoren mit kürzeren Perioden hinzuzufügen oder die RSI-Parameter anzupassen, um die Strategie für Marktveränderungen zu sensibilisieren.
Strenge Filterbedingungen führen zu verpassten ChancenDie RSI-Filterbedingungen sind strenger eingestellt (<30 und >70), was dazu führen kann, dass potenzielle Handelsmöglichkeiten verpasst werden. Der Benutzer kann den RSI-Threshold entsprechend den spezifischen Marktmerkmalen anpassen, z. B. indem er die Kaufbedingungen auf RSI <40 und die Verkaufsbedingungen auf RSI >60 lockert.
Einschränkung des Stop-Loss-Prozentsatzes der festen BremseDie Strategie verwendet eine Stop-Loss-Einstellung mit einem festen Prozentsatz von 0,5% und 1%, was in Märkten mit unterschiedlicher Volatilität möglicherweise nicht flexibel genug ist. Es wird empfohlen, die Stop-Loss-Einstellung an die dynamischen Werte der durchschnittlichen realen Volatilität der Vermögenswerte zu anpassen.
MarktüberschreitungsrisikenIn der horizontalen Korrekturphase des Marktes können sich die Moving Averages häufig überschneiden, was zu Signalverwirrung führt. Übertriebenen Handel in einem niedrig-volatilen Umfeld kann durch das Hinzufügen von zusätzlichen horizontalen Erkennungsmechanismen (wie dem ADX-Indikator) vermieden werden.
ParameterempfindlichkeitStrategie-Performance: Strategie-Performance ist sehr sensibel für Parameter-Auswahl (z. B. Moving Average-Perioden und RSI-Längen), und eine falsche Parameter-Auswahl kann zu einer schlechten Strategie-Performance führen. Es wird empfohlen, die Parameter-Optimierung und Rückmessung vor dem Einsatz in der Praxis ausreichend durchzuführen.
Dynamische Stopp-Loss-MechanismenEs ist möglich, die Stop-Loss-Einstellung mit einem festen Prozentsatz durch den ATR-Indikator zu ersetzen, um besser auf Veränderungen der Marktvolatilität reagieren zu können. Zum Beispiel kann der Stop-Loss auf 1,5 gesetzt werden*ATR, Stopp auf 1.*ATR, um Risikomanagement flexibler und marktorientierter zu gestalten.
Hinzufügen von TrendstärkenfilternDie Einführung des ADX-Indikators zur Messung der Trendstärke, der nur in einem starken Trendumfeld von ADX> 25 gehandelt wird, um zu viele Falschsignale in schwachen Trends oder Querkursen zu vermeiden.
Optimierung der RSI-ParameterDie aktuelle Strategie verwendet den Standard 14-Zyklus-RSI. Es kann in Betracht gezogen werden, den RSI-Zyklus an die Eigenschaften des jeweiligen Vermögenswerts und den Zeitrahmen anzupassen.
Einführung der LieferbestätigungEs ist möglich, dass die Anzahl der Transaktionen, die bei einem Kaufsignal stattfinden, höher ist als der N-Tage-Durchschnitt.
Dynamische Positionsanpassung: Dynamische Anpassung der Positionsgröße nach der Stärke des Trends (Anzahl der grünen oder roten Moving Averages), Erhöhung der Positionen bei stärkeren Trends, Verringerung der Positionen bei schwächeren Trends, Optimierung der Kapitalnutzung.
Marktumgebung filternDie Analyse der aktuellen Marktumstände durch Volatilitätsindikatoren (wie VIX oder ATR), die Anpassung von Strategieparametern oder die Aussetzung von Geschäften in einem hochvolatilen Umfeld, um das Risiko unter extremen Marktbedingungen zu senken.
Die Madrid Band RSI Enhanced Multi-Time Frame EMA Trend Strategie ist ein voll funktionsfähiges, quantitatives Handelssystem, das den Händlern durch die Kombination der Moving Average Band-Struktur mit dem RSI-Filterwerkzeug ein leistungsfähiges Trenderkennungs- und Handelsausführungswerkzeug bietet. Die Kernvorteile der Strategie liegen in ihren mehrfachen Bestätigungsmechanismen und der Fähigkeit, die Trendintensität zu quantifizieren, was die Handelsentscheidung objektiver und datenorientierter macht.
Obwohl Strategien in Trendmärkten gut abschneiden, können sie sich in schnelle Umkehrungen und in schlechten Märkten herausfordern. Die Robustheit und Adaptivität von Strategien kann durch die Einführung von Optimierungsmaßnahmen wie dynamischen Stop-Losses, Trendstärkefilter und Transaktionsbestätigung weiter verbessert werden.
Diese Strategie eignet sich besonders für mittel- und langfristige Trend-Trader, die durch vernünftige Parameteranpassungen und Risikomanagement in der Lage sind, in verschiedenen Marktumgebungen nach hochprobablen Handelsmöglichkeiten zu suchen. Jede Handelsstrategie muss jedoch mit den Risikopräferenzen und Investitionszielen des Händlers abgestimmt sein. Es wird empfohlen, vor der Anwendung auf dem Markt ausreichend Rückmeldung und Optimierung vorzunehmen.
/*backtest
start: 2024-03-24 00:00:00
end: 2025-03-23 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BNB_USDT"}]
*/
//@version=5
strategy("Madrid Ribbon Strategy with Backtesting", shorttitle="Madrid Ribbon Strat", overlay=true, default_qty_type=strategy.cash, default_qty_value=100000)
// Inputs
i_exp = input.bool(true, title="Use Exponential MA")
wallet_balance = input.float(100000, title="Starting Wallet Balance", minval=1000)
// RSI Settings
rsi_length = input.int(14, title="RSI Length")
rsi = ta.rsi(close, rsi_length)
// Profit Target & Stop Loss (%)
long_take_profit_perc = input.float(0.5, title="Long Take Profit (%)") / 100 // 0.5%
long_stop_loss_perc = input.float(1.0, title="Long Stop Loss (%)") / 100 // 1%
short_take_profit_perc = input.float(0.5, title="Short Take Profit (%)") / 100 // 0.5%
short_stop_loss_perc = input.float(1.0, title="Short Stop Loss (%)") / 100 // 1%
// Source
src = close
// Compute Moving Averages
ma05 = i_exp ? ta.ema(src, 5) : ta.sma(src, 5)
ma10 = i_exp ? ta.ema(src, 10) : ta.sma(src, 10)
ma15 = i_exp ? ta.ema(src, 15) : ta.sma(src, 15)
ma20 = i_exp ? ta.ema(src, 20) : ta.sma(src, 20)
ma25 = i_exp ? ta.ema(src, 25) : ta.sma(src, 25)
ma30 = i_exp ? ta.ema(src, 30) : ta.sma(src, 30)
ma35 = i_exp ? ta.ema(src, 35) : ta.sma(src, 35)
ma40 = i_exp ? ta.ema(src, 40) : ta.sma(src, 40)
ma45 = i_exp ? ta.ema(src, 45) : ta.sma(src, 45)
ma50 = i_exp ? ta.ema(src, 50) : ta.sma(src, 50)
ma55 = i_exp ? ta.ema(src, 55) : ta.sma(src, 55)
ma60 = i_exp ? ta.ema(src, 60) : ta.sma(src, 60)
ma65 = i_exp ? ta.ema(src, 65) : ta.sma(src, 65)
ma70 = i_exp ? ta.ema(src, 70) : ta.sma(src, 70)
ma75 = i_exp ? ta.ema(src, 75) : ta.sma(src, 75)
ma80 = i_exp ? ta.ema(src, 80) : ta.sma(src, 80)
ma85 = i_exp ? ta.ema(src, 85) : ta.sma(src, 85)
ma90 = i_exp ? ta.ema(src, 90) : ta.sma(src, 90)
ma100 = i_exp ? ta.ema(src, 100) : ta.sma(src, 100)
// Function for ribbon color
maColor(_ma, _maRef) =>
diffMA = ta.change(_ma)
resultColor = diffMA >= 0 and _ma > _maRef ? color.lime :
diffMA < 0 and _ma > _maRef ? color.maroon :
diffMA <= 0 and _ma < _maRef ? color.red :
diffMA >= 0 and _ma < _maRef ? color.green : color.gray
resultColor
// Count Green and Red Ribbons
count_green = 0
count_red = 0
mas = array.new_float(18)
array.set(mas, 0, ma05)
array.set(mas, 1, ma10)
array.set(mas, 2, ma15)
array.set(mas, 3, ma20)
array.set(mas, 4, ma25)
array.set(mas, 5, ma30)
array.set(mas, 6, ma35)
array.set(mas, 7, ma40)
array.set(mas, 8, ma45)
array.set(mas, 9, ma50)
array.set(mas, 10, ma55)
array.set(mas, 11, ma60)
array.set(mas, 12, ma65)
array.set(mas, 13, ma70)
array.set(mas, 14, ma75)
array.set(mas, 15, ma80)
array.set(mas, 16, ma85)
array.set(mas, 17, ma90)
for i = 0 to array.size(mas) - 1
ma = array.get(mas, i)
col = maColor(ma, ma100)
count_green += col == color.lime or col == color.green ? 1 : 0
count_red += col == color.red or col == color.maroon ? 1 : 0
// Buy/Sell Conditions
buy_signal = count_green >= 13
sell_signal = count_red >= 9
// RSI Filtering
rsi_buy = buy_signal and rsi < 30
rsi_sell = sell_signal and rsi > 70
// Calculate Entry, Take Profit & Stop Loss for Long and Short
entry_price = close
long_take_profit = entry_price * (1 + long_take_profit_perc) // +0.5%
long_stop_loss = entry_price * (1 - long_stop_loss_perc) // -1%
short_take_profit = entry_price * (1 - short_take_profit_perc) // -0.5%
short_stop_loss = entry_price * (1 + short_stop_loss_perc) // +1%
// Backtesting Orders
if rsi_buy
strategy.entry("Buy", strategy.long, qty=wallet_balance / close)
strategy.exit("Long Exit", from_entry="Buy", limit=long_take_profit, stop=long_stop_loss)
alert("📈 Buy Signal! Entering long trade at " + str.tostring(entry_price), alert.freq_once_per_bar_close)
if rsi_sell
strategy.entry("Sell", strategy.short, qty=wallet_balance / close)
strategy.exit("Short Exit", from_entry="Sell", limit=short_take_profit, stop=short_stop_loss)
alert("📉 Sell Signal! Entering short trade at " + str.tostring(entry_price), alert.freq_once_per_bar_close)
// Highlight Chart Background Based on Ribbon Counts
bgcolor(count_green >= 13 ? color.new(color.green, 90) : count_red >= 9 ? color.new(color.red, 90) : na, title="Ribbon Trend Highlight")
// Plot "B" when Buy Signal is active
plotshape(rsi_buy, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="B")
// Plot "S" when Sell Signal is active
plotshape(rsi_sell, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="S")
// Plot the Madrid Ribbon (all MAs)
plot(ma05, color=maColor(ma05, ma100), title="MA05", linewidth=1)
plot(ma10, color=maColor(ma10, ma100), title="MA10", linewidth=1)
plot(ma15, color=maColor(ma15, ma100), title="MA15", linewidth=1)
plot(ma20, color=maColor(ma20, ma100), title="MA20", linewidth=1)
plot(ma25, color=maColor(ma25, ma100), title="MA25", linewidth=1)
plot(ma30, color=maColor(ma30, ma100), title="MA30", linewidth=1)
plot(ma35, color=maColor(ma35, ma100), title="MA35", linewidth=1)
plot(ma40, color=maColor(ma40, ma100), title="MA40", linewidth=1)
plot(ma45, color=maColor(ma45, ma100), title="MA45", linewidth=1)
plot(ma50, color=maColor(ma50, ma100), title="MA50", linewidth=1)
plot(ma55, color=maColor(ma55, ma100), title="MA55", linewidth=1)
plot(ma60, color=maColor(ma60, ma100), title="MA60", linewidth=1)
plot(ma65, color=maColor(ma65, ma100), title="MA65", linewidth=1)
plot(ma70, color=maColor(ma70, ma100), title="MA70", linewidth=1)
plot(ma75, color=maColor(ma75, ma100), title="MA75", linewidth=1)
plot(ma80, color=maColor(ma80, ma100), title="MA80", linewidth=1)
plot(ma85, color=maColor(ma85, ma100), title="MA85", linewidth=1)
plot(ma90, color=maColor(ma90, ma100), title="MA90", linewidth=1)
plot(ma100, color=maColor(ma100, ma100), title="MA100", linewidth=2)