Trendverfolgungs-RSI-Strategie für gleitenden Durchschnitt

Schriftsteller:ChaoZhang, Datum: 2023-11-23 17:13:06
Tags:

img

Übersicht

Die Trend Tracking Moving Average RSI Strategie ist eine automatisierte Aktienhandelsstrategie, die sowohl Trendanalyse als auch überkaufte Überverkaufsindizes verwendet.

Strategie Logik

Die Strategie besteht aus drei Hauptteilen:

  1. Trendbeurteilung: Berechnet den langfristigen Trend mit 200-tägigem einfachen gleitendem Durchschnitt und den kurzfristigen Trend mit 30-tägigen und 50-tägigen einfachen gleitenden Durchschnitten.

  2. Überkauft-Überverkauft-Analyse: Berechnet den 14-tägigen RSI-Indikator. RSI über 80 ist die Überkauftzone und unter 20 ist die Überverkauftzone. Handelssignale werden erzeugt, wenn der RSI-Indikator aus der Überkauftzone fällt oder aus der Überverkauftzone steigt.

  3. Eintritt und Ausstieg: Wenn überkaufte oder überverkaufte Signale identifiziert werden, werden, wenn die Richtung mit der Trendanalyse übereinstimmt, Long/Short-Positionen eröffnet.

Mit dieser Strategie ist es möglich, rechtzeitig auf den Markt zu gelangen, wenn sich die Preise umkehren, während einige laute Trades durch die Einbeziehung einer Trendanalyse mit relativ ausgezeichneter Abzugskontrolle herausgefiltert werden.

Analyse der Vorteile

Die Strategie weist folgende Vorteile auf:

  1. Kombination von Trendanalyse und Überkauf-Überverkauf-Indikatoren, um Lärm zu filtern und Wendepunkte auf dem Markt zu identifizieren.
  2. Berücksichtigung von Trends in langfristigen und kurzfristigen Zeitrahmen für genauere Beurteilungen.
  3. Verwendung gleitender Durchschnitte als Stop-Loss-Methode, damit Stop-Loss-Punkte auf der Grundlage der Marktvolatilität festgelegt werden können.
  4. Strenge Eintrittsbedingungen helfen, falsche Ausbrüche effektiv zu vermeiden.

Risiken und Lösungen

Diese Strategie birgt auch einige Risiken:

  1. Bei einem langen Zeitraum, in dem der Markt in einem Bereich bleibt, kann es zu häufigen unbedeutenden Trades kommen.
  2. Es besteht ein gewisses Zeitverzögerungsrisiko, das durch die Verkürzung der gleitenden Durchschnittszyklusparameter gemildert werden kann.
  3. RSI-Signale können von Aktien und Märkten beeinflusst werden. Mehr Faktoren wie Kerzenmuster sollten kombiniert werden, um die Wirksamkeit zu beurteilen.

Optimierungsrichtlinien

Die Strategie kann in folgenden Bereichen weiter optimiert werden:

  1. Mehr Filter wie Lautstärke, Kerzenmuster hinzufügen, um die Signalqualität weiter zu verbessern.
  2. Optimierung der gleitenden Durchschnitts- und RSI-Zyklusparameter, um unterschiedlichen Aktienmerkmalen gerecht zu werden.
  3. Erstellung dynamischer gleitender Durchschnitte zur automatischen Anpassung von Parametern basierend auf Marktvolatilität und Risikobereitschaft.
  4. Mit fortschrittlicheren Techniken wie maschinellem Lernen, um Markttrends mit höherer Genauigkeit zu bestimmen.

Zusammenfassung

Im Allgemeinen ist die Trend Tracking Moving Average RSI Strategie eine sehr praktische Strategieidee, die Marktlärm bis zu einem gewissen Grad durch die Kombination von Trendanalyse und überkauft-überverkauft-Indikatoren herausfiltert und Handelssignale genauer und gültiger macht.


/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mattehalen

// INPUT per TIMEFRAME
// 5min     = Legnth = 9, Source = ohlc4,MaxLoss = 1000 TrendMA = 200, ShortMA = 4, LongMA = 10
// 30min    = Legnth = 7, Source = ohlc4,MaxLoss = 1000 TrendMA = 200, ShortMA = 10, LongMA = 20

strategy("Mathias & Christer Timeframe RSI", shorttitle="M&C_RSI",overlay=true, process_orders_on_close = true, default_qty_type =  strategy.percent_of_equity, default_qty_value = 100)
len = input(9, title="Length", type=input.integer)
src = input(ohlc4, title="Source", type=input.source)
//show4h = input(true, title="show 4h", type=input.bool)
maxLoss = input(3000)

rsiCurrent = rsi(src, len)
//rsi4h = security(syminfo.ticker, "240", rsi(src, len))
rsi4h   = rsi(src, len)

//--------------------------------------------------
//MA
trendMAInput = input(200, title="trendMA", type=input.integer)
shortMAInput = input(30, title="shortMA", type=input.integer)
longMAInput = input(50, title="longMA", type=input.integer)

trendMA = ema(close,trendMAInput)
shortMA = ema(close,shortMAInput)
longMA  = ema(close,longMAInput)
plot(trendMA, color=color.black, linewidth=5)
plot(shortMA, color=color.red, linewidth=2)
plot(longMA, color=color.green, linewidth=2)
bgcolor(crossunder(shortMA,longMA) ? color.black : na, transp=10)

//--------------------------------------------------
//RSI
BuySignalBarssince = barssince(rsi4h[1]<rsi4h[0] and rsi4h[1]<20)
BuySignal       = (rsi4h[1]<rsi4h[0] and rsi4h[1]<20 and BuySignalBarssince[1]>10)
BuySignalOut   = crossunder(longMA[1],shortMA[1])
bgcolor(BuySignal ? color.green : na, transp=70)
bgcolor(BuySignalOut ? color.green : na, transp=10)



SellSignalBarssince = barssince(rsi4h[1]>rsi4h[0] and rsi4h[1]>80)
SellSignal      = (rsi4h[1]>rsi4h[0] and rsi4h[1]>80 and SellSignalBarssince[1]>10)
SellSignalOut   = crossunder(shortMA[1],longMA[1])
bgcolor(SellSignal ? color.red : na, transp=70)
bgcolor(SellSignalOut ? color.red : na, transp=10)


if BuySignal
    strategy.close("short", comment = "Exit short")
    strategy.entry("long", true)
    strategy.exit("Max Loss", "long", loss = maxLoss)

if BuySignalOut
    strategy.close("long", comment = "Exit Long")
if SellSignal
    // Enter trade and issue exit order on max loss.
    strategy.close("long", comment = "Exit Long")
    strategy.entry("short", false)
    strategy.exit("Max Loss", "short", loss = maxLoss)
if SellSignalOut
    // Force trade exit.
    strategy.close("short", comment = "Exit short")
    
//--------------------------------------------------
//ATR
MyAtr = atr(10)
AtrFactor = 10
mySLBuy  = close[BuySignalBarssince]
mySLSell = close[SellSignalBarssince]

plotchar(BuySignal, "BuySignal", "⬆", location.belowbar, color.lime,size =size.huge )
plotchar(BuySignalOut, "BuySignalOut", "█", location.belowbar, color.lime,size =size.small)
plotchar(SellSignal, "SellSignal", "⬇", location.abovebar ,color.red,size =size.huge)
plotchar(SellSignalOut, "SellSignalOut", "█", location.abovebar, color.red,size =size.small)




Mehr