Mehrstufige RSI-Regressionshandelsstrategie und dynamische Volatilitätsanpassung

RSI、PIVOT
Erstellungsdatum: 2024-06-21 14:16:31 zuletzt geändert: 2024-06-21 14:16:31
Kopie: 0 Klicks: 567
1
konzentrieren Sie sich auf
1617
Anhänger

Mehrstufige RSI-Regressionshandelsstrategie und dynamische Volatilitätsanpassung

Überblick

Die Strategie ist ein mehrschichtiger Mean-Return-Trading-System, das auf RSI-Indikatoren und Preisschwankungen basiert. Es nutzt RSI-Extreme und außergewöhnlich große Preisschwankungen als Einstiegssignale, während Pyramiden-Präparate und dynamische Stopps verwendet werden, um Risiken zu verwalten und Erträge zu optimieren. Die Kernidee der Strategie besteht darin, bei extremen Marktschwankungen einzugehen und bei einer Rückkehr zu normalen Preisen zu profitieren.

Strategieprinzip

  1. Teilnahmebedingungen:

    • Der 20-Zyklus-RSI wird als Hauptindikator verwendet
    • Setzen Sie mehrere RSI-Thresholds ((3565, 3070, 2575, 2080) und die entsprechenden Schwellenwerte für die Schwankungen)
    • Ein Einstiegssignal wird ausgelöst, wenn der RSI eine bestimmte Schwelle erreicht und die aktuelle K-Line-Einheit größer ist als die entsprechende Schwankungsrate-Schwelle
    • Zusätzliche Bedingung: Der Preis muss einen bestimmten Prozentsatz des jüngsten Höchst-/Tiefststützpunktes durchbrechen
  2. Die Akzentierung:

    • Maximal 5 Eintritte erlaubt ((Anfängliche Eintritt + 4 Aufschläge))
    • Jede Verlagerung erfordert strengere RSI- und Volatilitätsbedingungen
  3. Die Ausgangssysteme:

    • Setzen Sie 5 verschiedene Stop-Points
    • Stopps basieren auf der dynamischen Berechnung der Unterstützung/Widerstand-Bitte beim Eintritt
    • Mit zunehmender Anzahl von Positionen werden die Stop-Loss-Ziele reduziert.
  4. Risikokontrollen:

    • Mit einem Prozentsatzrisikomodell wird das Risiko für jeden Handel auf 20% des Gesamtwerts des Kontos festgelegt
    • Einstellung der maximal zulässigen Anzahl von gleichzeitigen Positionen auf 5, Einschränkung der Gesamtrisikolock

Strategische Vorteile

  1. Multi-Level-Entry: Die Strategie kann unterschiedliche Marktröme erfassen und die Handelschancen verbessern, indem sie mehrere RSI- und Volatilitäts-Trenchwerte einstellt.

  2. Dynamische Stopps: Stopps, die auf der Grundlage von Support/Resistance berechnet werden und sich an die Struktur des Marktes anpassen können, um Gewinne zu schützen und nicht zu früh auszutreten.

  3. Pyramiden-Holding: Eine Erhöhung der Haltungen bei fortgesetzter Tendenz kann das Gewinnpotenzial erheblich erhöhen.

  4. Risikomanagement: Festgelegte Prozentsatzrisiken und maximale Positionsbeschränkungen, um das Risiko pro Handel und insgesamt effektiv zu kontrollieren.

  5. Flexibilität: Eine Vielzahl an anpassbaren Parametern ermöglicht die Anpassung der Strategie an verschiedene Marktbedingungen und Handelsarten.

  6. Durchschnittliche Regression + Trendverfolgung: Kombiniert mit den Vorteilen von Durchschnittliche Regression und Trendverfolgung, um sowohl kurzfristige Umkehrungen als auch große Trends zu erfassen.

Strategisches Risiko

  1. Übertriebenes Trading: Es kann zu häufigen Handelssignalen führen, was zu hohen Gebühren führt, wenn die Märkte sehr volatil sind.

  2. Falscher Durchbruch: Der Markt kann nach kurzen Extremschwankungen schnell rückgängig werden, was zu falschen Signalen führt.

  3. Folgeverluste: Bei einer anhaltenden Einbahnstraße kann es zu erheblichen Verlusten nach mehreren Anlagerungen kommen.

  4. Parameter-Sensitivität: Die Strategie-Performance kann sehr empfindlich auf die Parameter-Einstellungen reagieren und es besteht die Gefahr einer Überpassung.

  5. Schlupfpunkte: In Zeiten starker Schwankungen können schwere Schlupfpunkte auftreten, die die Strategie beeinflussen.

  6. Marktumgebungsabhängigkeit: Die Strategie kann unter bestimmten Marktumgebungen, wie z. B. schwachen oder stark trendigen Märkten, schlechte Ergebnisse erzielen.

Richtung der Strategieoptimierung

  1. Dynamische Parameteranpassung: Einführung eines Anpassungsmechanismus, der den RSI und die Schwellenwerte für die Volatilität dynamisch an die Marktlage anpasst.

  2. Mehrzeit-Analysen: Verbesserte Einstiegsqualität in Kombination mit langfristigerer Marktentwicklung.

  3. Stop-Loss-Optimierung: Erhöhung des Tracking-Stops oder des dynamischen Stop-Losses auf ATR-Basis zur weiteren Risikokontrolle.

  4. Marktstatusfilter: Filterbedingungen wie Trendstärke und Schwankungsphasen werden hinzugefügt, um den Handel in einem unpassenden Marktumfeld zu vermeiden.

  5. Optimierung der Geldverwaltung: Genauere Positionsverwaltung, z. B. Anpassung der Handelsgröße an die verschiedenen Signalstufen.

  6. Maschinelle Lernintegration: Optimierung der Parameterwahl und der Signalgenerierung mit Hilfe von Machine Learning-Algorithmen.

  7. Relevanz-Analyse: Die Integration von Relevanz-Analysen mit anderen Vermögenswerten erhöht die Stabilität und Vielfalt der Strategie.

Zusammenfassen

Die Multi-Level-RSI-Regression-Trading-Strategie ist ein gut konzipiertes quantitatives Trading-System, das technisches Analysen, dynamisches Risikomanagement und Pyramiden-Hauflage-Techniken geschickt kombiniert. Die Strategie zeigt ein starkes Gewinnpotenzial, indem sie extreme Marktschwankungen erfasst und bei Preisrückgängen profitiert. Sie steht jedoch auch vor Herausforderungen wie übermäßiger Handel und Abhängigkeit von Marktumgebungen.

Strategiequellcode
/*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)