Umkehrhandelsstrategie basierend auf dem RSI-Indikator


Erstellungsdatum: 2024-01-30 17:06:45 zuletzt geändert: 2024-01-30 17:06:45
Kopie: 0 Klicks: 642
1
konzentrieren Sie sich auf
1617
Anhänger

Umkehrhandelsstrategie basierend auf dem RSI-Indikator

Überblick

Diese Strategie verwendet den RSI-Indikator, um die Marktlage zu identifizieren, in der die Aktien überkauft und überverkauft werden. Die Strategie gehört zu den reversiblen Handelsstrategien, die auf Indikatoren basieren. Die Strategie kombiniert Trend-Tracking-Stopps und feste Stop-Stopps, um das Handelsrisiko effektiv zu kontrollieren.

Strategieprinzip

Das Handelssignal für diese Strategie basiert auf dem Gold- und Quadratindex des RSI. Der RSI-Indikator verwendet in der Regel 30 als Überverkaufslinien und 70 als Überkaufslinien. Wenn der RSI die Überverkaufslinien überschreitet, wird ein Kaufsignal erzeugt.

Nach dem Eintritt verwendet die Strategie eine Prozentsatz-Stop-Tracking-Methode, indem sie den Höchst- oder Tiefstpreis kontinuierlich aktualisiert und einen bestimmten Prozentsatz als Stop-Loss-Stand verlässt. Gleichzeitig wird eine feste Stop-Loss-Distanz verwendet, die beim Erreichen des Zielgewinns oder des Maximalverlusts gestoppt wird. Diese Kombination kann das Handelsrisiko gut kontrollieren.

Analyse der Stärken

Diese Strategie hat folgende Vorteile:

  1. Der RSI-Indikator ist ein erfahrener Handelstechnik, um überkaufte und überverkaufte Bereiche zu ermitteln und die Marktauswüchse präziser zu erfassen.

  2. Die Goldfork-Dead-Fork-Methode filtert die Signalgeräusche und macht den Handel zuverlässiger.

  3. In Kombination mit Trend-Tracking-Stopps können Sie maximale Gewinne sperren, aber auch schnelle Stopps und geringere Einzelschäden.

  4. Ein fester Stop-Loss-Abstand kann auch das Risiko eines einzelnen Handels effektiv kontrollieren.

  5. Insgesamt ist die Strategie klar, leicht zu verstehen und umzusetzen und für Anfänger geeignet.

Risikoanalyse

Die Strategie birgt auch folgende Risiken:

  1. RSI-Indikatoren sind anfällig für Fehlsignale und haben eine hohe Wahrscheinlichkeit, dass die technische Form zerbricht, was dazu führen kann, dass ein Stop-Loss ausgelöst wird.

  2. Die Stop-Loss-Distanz ist fest, kann nicht an die Marktschwankungen angepasst werden und kann zu einem vorzeitigen Stopp oder einem erweiterten Stop-Loss führen.

  3. Der Prozentsatz der Stop-Loss-Verfolgung, der nur die höchsten oder niedrigsten Preise verfolgt, kann zu radikal sein und zu wenig Gewinn bringen.

  4. Die Parameter dieser Strategie können für historische Daten optimiert werden, die in der Praxis schlechter funktionieren können.

  5. Es ist möglich, dass die Häufigkeit der Transaktionen zu hoch ist, was die Transaktionsgebühren erhöht und das Risiko einer Ausrutschung erhöht.

Optimierungsrichtung

