Die Ressourcen sind geladen. Beförderung...

Momentum ADX mit RSI Trailing Stop Strategie

Schriftsteller:ChaoZhang, Datum: 2023-10-09 15:36:07
Tags:

Übersicht

Diese Strategie kombiniert Impulsindikatoren mit dem Relative Strength Index (RSI) zusammen mit einem dynamischen Trailing Stop-Mechanismus, um die Trendrichtung zu erfassen und gleichzeitig das Risiko zu kontrollieren.

Wie es funktioniert

Eintritt mit Momentum ADX und RSI

  • Verwenden Sie den ADX-Indikator, um die Kursentwicklung zu bestimmen

    • ADX über 20 zeigt, dass ein Trend besteht

    • +DI über -DI ist ein langes Signal

    • - DI unter +DI ist ein kurzes Signal

  • RSI zur Ermittlung von Überkauf/Überverkauf

    • Der RSI über 70 deutet auf einen Überkauf und ein Kurzsignal hin

    • Der RSI unter 30 deutet auf einen Überverkauf und ein Long Signal hin.

Lange/kurze Positionen einnehmen, wenn der ADX einen Trend + ein RSI-Bestätigungssignal zeigt.

Verstellbarer Rückhalt

Die Strategie verwendet einen dynamischen Trailing Stop-Mechanismus mit zwei Parametern:

  • Aktivierungsstufe: Aktivieren von Trailing Stop, wenn der Preis nach dem Eintritt den festgelegten Prozentsatz erreicht

  • Verzögerungsanteil: Höchster Gewinnanteil bei Steigerung der Steigerung der Steigerung der Steigerung

Einmal aktiviert, folgt der Trailing-Stop dem höchsten Gewinnniveau. Wenn der Preis sich zurückzieht, bewegt sich der Stop-Level niedriger. Wenn der Rückzug den Trail-Prozentsatz übersteigt, wird der Stop ausgelöst und alle Positionen geschlossen.

Vorteile

  • Momentum ADX bestimmt die Trendrichtung und vermeidet falsche Ausbrüche

  • RSI-Bestätigung sorgt dafür, dass Umkehrmöglichkeiten nicht verpasst werden

  • Ein verstellbarer Trailing Stop sichert Gewinn und minimiert Verluste

  • Einfache und klare Strategie-Logik, leicht verständlich

  • Anwendbar auf verschiedene Märkte und Zeitrahmen

Risiken und Minderungsmaßnahmen

  • ADX kann einen falschen Ausbruch signalisieren

    • Tune ADX-Parameter, um wahre Trendbewegungen zu erkennen
  • RSI kann mehrere falsche Signale geben

    • Anpassung der überkauften/überverkauften Niveaus zur Verringerung der Whipsaws
  • Schlechte Rückhaltparameter

    • Optimieren Sie die Parameter, um die besten Stoppniveaus zu finden
  • Lücken können zu verpassten Haltestellen führen

    • Erwägen Sie die Verwendung von Stop-Limit-Orders

Optimierungsmöglichkeiten

  • Prüfung von ADX/RSI-Kombinationen zur Optimierung von Einträgen

  • Backtest verschiedener Aktivierungsstufen und Spuranteile

  • Hinzufügen von zusätzlichen Filtern zur Verbesserung der Signalqualität

  • Test auf verschiedenen Märkten, um zuverlässige Parameter zu finden

Schlussfolgerung

Diese Strategie integriert Momentum-Analyse, RSI und Trailing Stops, um effektiv die Trendrichtung, Spot-Umkehrungen und Risikokontrolle zu bestimmen. Die einfache Logik macht es einfach, auf Aktien-, Devisen-, Krypto- und anderen Trendmärkten umzusetzen. Weitere Verbesserungen können durch Parameteroptimierung und das Hinzufügen von Filtern erzielt werden.


/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-03 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Trailing Stop with RSI", overlay=true)

length = input.int(12, "Momentum Length")
price = close
momentum(seria, length) =>
    mom = seria - seria[length]
    mom
mom0 = momentum(price, length)
mom1 = momentum(mom0, 1)

rsiLength = input.int(14, "RSI Length")
rsiOverbought = input(70, "RSI Overbought Level")
rsiOversold = input(30, "RSI Oversold Level")

rsiValue = ta.rsi(close, rsiLength)

tsact = input.float(0.0, "Trailing Stop Activation (%)", group="strategy", tooltip="Activates the Trailing Stop once this PnL is reached.") / 100
tsact := tsact ? tsact : na
ts = input.float(0.0, "Position Trailing Stop (%)", group="strategy", tooltip="Trails your position with a stop loss at this distance from the highest PnL") / 100
ts := ts ? ts : na

in_long = strategy.position_size > 0
in_short = strategy.position_size < 0

var ts_ = array.new_float()
ts_size = array.size(ts_)
ts_get = ts_size > 0 ? array.get(ts_, ts_size - 1) : 0

if in_long
    if tsact and high > strategy.position_avg_price + strategy.position_avg_price * tsact
        if ts_size > 0 and ts_get < high
            array.push(ts_, high)
        if ts_size < 1
            array.push(ts_, high)
    if not tsact
        if ts_size > 0 and ts_get < high
            array.push(ts_, high)
        if ts_size < 1
            array.push(ts_, high)
if in_short
    if tsact and low < strategy.position_avg_price - strategy.position_avg_price * tsact
        if ts_size > 0 and ts_get > low
            array.push(ts_, low)
        if ts_size < 1
            array.push(ts_, low)
    if not tsact
        if ts_size > 0 and ts_get > low
            array.push(ts_, low)
        if ts_size < 1
            array.push(ts_, low)

trail = in_long and ts_size > 0 ? low < ts_get - ts_get * ts : in_short and ts_size > 0 ? high > ts_get + ts_get * ts : na

if (mom0 > 0 and mom1 > 0)
    strategy.entry("MomLE", strategy.long, stop=high+syminfo.mintick, comment="MomLE")
else
    strategy.cancel("MomLE")
if (mom0 < 0 and mom1 < 0)
    strategy.entry("MomSE", strategy.short, stop=low-syminfo.mintick, comment="MomSE")
else
    strategy.cancel("MomSE")

tsClose = in_long ? ts_get - ts_get * ts : in_short ? ts_get + ts_get * ts : na
if trail
    strategy.close_all()
if not strategy.opentrades
    array.clear(ts_)

rsiOverboughtCondition = rsiValue >= rsiOverbought
rsiOversoldCondition = rsiValue <= rsiOversold

if rsiOverboughtCondition
    strategy.close("SHORT", "SX")
    strategy.entry("LONG", strategy.long)

if rsiOversoldCondition
    strategy.close("LONG", "LX")
    strategy.entry("SHORT", strategy.short)

plotchar(ts_get, "GET", "")
plot(strategy.position_avg_price > 0 ? strategy.position_avg_price : na, "Average", color.rgb(251, 139, 64), 2, plot.style_cross)
plot(tsClose > 0 ? tsClose : na, "Trailing", color.rgb(251, 64, 64), 2, plot.style_cross)
plot(strategy.position_avg_price - strategy.position_avg_price * tsact > 0 ? strategy.position_avg_price - strategy.position_avg_price * tsact : na, "TS Activation", color.fuchsia, 2, plot.style_cross)


Mehr