Els-Smoothed Stochastic RSI-Strategie


Erstellungsdatum: 2024-01-26 15:58:48 zuletzt geändert: 2024-01-26 15:58:48
Kopie: 0 Klicks: 777
1
konzentrieren Sie sich auf
1617
Anhänger

Els-Smoothed Stochastic RSI-Strategie

Überblick

Die Hauptidee der Strategie besteht darin, die Stochastic RSI mit Hilfe des Ehlers-SuperSmoother-Filters zu verarbeiten, um viele Falschsignale zu filtern und zu einem zuverlässigeren Handelssignal zu gelangen. Das Prinzip besteht darin, zuerst die Stochastic RSI zu berechnen, sie dann mit dem Ehlers-SuperSmoother-Filter zu verarbeiten und schließlich mit dem eigenen Moving Average zu kreuzen.

Strategieprinzip

Die Strategie berechnet zunächst den RSI-Indikator für die Tagebuchschlusskosten, dann den Stochastic-Indikator auf der Grundlage des RSI-Indikators, der typisch für einen relativ starken Index-Indikator ist. Um falsche Signale zu filtern, wird der Stochastic RSI mit einem Ells-Superflat-Filter verarbeitet.

Analyse der Stärken

Der größte Vorteil dieser Strategie besteht darin, dass der Einsatz des Els-Ultra-Glattfilters viele falsche Signale effektiv filtert, was die Handelssignale zuverlässiger macht. Außerdem hat der Stochastic RSI-Indikator selbst eine gute Durchbruch- und Trendverfolgungskapazität. Die Strategie kann also Trends richtig identifizieren, Positionen zu eröffnen, wenn es richtig ist, und Positionen zu platzieren, wenn es richtig ist.

Risikoanalyse

Das Hauptrisiko dieser Strategie besteht darin, dass bei starken Marktschwankungen leicht falsche Signale erzeugt werden. Der Stochastic RSI-Indikator erzeugt viele falsche Signale von Auf- und Abwärtsbewegungen, wenn die Preise in einem engeren Bereich stark schwanken, wobei die Wirkung des Ells-Superflat-Filters abgeschrieben wird. Darüber hinaus kann die Rückständigkeit des Indikators in einigen extremen Situationen ein gewisses Risiko mit sich bringen.

Um diese Risiken zu verringern, kann man die Parameter entsprechend anpassen, z. B. die Stochastic-Zyklus-Zahlung erhöhen, die Smoothness verringern, um die Falschsignale weiter zu filtern. Außerdem kann man in Kombination mit anderen Indikatoren oder Formen in Betracht ziehen, um mehrfache Filterbedingungen zu bilden und die Gefahr von falschen Signalen zu vermeiden.

Optimierungsrichtung

Die Strategie kann vor allem in folgenden Bereichen optimiert werden:

  1. Optimierung der Parameter Einstellungen. Die Parameter wie Länge, Gleitkonstanten und andere Parameter des Stochastic RSI-Indikators können sorgfältig getestet werden, um die optimale Kombination von Parametern zu finden.

  2. Erhöhung der Stop-Loss-Mechanismen. Es kann ein beweglicher Stop-Loss oder ein einziger Stop-Loss gesetzt werden, um Gewinne zu sperren und Rücknahmen zu reduzieren.

  3. Eine Kombination mit anderen Indikatoren oder Formen kann in Betracht gezogen werden. Eine Kombination mit Volatilitätsindikatoren, Moving Averages usw. kann zu einer Mehrfachfilterung führen und das Risiko weiter reduzieren.

  4. Anpassung der Position an die Ergebnisse der Großzyklus-Analyse. Die Positionsgröße pro Handel kann dynamisch an die Ergebnisse der Trendanalyse für höhere Zeiträume angepasst werden.

Zusammenfassen

Die Strategie berechnet zunächst den Stochastic RSI-Indikator, verarbeitet ihn dann mit dem Els Super-Smooth-Filter und bildet schließlich ein Handelssignal mit dem eigenen Moving Average, um die Trends richtig zu beurteilen. Der Vorteil der Strategie liegt in der Kombination von Indikatoren und Filtern.