Die Strategie kann in folgenden Richtungen optimiert werden:

  1. Optimierung der RSI-Parameter, Suche nach der optimalen Kombination der Indikatorparameter und Verbesserung der Signalqualität.

  2. Zusätzliche Filter für andere Indikatoren bilden eine Resonanz mit mehreren Indikatoren und erhöhen die Signalgenauigkeit.

  3. Die Anpassung der Stop-Loss-Regelung an die Marktschwankungen.

  4. Erhöhung der Handelsfrequenz-Kontrollmodule, Reduzierung der Anzahl der Transaktionen und Reduzierung der Handelsgebühren.

  5. Die Erweiterung der Module für die Vermögensverwaltung, die Kontrolle über die Größe der einzelnen Transaktionen und die Verringerung der einzelnen Verluste.

  6. Die Rückmessungen werden über längere Zeiträume durchgeführt, um die Parameterstabilität zu überprüfen.

Zusammenfassen

Die Strategie als Ganzes ist eine typische Reverse-Trading-Strategie, die über den RSI-Indikator überkaufte und überverkaufte Bereiche ermittelt, um Handelssignale zu erzeugen. Die Strategie ist klar, einfach zu implementieren und eignet sich für das Lernen und die Praxis von Quantifizierungshändlern.

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"}]
*/

// LOVE JOY PEACE PATIENCE KINDNESS GOODNESS FAITHFULNESS GENTLENESS SELF-CONTROL 
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// Author: © JoshuaMcGowan
// Taken from https://www.tradingview.com/script/GbZGYi6l-Adding-some-essential-components-to-a-prebuilt-RSI-strategy/
// Just updated to compile in version 4. 

//@version=4

strategy("Adding some essential components to a prebuilt RSI strategy", overlay=true)

/////////////// Component Code Start ///////////////

testStartYear = input(2011, "Backtest Start Year") 
testStartMonth = input(8, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2100, "Backtest Stop Year")
testStopMonth = input(9, "Backtest Stop Month")
testStopDay = input(29, "Backtest Stop Day")
// testStopDay = testStartDay + 1
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=input.bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
    
/////////////// Component Code Stop ///////////////

// Replace RSI Component, Long/Short, and Long Signal/Short Signal conditions with your trade setup components.
///////////// RSI component /////////////

length = input( 14 )
overSold = input( 30 )
overBought = input( 70 )
price = close

vrsi = rsi(price, length)
notna = not na(vrsi)

/////////////// STRATEGY ///////////////

ts = input(99999, "Trailing Stop") / 100
tp = input(99999, "Take Profit") / 100
sl = input(99999, "Stop Loss") / 100

// Update this with your setup. 
long = notna and crossover(vrsi, overSold)
short = notna and crossunder(vrsi, overBought)

last_long = 0
last_short = 0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

// Update this to reflect your setup. 
long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

float last_open_long_signal = 0
float last_open_short_signal = 0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0
last_short_signal = 0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

float last_high = 0
float last_low = 0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

long_ts = not na(last_high) and high <= (last_high - ts) //and high >= last_open_long_signal
short_ts = not na(last_low) and low >= (last_low + ts) //and low <= last_open_short_signal

long_tp = high >= (last_open_long_signal + tp)
short_tp = low <= (last_open_short_signal - tp)

long_sl = low <= (last_open_long_signal - sl)
short_sl = high >= (last_open_short_signal + sl)

leverage = input(200, "Leverage")
long_call = last_open_long_signal - (0.8 + 0.2 * (1/leverage)) / leverage * last_open_long_signal
short_call = last_open_short_signal + (0.78 + 0.2 * (1/leverage)) / leverage * last_open_short_signal
long_call_signal = low <= long_call
short_call_signal = high >= short_call

if testPeriod()
    strategy.entry("Long", strategy.long, when=long_signal)
    strategy.entry("Short", strategy.short, when=short_signal)

    // plot(long_call, color=color.red)
    // plot(short_call, color=color.green)
    strategy.close("Long", when=long_call_signal)
    strategy.close("Short", when=short_call_signal)
    strategy.close("Long", when=long_tp)
    strategy.close("Short", when=short_tp)
    strategy.close("Long", when=long_sl)
    strategy.close("Short", when=short_sl)
    strategy.close("Long", when=long_ts)
    strategy.close("Short", when=short_ts)