RSI-Boxnetzstrategie

Schriftsteller:ChaoZhang, Datum: 23.10.2023
Tags:

img

Übersicht

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 (src in den Einstellungen) jedes Mal, wenn der RSI unter/über die überkauften/überverkauften Ebenen kreuzt. Aus diesem Bereich erzeugt sie ein gleichmäßig geräumtes Raster von fünf Linien und verwendet die aktuelle Quelle, um zu bestimmen, welche Rasterlinie am nächsten ist. Wenn dann die Quelle direkt über die Linie oben kreuzt, tritt sie in eine lange. Wenn die Quelle unter die Linie direkt unten kreuzt, tritt sie in eine kurze.

Sie können in den Einstellungen Shorts, Quelle, RSI-Länge und Überkauf-/Überverkaufswerte konfigurieren.

Strategie Logik

Die Kernlogik der Strategie lautet:

  1. Verwenden Sie den RSI-Indikator, um Trendumkehrpunkte zu bestimmen, wobei RSI-Linienkreuzungen von Überkauf/Überverkauf als Bestätigungssignale verwendet werden.

  2. Wenn ein RSI-Signal auftritt, werden die höchsten/niedrigsten Preise über einen Zeitraum als obere/untere Grenzen des Netzes erfasst.

  3. 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.

  4. Wenn der Preis über die Linie oben bricht, gehen Sie lang.

  5. Durch den Einsatz von Breakout anstelle von Touch kann es Trendenumkehrungen besser erfassen.

  6. Schließen Sie alle Pyramidenaufträge, bevor Sie schließen, um Risiken zu vermeiden.

Die Strategie besteht aus:

  1. Eingabe-Einstellungen: Quelle, RSI-Parameter, lang/kurz usw.

  2. Berechnung des RSI: Berechnung des RSI und Überprüfung der Crossover-Signale.

  3. Dynamisches Raster: Aufzeichnung der Preisspanne auf RSI-Signale und Berechnung der Rasterlinien.

  4. Signalprüfung: Erkennung von Preisbrechungs-Gitterlinien für lange/kurze Signale.

  5. Auftragsmanagement: Auftragsübermittlung und Abwicklung vor dem Abschluss.

  6. 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.

Analyse der Vorteile

Die wichtigsten Vorteile dieser Strategie sind:

  1. Dynamisches Gitter passt sich dem Trend an, im Gegensatz zu festen Gittern.

  2. Passt nur das Gitter an, wenn RSI bestätigt wird, um Lärm zu reduzieren.

  3. Breakout-Signale erkennen Umkehrungen besser als Berührung.

  4. Vor dem Schließen flach, um Risiken für Übernachtung zu vermeiden.

  5. Der RSI ist wirksam bei der Erkennung von Überkauf/Verkauf.

  6. Der Breakout-Modus ermöglicht einen frühen Trend-Eintritt im Vergleich zur Umkehrung.

  7. Die Anpassung des Rasterabstands und der Größe ermöglicht eine Risikostützung.

  8. Bildschirm und lange/kurze Zonen.

  9. Optionale Shorts für verschiedene Händler.

  10. 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.

Risikoanalyse

Es gibt auch einige potenzielle Risiken zu beachten:

  1. Whipsaw-Märkte können Stop-Losses verursachen, Stops erweitern oder den Handel pausieren.

  2. Übernachtungs-Lücken können große Lücken hinterlassen und die Positionsgröße reduzieren.

  3. Eine schlechte Einstellung der Parameter kann den Handel oder Signalfehler erhöhen.

  4. Hohe Gebühren können die Gewinne aus dem Netzhandel beeinträchtigen.

  5. Die Breakout-Signale können etwas zurückbleiben, es braucht eine angemessene Breakout-Schwelle.

  6. Bei einem stetigen Aufwärtstrend kann es unterlegen sein, die Kombination mit anderen Indikatoren zu berücksichtigen.

  7. Es bedarf genügend Kapitals für größere Positionsgrößen und Pyramiden, sonst werden die Ergebnisse schlecht sein.

Abmilderung:

  1. Optimierung der Parameter zur Verringerung der Handelsfrequenz und des Überhandels.

  2. Kombinieren Sie mit Trendindikatoren, vermeiden Sie den Handel mit Whipsaw-Perioden.

  3. Verringern Sie die Handelsgröße und das Risiko pro Handel.

  4. Versuche verschiedene Ausbruchschwellen für eine optimale Balance zwischen Zeit und Stabilität.

  5. Fügen Sie mehr Einstiegsbedingungen hinzu, geben Sie nur klare Trends ein, um nicht gefangen zu werden.

  6. Zur Beurteilung der Parameterstabilität wird ein Rücktest über längere Zeiträume durchgeführt.

  7. Erforschung der auf maschinellem Lernen basierenden dynamischen Parameteroptimierung für Marktanpassungsfähigkeit.

  8. Sie sollten eine Kombination mit Optionsstrategien zur Absicherung von Positionsrisiken in Betracht ziehen.

  9. Anpassung der Parameter an die jüngsten Marktbedingungen, um die Strategie wirksam zu halten.

  10. 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.

Möglichkeiten zur Verbesserung

Die Strategie kann weiter ausgebaut werden, indem

  1. RSI-Parameter optimieren, RSI-Perioden für die besten Kombinationen testen.

  2. Verschiedene Rasterabstände für ein optimales Risiko-Rendite-Verhältnis testen.

  3. Hinzufügen anderer Indikatoren zu Filtersignalen, z.B. MACD, KD usw. zur Verbesserung der Genauigkeit.

  4. Entwicklung anpassungsfähiger Stopps basierend auf der Marktvolatilität.

  5. Steigende Einstiegsbedingungen, nur offensichtliche Trends eingeben, um Fallen zu vermeiden.

  6. Zur Beurteilung der Parameterstabilität werden längere Zeiträume zurückgetestet.

  7. Erforschung dynamischer Optimierung auf Basis von maschinellem Lernen für Anpassungsfähigkeit.

  8. Einbeziehung von Optionsstrategien zur Absicherung von Risiken.

  9. Anpassung der Parameter an die jüngsten Marktbedingungen zur Aufrechterhaltung der Wirksamkeit.

  10. 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.

Zusammenfassung

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))

Mehr