Diese Strategie ist ein Pseudo-Grid-Bot, der hauptsächlich für den algorithmischen Handel gedacht ist. Es verwendet ein dynamisches, volumengewichtetes Gitter, das nur aktualisiert wird, wenn der RSI bestimmte Bedingungen erfüllt. Es ist auch eine Ausbruchstrategie, während normale Gitterbots nicht (typische Gitterbots verkaufen, wenn ein höheres Gitter erreicht wird, während diese Strategie verkauft, wenn ein niedrigeres Gitter unter bestimmten Bedingungen verletzt wird).
Kurz gesagt, aktualisiert die Strategie ihr Raster auf die volumengewichteten höchsten/niedrigsten Werte Ihrer gegebenen Quelle (
Sie können in den Einstellungen Shorts, Quelle, RSI-Länge und Überkauf-/Überverkaufswerte konfigurieren.
Die Kernlogik der Strategie lautet:
Verwenden Sie den RSI-Indikator, um Trendumkehrpunkte zu bestimmen, wobei RSI-Linienkreuzungen von Überkauf/Überverkauf als Bestätigungssignale verwendet werden.
Wenn ein RSI-Signal auftritt, werden die höchsten/niedrigsten Preise über einen Zeitraum als obere/untere Grenzen des Netzes erfasst.
Teilen Sie den Bereich in 5 gleichmäßig verteilte Gitterlinien und überprüfen Sie in Echtzeit, zu welcher Linie der Preis am nächsten ist.
Wenn der Preis über die Linie oben bricht, gehen Sie lang.
Durch den Einsatz von Breakout anstelle von Touch kann es Trendenumkehrungen besser erfassen.
Schließen Sie alle Pyramidenaufträge, bevor Sie schließen, um Risiken zu vermeiden.
Die Strategie besteht aus:
Eingabe-Einstellungen: Quelle, RSI-Parameter, lang/kurz usw.
Berechnung des RSI: Berechnung des RSI und Überprüfung der Crossover-Signale.
Dynamisches Raster: Aufzeichnung der Preisspanne auf RSI-Signale und Berechnung der Rasterlinien.
Signalprüfung: Erkennung von Preisbrechungs-Gitterlinien für lange/kurze Signale.
Auftragsmanagement: Auftragsübermittlung und Abwicklung vor dem Abschluss.
Charting: Zeichnung von Rasterlinien, langen/kurzen Zonen usw.
Durch die dynamische Aktualisierung des Rasters und die Verwendung des RSI für den Trendkontext sowie die Ausbruchssignale kann diese Strategie Trends effektiv verfolgen und rückgängig machen, wenn sich der Trend ändert.
Die wichtigsten Vorteile dieser Strategie sind:
Dynamisches Gitter passt sich dem Trend an, im Gegensatz zu festen Gittern.
Passt nur das Gitter an, wenn RSI bestätigt wird, um Lärm zu reduzieren.
Breakout-Signale erkennen Umkehrungen besser als Berührung.
Vor dem Schließen flach, um Risiken für Übernachtung zu vermeiden.
Der RSI ist wirksam bei der Erkennung von Überkauf/Verkauf.
Der Breakout-Modus ermöglicht einen frühen Trend-Eintritt im Vergleich zur Umkehrung.
Die Anpassung des Rasterabstands und der Größe ermöglicht eine Risikostützung.
Bildschirm und lange/kurze Zonen.
Optionale Shorts für verschiedene Händler.
Einfache, klare Logik, geeignet für Algo-Handel.
Diese machen die Strategie für die automatische Trendverfolgung mit Risikokontrollen für den Live-Handel geeignet.
Es gibt auch einige potenzielle Risiken zu beachten:
Whipsaw-Märkte können Stop-Losses verursachen, Stops erweitern oder den Handel pausieren.
Übernachtungs-Lücken können große Lücken hinterlassen und die Positionsgröße reduzieren.
Eine schlechte Einstellung der Parameter kann den Handel oder Signalfehler erhöhen.
Hohe Gebühren können die Gewinne aus dem Netzhandel beeinträchtigen.
Die Breakout-Signale können etwas zurückbleiben, es braucht eine angemessene Breakout-Schwelle.
Bei einem stetigen Aufwärtstrend kann es unterlegen sein, die Kombination mit anderen Indikatoren zu berücksichtigen.
Es bedarf genügend Kapitals für größere Positionsgrößen und Pyramiden, sonst werden die Ergebnisse schlecht sein.
Abmilderung:
Optimierung der Parameter zur Verringerung der Handelsfrequenz und des Überhandels.
Kombinieren Sie mit Trendindikatoren, vermeiden Sie den Handel mit Whipsaw-Perioden.
Verringern Sie die Handelsgröße und das Risiko pro Handel.
Versuche verschiedene Ausbruchschwellen für eine optimale Balance zwischen Zeit und Stabilität.
Fügen Sie mehr Einstiegsbedingungen hinzu, geben Sie nur klare Trends ein, um nicht gefangen zu werden.
Zur Beurteilung der Parameterstabilität wird ein Rücktest über längere Zeiträume durchgeführt.
Erforschung der auf maschinellem Lernen basierenden dynamischen Parameteroptimierung für Marktanpassungsfähigkeit.
Sie sollten eine Kombination mit Optionsstrategien zur Absicherung von Positionsrisiken in Betracht ziehen.
Anpassung der Parameter an die jüngsten Marktbedingungen, um die Strategie wirksam zu halten.
Erstellen von visuellen Optimierungsplattformen zur Unterstützung des schnellen Tests.
Mit Parameteroptimierung, Messung von Signalen und mehr Marktinformationen können die Risiken reduziert werden, um eine wirklich zuverlässige Algo-Strategie zu entwickeln.
Die Strategie kann weiter ausgebaut werden, indem
RSI-Parameter optimieren, RSI-Perioden für die besten Kombinationen testen.
Verschiedene Rasterabstände für ein optimales Risiko-Rendite-Verhältnis testen.
Hinzufügen anderer Indikatoren zu Filtersignalen, z.B. MACD, KD usw. zur Verbesserung der Genauigkeit.
Entwicklung anpassungsfähiger Stopps basierend auf der Marktvolatilität.
Steigende Einstiegsbedingungen, nur offensichtliche Trends eingeben, um Fallen zu vermeiden.
Zur Beurteilung der Parameterstabilität werden längere Zeiträume zurückgetestet.
Erforschung dynamischer Optimierung auf Basis von maschinellem Lernen für Anpassungsfähigkeit.
Einbeziehung von Optionsstrategien zur Absicherung von Risiken.
Anpassung der Parameter an die jüngsten Marktbedingungen zur Aufrechterhaltung der Wirksamkeit.
Schaffung visueller Optimierungsplattformen für schnelle Tests.
Mit automatisierter Optimierung, Strategie-Combos, mehr Marktinformationen usw. kann es eine bessere Stabilität und Renditen als echte Handelsstrategie erzielen.
Zusammenfassend lässt sich sagen, dass die RSI Box Grid-Strategie den RSI verwendet, um Trendumkehrbestätigungen zu identifizieren, dynamische Preisspanne-Gitter, Trades Breakouts und Flachungen innerhalb des Tages festzulegen - was einen flexiblen Trend nach der Algo-Handelsstrategie bildet. Im Vergleich zu festen Gittern passt sie sich besser an Marktveränderungen an.
Die Strategie hat Vorteile, darunter RSI für den Trendkontext, dynamische Gitter, Breakout-Handel und eine vollständige Intraday-Ebene. Dies ermöglicht es, Trends effektiv mit Risikokontrollen zu verfolgen. Allerdings bestehen Risiken wie Whipsaw-Stop-Losses, Übernachtungslücken, die Optimierung, Kämmen von Signalen und Risikomanagement erfordern.
Es gibt viele Verbesserungsmöglichkeiten, indem mehr Indikatoren, ML-Optimierung, visuelles Backtesting usw. integriert werden, kann es zu einer robusteren High-Return-Algo-Handelsstrategie werden.
/*backtest start: 2023-09-29 00:00:00 end: 2023-10-29 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/ // © wbburgin //@version=5 // strategy("RSI Box Strategy (pseudo-Grid Bot)", overlay=true, initial_capital = 10000, // default_qty_type = strategy.percent_of_equity, default_qty_value = 1, pyramiding = 33, commission_value=0.10) src = input.source(close,"Source") rsiLength = input.int(14,"RSI Length") oblvl = input.int(70,"Overbought Level") oslvl = input.int(30,"Oversold Level") useShorts = input.bool(false,"Use Shorts",inline="B") showGrid = input.bool(false,"Show Grid",inline="B") rsi = ta.rsi(src,rsiLength) rsi_crossdn = ta.crossunder(rsi,oblvl) rsi_crossup = ta.crossover(rsi,oslvl) highest = ta.vwma(ta.highest(src,rsiLength),rsiLength) lowest = ta.vwma(ta.lowest(src,rsiLength), rsiLength) gridTop = ta.valuewhen(rsi_crossdn,highest,0) gridBottom = ta.valuewhen(rsi_crossup,lowest,0) gridMiddle = math.avg(gridTop,gridBottom) gridMidTop = math.avg(gridMiddle,gridTop) gridMidBottom = math.avg(gridMiddle,gridBottom) diff1 = math.abs(src - gridTop) diff2 = math.abs(src - gridBottom) diff3 = math.abs(src - gridMiddle) diff4 = math.abs(src - gridMidTop) diff5 = math.abs(src - gridMidBottom) minDiff = math.min(diff1, diff2, diff3, diff4, diff5) // Determine which line is the closest float closestLine = na if minDiff == diff1 closestLine := gridTop else if minDiff == diff2 closestLine := gridBottom else if minDiff == diff3 closestLine := gridMiddle else if minDiff == diff4 closestLine := gridMidTop else if minDiff == diff5 closestLine := gridMidBottom buyCrosses = ta.crossover(src,gridTop) or ta.crossover(src,gridBottom) or ta.crossover(src,gridMiddle) or ta.crossover(src,gridMidTop) or ta.crossover(src,gridMidBottom) sellCrosses= ta.crossunder(src,gridTop) or ta.crossunder(src,gridBottom) or ta.crossunder(src,gridMiddle) or ta.crossunder(src,gridMidTop) or ta.crossunder(src,gridMidBottom) condition_bull = buyCrosses condition_bear = sellCrosses var float bull_status_line = na var float bear_status_line = na var float bull_buy_line = na var float bear_sell_line = na if condition_bull bull_status_line := closestLine if condition_bear bear_status_line := closestLine if bull_status_line == gridBottom bull_buy_line := gridMidBottom if bull_status_line == gridMidBottom bull_buy_line := gridMiddle if bull_status_line == gridMiddle bull_buy_line := gridMidTop if bull_status_line == gridMidTop bull_buy_line := gridTop if bear_status_line == gridTop bear_sell_line := gridMidTop if bear_status_line == gridMidTop bear_sell_line := gridMiddle if bear_status_line == gridMiddle bear_sell_line := gridMidBottom if bear_status_line == gridMidBottom bear_sell_line := gridBottom l = ta.crossover(src,bull_buy_line) s = ta.crossunder(src,bear_sell_line) if l strategy.entry("Long",strategy.long) if s strategy.close("Long") if useShorts strategy.entry("Short",strategy.short) // Plotting in_buy = ta.barssince(l) < ta.barssince(s) u=plot(bull_buy_line,color=na,title="Buy Plot") d=plot(bear_sell_line,color=na,title="Sell Plot") plot(not showGrid?na:gridBottom,color=color.new(color.white,75),title="Grid Line -2") plot(not showGrid?na:gridMidBottom,color=color.new(color.white,75),title="Grid Line -1") plot(not showGrid?na:gridMiddle,color=color.new(color.white,75),title="Grid Line 0") plot(not showGrid?na:gridMidTop,color=color.new(color.white,75),title="Grid Line 1") plot(not showGrid?na:gridTop,color=color.new(color.white,75),title="Grid Line 2") fill(u,d,color=in_buy ? color.new(color.lime,75) : color.new(color.red,75))