Die Kernidee dieser Strategie besteht darin, die aktuelle Preisspanne durch Kombination von RSI-Indikatoren verschiedener Zyklen zu bestimmen und entsprechende Kauf- oder Verkaufsaktionen in kleineren Zyklen zu ergreifen, wenn ein Ausbruch im größeren Zyklus RSI vorliegt.
Die wichtigsten Schritte dieser Strategie zur Bestimmung der Preisspanne und zur Suche nach Handelsmöglichkeiten sind:
Zum Beispiel, wenn der tägliche RSI seinen vorherigen Höchststand durchbricht, beurteilen wir, dass es sich derzeit um einen Bullenmarkt handelt. Und wenn der tägliche RSI unter seinen vorherigen Tiefpunkt bricht, beurteilen wir ihn als Bärenmarkt. In beiden Fällen nehmen wir in dem 5-minütigen Diagramm Long- und Short-Aktionen.
Im Vergleich zu traditionellen Strategien, die sich nur auf einen Zeitraum konzentrieren, hat diese Strategie folgende Vorteile:
Eine genauere Beurteilung des aktuellen relativen Preiswerts. Größere Zyklen wie täglich können kurzfristige Marktlärm filtern und den allgemeinen Trend und Wertbereich bestimmen.
Die Kombination von Indikatoren über Perioden hinweg verbessert die Signalzuverlässigkeit.
Ein großer Zyklus-Ausbruch zeigt die allgemeine Richtung, während wir nur in kleinen Zyklen wie 5 Minuten Chancen finden müssen, um zu profitieren.
Kleine Rückgänge. Durch die Kombination von Querschnittsperioden vermeidet man, gefangen zu werden. Wir können schnell aussteigen, wenn sich große Zyklusindikatoren umkehren.
Die wichtigsten Risiken dieser Strategie bestehen in:
Falsches Urteilsvermögen bei großen Zyklusindikatoren. Ineffiziente Werteberechnung im täglichen RSI usw. kann zu fehlerhaften Signalen führen. Parameter-Tuning des RSI ist erforderlich, um die Genauigkeit zu verbessern.
Die Differenz zwischen kleinen Zyklus Preisbewegung und große Zyklus Bestimmung. Manchmal kurzfristige Bewegungen widersetzen sich großen Bild Trends. Wir müssen richtigen Stop-Loss setzen, um den Verlust zu kontrollieren.
Unzulängliche Risikomanagement. Übermäßige Verluste im Einzelhandel aufgrund einer schlechten Positionsgröße könnten zu einer unwiederbringlichen Rücknahme führen.
Diese Strategie kann noch weitgehend verbessert werden, vor allem in den folgenden Bereichen:
Test mehr Periodenkombinationen, um optimale Parameter zu finden.
Anpassung der RSI-Parameter, Anpassung der RSI-Lookback-Parameter usw. zur Verbesserung der Richtigkeit des Urteils.
Fügen Sie mehr Indikatoren hinzu. Bringen Sie mehr Indikatoren wie MA ein, um die Trendrichtung zu beurteilen.
Verbessern Sie den Stop-Loss-Mechanismus und anpassen Sie die Stop-Loss-Punkte dynamisch anhand der Drawdown-Bedingungen.
Optimieren Sie die Positionsgrößenregeln und verwalten Sie die spezifischen Positionsgrößen für jeden Handel wissenschaftlicher.
Diese Strategie realisiert die Querschnittszeit-Arbitrage zwischen verschiedenen Zeitdimensionen, indem sie die bullische Situation in den Querschnittszeit-RSIs bewertet. Eine solche Idee des Querschnittszeit-Urteils verdient weitere Ausbeutung. Wir können sie durch Parameter-Tuning, Stop-Loss-Optimierung, Indikatorenkombinationen verbessern, um sie vorteilhafter zu machen. Insgesamt hat diese Strategie eine einzigartige Idee und ein großes Potenzial zur Verbesserung.
/*backtest start: 2022-12-05 00:00:00 end: 2023-12-11 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Swing MTF", shorttitle="Swing MTF", overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 10000, slippage = 5) // otf_period = input(defval=2, title="Look Back Period (2nd Timeframe)") otf = input(defval="180", title="Second Momentum Timeframe") // Function to dectect a new bar is_newbar(res) => t = time(res) change(t) != 0 ? true : false // Check how many bars are in our upper timeframe since_new_bar = barssince(is_newbar(otf)) otf_total_bars = na otf_total_bars := since_new_bar == 0 ? since_new_bar[1] : otf_total_bars[1] //Calculate RSI Values ctf_rsi = rsi(open, otf_period) breakline=input(title="Breaks in lines", defval = true, type=bool) so = request.security(syminfo.tickerid, otf, rsi(open, otf_period)) sc = request.security(syminfo.tickerid, otf, rsi(close, otf_period)) final_otf_so = na final_otf_so := barstate.isrealtime ? since_new_bar == otf_total_bars ? so : final_otf_so[1] : so final_otf_sc = na final_otf_sc := barstate.isrealtime ? since_new_bar == otf_total_bars ? sc : final_otf_sc[1] : sc barsback = input(11, title='Bars back to check for a swing') // showsig = input(false, title='Show Signal Markers') swing_detection(index)=> swing_high = false swing_low = false start = (index*2) - 1 // -1 so we have an even number of swing_point_high = final_otf_so[index] swing_point_low = final_otf_sc[index] //Swing Highs for i = 0 to start swing_high := true if i < index if final_otf_so[i] > swing_point_high swing_high := false break // Have to do checks before pivot and after seperately because we can get // two highs of the same value in a row. Notice the > and >= difference if i > index if final_otf_so[i] >= swing_point_high swing_high := false break //Swing lows for i = 0 to start swing_low := true if i < index if final_otf_sc[i] < swing_point_low swing_low := false break // Have to do checks before pivot and after seperately because we can get // two lows of the same value in a row. Notice the > and >= difference if i > index if final_otf_sc[i] <= swing_point_low swing_low := false break [swing_high, swing_low] // Check for a swing [swing_high, swing_low] = swing_detection(barsback) long = final_otf_so > final_otf_sc short = final_otf_so < final_otf_sc if swing_low and long strategy.entry("My Long Entry Id", strategy.long) if swing_high and short strategy.entry("My Short Entry Id", strategy.short)