Diese Strategie ist ein mehrstufiges Mittelumkehrhandelssystem, das auf dem RSI-Indikator und der Preisvolatilität basiert. Es verwendet extreme RSI-Werte und ungewöhnlich große Preisschwankungen als Einstiegssignale, während es Pyramiden-Stil-Positionsskalierungen und dynamische Take-Profit-Niveaus verwendet, um Risiken zu managen und Renditen zu optimieren. Die Kernidee dieser Strategie besteht darin, während extremer Volatilität und Gewinn auf den Markt zu kommen, wenn die Preise wieder auf normales Niveau zurückkehren.
Eintrittsbedingungen:
Mechanismus zur Skalierung der Position:
Ausfahrtmechanismus:
Risikokontrolle:
Multi-Level-Entry: Durch die Festlegung mehrerer RSI- und Volatilitätsschwellenwerte kann die Strategie unterschiedliche Grade von Marktextremen erfassen und die Handelsmöglichkeiten erhöhen.
Dynamische Gewinnspanne: Die auf Basis von Unterstützungs-/Widerstandsniveaus berechneten Gewinnspanne können sich an die Marktstruktur anpassen und die Gewinne schützen, ohne zu früh zu verlassen.
Pyramidenartige Skalierung von Positionen: Die Erhöhung der Positionen im Zuge der Entwicklung der Trends kann das Gewinnpotenzial erheblich erhöhen.
Risikomanagement: Festes Prozentsatzrisiko und maximale Positionslimits kontrollieren das Risiko für jeden Handel und insgesamt wirksam.
Flexibilität: Dank zahlreicher anpassbarer Parameter kann die Strategie sich an unterschiedliche Marktumgebungen und Handelsinstrumente anpassen.
Durchschnittliche Umkehrung + Trendverfolgung: kombiniert die Vorteile der durchschnittlichen Umkehrung und des Trendverfolgens und erfasst kurzfristige Umkehrungen, ohne wichtige Trends zu verpassen.
Übertrading: Kann häufige Handelssignale in stark volatilen Märkten auslösen, was zu übermäßigen Gebühren führt.
Falsche Ausbrüche: Auf den Märkten kann es zu kurzer extremer Volatilität kommen, gefolgt von schnellen Umkehrungen, die falsche Signale verursachen.
Folgende Verluste: Kontinuierliche einseitige Marktbewegungen können nach mehrfacher Erhöhung der Positionen zu erheblichen Verlusten führen.
Parameterempfindlichkeit: Die Strategieleistung kann sehr empfindlich auf die Parameter-Einstellungen ausgerichtet sein, was zu einer Überanpassung führen kann.
Schwankungswirkung: In Zeiten starker Volatilität kann es zu starken Schwankungen kommen, die sich auf die Strategieergebnisse auswirken.
Abhängigkeit vom Marktumfeld: Die Strategie kann in bestimmten Marktumgebungen, wie niedrigen Volatilitäten oder starken Trendmärkten, unterdurchschnittlich abschneiden.
Dynamische Anpassung der Parameter: Einführung anpassungsfähiger Mechanismen zur dynamischen Anpassung der RSI- und Volatilitätsschwellenwerte anhand der Marktbedingungen.
Mehrzeitanalyse: Einbeziehung längerfristiger Marktentwicklungsbeurteilungen zur Verbesserung der Eintrittsqualität.
Optimierung des Stop-Loss: Hinzufügen von Trailing-Stop-Loss oder ATR-basierten dynamischen Stop-Loss zur weiteren Risikokontrolle.
Filterung des Marktzustands: Trendstärke, Volatilitätszyklus und andere Filterungsbedingungen sind zu berücksichtigen, um den Handel in ungeeigneten Marktumgebungen zu vermeiden.
Optimierung des Kapitalmanagements: Implementieren Sie ein detaillierteres Positionsmanagement, z. B. Anpassung der Handelsgröße anhand verschiedener Signalstufen.
Integration des maschinellen Lernens: Verwenden von Algorithmen des maschinellen Lernens zur Optimierung der Parameterwahl und der Signalgenerierungsprozesse.
Korrelationsanalyse: Korrelationsanalyse mit anderen Vermögenswerten einbeziehen, um die Stabilität und Vielfalt der Strategie zu verbessern.
Diese mehrstufige RSI-Mittel-Reversion-Handelsstrategie ist ein sorgfältig konzipiertes quantitatives Handelssystem, das klug technische Analyse, dynamisches Risikomanagement und Pyramiden-Stil-Positionsscaling-Techniken kombiniert. Durch die Erfassung extremer Marktvolatilität und das Gewinnen, wenn die Preise umkehren, zeigt die Strategie ein starkes Gewinnpotenzial. Allerdings steht sie auch vor Herausforderungen wie Überhandel und Abhängigkeit vom Marktumfeld. Die zukünftige Optimierung sollte sich auf die Verbesserung der Anpassungsfähigkeit und Risikokontrollfähigkeit der Strategie konzentrieren, um verschiedenen Marktumgebungen gerecht zu werden. Insgesamt ist dies ein Strategierahmen mit einem soliden Fundament, das sich durch weitere Optimierung und Backtesting zu einem robusten Handelssystem entwickeln kann.
/*backtest start: 2024-05-01 00:00:00 end: 2024-05-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy('Retorno_Pivots_5min_Novo_v3.3') // Input variables bars_left1 = input(1, title = "Entry - Pivot Left Bars") bars_right1 = input(1, title = "Entry - Pivot Right Bars") rsi20_longentry0 = input(35, title = "Entry 1 - RSI20 Long") rsi20_shortentry0 = input(65, title = "Entry 1 - RSI20 Short") bar_size_entry0 = input.float(1, title="Entry 1 - Bar Size") rsi20_longentry1 = input(30, title = "Entry 2 - RSI20 Long") rsi20_shortentry1 = input(70, title = "Entry 2 - RSI20 Short") bar_size_entry1 = input.float(0.8, title="Entry 2 - Bar Size") rsi20_longentry2 = input(25, title = "Entry 3 - RSI20 Long") rsi20_shortentry2 = input(75, title = "Entry 3 - RSI20 Short") bar_size_entry2 = input.float(0.7, title="Entry 3 - Bar Size") rsi20_longentry3 = input(20, title = "Entry 4 - RSI20 Long") rsi20_shortentry3 = input(80, title = "Entry 4 - RSI20 Short") bar_size_entry3 = input.float(0.5, title="Entry 4 - Bar Size") limit_perc1 = input.float(0.60, title="Profit Range 1") limit_perc2 = input.float(0.40, title="Profit Range 2") limit_perc3 = input.float(0.20, title="Profit Range 3") limit_perc4 = input.float(0.00, title="Profit Range 4") limit_perc5 = input.float(0.00, title="Profit Range 5") minimum_pivot_distance = input.float(0, title="Minimum Pivot Distance %") barsize_1h_input = input(288, title="Highest Bar Lookback") rsi20 = ta.rsi(close, 20) rsi200 = ta.rsi(close, 200) Pivot_High_Last1 = ta.valuewhen(ta.pivothigh(high, bars_left1, bars_right1), ta.pivothigh(high, bars_left1, bars_right1), 0) Pivot_Low_Last1 = ta.valuewhen(ta.pivotlow(low, bars_left1, bars_right1), ta.pivotlow(low, bars_left1, bars_right1), 0) barsize = math.abs(close - open) barsize_1h = ta.highest(barsize, barsize_1h_input) Bar0Long = rsi20 < rsi20_longentry0 and barsize >= (barsize_1h * bar_size_entry0) Bar1Long = rsi20 < rsi20_longentry1 and barsize >= (barsize_1h * bar_size_entry1) Bar2Long = rsi20 < rsi20_longentry2 and barsize >= (barsize_1h * bar_size_entry2) Bar3Long = rsi20 < rsi20_longentry3 and barsize >= (barsize_1h * bar_size_entry3) // Long Entries Long_Entry1 = strategy.opentrades == 0 and rsi20 < rsi20[1] and ((rsi20 < rsi20_longentry0 and barsize >= (barsize_1h * bar_size_entry0)) or (rsi20 < rsi20_longentry1 and barsize >= (barsize_1h * bar_size_entry1)) or (rsi20 < rsi20_longentry2 and barsize >= (barsize_1h * bar_size_entry2)) or (rsi20 < rsi20_longentry3 and barsize >= (barsize_1h * bar_size_entry3))) and close < (Pivot_Low_Last1 * (1 - (minimum_pivot_distance / 100))) Long_Entry2 = strategy.opentrades == 1 and strategy.position_size > 0 and rsi20 < rsi20[1] and (Bar0Long or Bar1Long or Bar2Long or Bar3Long) Long_Entry3 = strategy.opentrades == 2 and strategy.position_size > 0 and rsi20 < rsi20[1] and (Bar0Long or Bar1Long or Bar2Long or Bar3Long) Long_Entry4 = strategy.opentrades == 3 and strategy.position_size > 0 and rsi20 < rsi20[1] and (Bar0Long or Bar1Long or Bar2Long or Bar3Long) Long_Entry5 = strategy.opentrades == 4 and strategy.position_size > 0 and rsi20 < rsi20[1] and (Bar0Long or Bar1Long or Bar2Long or Bar3Long) if Long_Entry1 or Long_Entry2 or Long_Entry3 or Long_Entry4 or Long_Entry5 strategy.entry("Long", strategy.long, comment = "ENTER-LONG_BINANCE-FUTURES_BTCBUSD_Bot-BTC-1min_1M_970d2ee265390c27") // Longs Exits Long_Exit1 = strategy.opentrades == 1 and close > (strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc1)) Long_Exit2 = strategy.opentrades == 2 and close > (strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc2)) Long_Exit3 = strategy.opentrades == 3 and close > (strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc3)) Long_Exit4 = strategy.opentrades == 4 and close > (strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc4)) Long_Exit5 = strategy.opentrades == 5 and close > (strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc5)) if Long_Exit1 or Long_Exit2 or Long_Exit3 or Long_Exit4 or Long_Exit5 strategy.close("Long", comment = "EXIT-LONG_BINANCE-FUTURES_BTCBUSD_Bot-BTC-1min_1M_970d2ee265390c27") Bar0Short = rsi20 > rsi20_shortentry0 and barsize >= (barsize_1h * bar_size_entry0) Bar1Short = rsi20 > rsi20_shortentry1 and barsize >= (barsize_1h * bar_size_entry1) Bar2Short = rsi20 > rsi20_shortentry2 and barsize >= (barsize_1h * bar_size_entry2) Bar3Short = rsi20 > rsi20_shortentry3 and barsize >= (barsize_1h * bar_size_entry3) // Short Entries Short_Entry1 = strategy.opentrades == 0 and rsi20 > rsi20[1] and ((rsi20 > rsi20_shortentry0 and barsize >= (barsize_1h * bar_size_entry0)) or (rsi20 > rsi20_shortentry1 and barsize >= (barsize_1h * bar_size_entry1)) or (rsi20 > rsi20_shortentry2 and barsize >= (barsize_1h * bar_size_entry2)) or (rsi20 > rsi20_shortentry2 and barsize >= (barsize_1h * bar_size_entry2))) and close > (Pivot_High_Last1 * (1 + (minimum_pivot_distance / 100))) Short_Entry2 = strategy.opentrades == 1 and strategy.position_size < 0 and rsi20 > rsi20[1] and (Bar0Short or Bar1Short or Bar2Short or Bar3Short) Short_Entry3 = strategy.opentrades == 2 and strategy.position_size < 0 and rsi20 > rsi20[1] and (Bar0Short or Bar1Short or Bar2Short or Bar3Short) Short_Entry4 = strategy.opentrades == 3 and strategy.position_size < 0 and rsi20 > rsi20[1] and (Bar0Short or Bar1Short or Bar2Short or Bar3Short) Short_Entry5 = strategy.opentrades == 4 and strategy.position_size < 0 and rsi20 > rsi20[1] and (Bar0Short or Bar1Short or Bar2Short or Bar3Short) if Short_Entry1 or Short_Entry2 or Short_Entry3 or Short_Entry4 or Short_Entry5 strategy.entry("Short", strategy.short, comment = "ENTER-SHORT_BINANCE-FUTURES_BTCBUSD_Bot-BTC-1min_1M_970d2ee265390c27") // Short Exits Short_Exit1 = strategy.opentrades == 1 and close < (strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc1)) Short_Exit2 = strategy.opentrades == 2 and close < (strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc2)) Short_Exit3 = strategy.opentrades == 3 and close < (strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc3)) Short_Exit4 = strategy.opentrades == 4 and close < (strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc4)) Short_Exit5 = strategy.opentrades == 5 and close < (strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc5)) if Short_Exit1 or Short_Exit2 or Short_Exit3 or Short_Exit4 or Short_Exit5 strategy.close("Short", comment = "EXIT-SHORT_BINANCE-FUTURES_BTCBUSD_Bot-BTC-1min_1M_970d2ee265390c27") // Plots plot(rsi20, color=color.new(#fbff00, 0), linewidth=2) plot(((strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc1))), color=color.new(#00ff2a, 0), linewidth=2) plot(((strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc2))), color=color.new(#00ff2a, 50), linewidth=2) plot(((strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc3))), color=color.new(#00ff2a, 80), linewidth=2) plot(((strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc4))), color=color.new(#00ff2a, 100), linewidth=2) plot((strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc1)), color=color.new(#ff0000, 0), linewidth=2) plot((strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc2)), color=color.new(#ff0000, 50), linewidth=2) plot((strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc3)), color=color.new(#ff0000, 80), linewidth=2) plot((strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc4)), color=color.new(#ff0000, 100), linewidth=2) plot(strategy.position_avg_price, color=color.new(#ffc400, 0), linewidth=2) plot(strategy.opentrades * (strategy.position_size / math.abs(strategy.position_size)), color=color.new(#ff00bb, 0), linewidth=2) plot(((barsize / barsize_1h) * 100), color=color.new(#0000ff, 0), linewidth=2)