Strategiequellcode
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("ES Stoch RSI Strategy [krypt]", overlay=true, calc_on_order_fills=true, calc_on_every_tick=true, initial_capital=10000, currency='USD')

//Backtest Range
FromMonth = input(defval = 06, title = "From Month", minval = 1)
FromDay   = input(defval = 1, title = "From Day", minval = 1)
FromYear  = input(defval = 2018, title = "From Year", minval = 2014)
ToMonth   = input(defval = 7, title = "To Month", minval = 1)
ToDay     = input(defval = 30, title = "To Day", minval = 1)
ToYear    = input(defval = 2018, title = "To Year", minval = 2014)

PI = 3.14159265359

drop1st(src) =>
    x = na
    x := na(src[1]) ? na : src

xlowest(src, len) =>
    x = src
    for i = 1 to len - 1
        v = src[i]
        if (na(v))
            break
        x := min(x, v)
    x

xhighest(src, len) =>
    x = src
    for i = 1 to len - 1
        v = src[i]
        if (na(v))
            break
        x := max(x, v)
    x

xstoch(c, h, l, len) =>
    xlow = xlowest(l, len)
    xhigh = xhighest(h, len) 
    100 * (c - xlow) / (xhigh - xlow)

Stochastic(c, h, l, length) =>
    rawsig = xstoch(c, h, l, length)
    min(max(rawsig, 0.0), 100.0)

xrma(src, len) =>
    sum = na
    sum := (src + (len - 1) * nz(sum[1], src)) / len

xrsi(src, len) =>
    msig = nz(change(src, 1), 0.0)
    up = xrma(max(msig, 0.0), len)
    dn = xrma(max(-msig, 0.0), len)
    rs = up / dn
    100.0 - 100.0 / (1.0 + rs)

EhlersSuperSmoother(src, lower) =>
	a1 = exp(-PI * sqrt(2) / lower)
	coeff2 = 2 * a1 * cos(sqrt(2) * PI / lower)
	coeff3 = -pow(a1, 2)
	coeff1 = (1 - coeff2 - coeff3) / 2
	filt = na
	filt := nz(coeff1 * (src + nz(src[1], src)) + coeff2 * filt[1] + coeff3 * filt[2], src)

smoothK = input(7, minval=1, title="K")
smoothD = input(2, minval=1, title="D")
lengthRSI = input(10, minval=1, title="RSI Length")
lengthStoch = input(3, minval=1, title="Stochastic Length")
showsignals = input(true, title="Buy/Sell Signals")
src = input(close,  title="Source")

ob = 80
os = 20
midpoint = 50

price = log(drop1st(src))
rsi1 = xrsi(price, lengthRSI)
rawsig = Stochastic(rsi1, rsi1, rsi1, lengthStoch)
sig = EhlersSuperSmoother(rawsig, smoothK)
ma = sma(sig, smoothD)

plot(sig, color=#0094ff, title="K", transp=0)
plot(ma, color=#ff6a00, title="D", transp=0)
lineOB = hline(ob, title="Upper Band", color=#c0c0c0)
lineOS = hline(os, title="Lower Band", color=#c0c0c0)
fill(lineOB, lineOS, color=purple, title="Background")

// Buy/Sell Signals

// use curvature information to filter out some false positives
mm1 = change(change(ma, 1), 1)
mm2 = change(change(ma, 2), 2)
ms1 = change(change(sig, 1), 1)
ms2 = change(change(sig, 2), 2)

sellsignals = showsignals and (mm1 + ms1 < 0 and mm2 + ms2 < 0) and crossunder(sig, ma) and sig[1] > ob
buysignals = showsignals and (mm1 + ms1 > 0 and mm2 + ms2 > 0) and crossover(sig, ma) and sig[1] < os

ploff = 4
plot(buysignals ? sig[1] - ploff : na, style=circles, color=#008fff, linewidth=3, title="Buy Signal", transp=0)
plot(sellsignals ? sig[1] + ploff : na, style=circles, color=#ff0000, linewidth=3, title="Sell Signal", transp=0)

longCondition = buysignals
if (longCondition)
    strategy.entry("L", strategy.long, comment="Long", when=(buysignals))

shortCondition = sellsignals
if (shortCondition)
    strategy.entry("S", strategy.short, comment="Short", when=(sellsignals))