
Die RSI-Trendwende-Strategie ist eine quantitative Handelsstrategie, die auf einem relativ schwachen Index (RSI) und einer durchschnittlichen realen Breite (ATR) basiert. Die Strategie passt sich an schnelle Marktbewegungen an, indem sie die Stop Loss (TP/SL) dynamisch anpasst, um eine Trendwende-Gelegenheit zu erfassen.
Der Kern der RSI-Trend-Umkehr-Strategie besteht in der Konstruktion von dynamischen Stop-Loss-Bändern. Zuerst werden die höchsten und niedrigsten Preise seit der letzten Kreuzung mit Hilfe der benutzerdefinierten Funktionen “highest_custom” und “lowest_custom” gefunden, um die Basis für die Bandbreite zu bilden. Dann werden der RSI und der ATR für die Länge berechnet, die wie folgt berechnet werden:
Der Multiplikator erweitert den Faktor für die Benutzerdefinierte Bandbreite. Wenn der Preis nach oben überschreitet, wird mehr getan, wenn der Preis nach unten überschreitet, wird nichts getan. Die Farbe der beiden Bänder ändert sich auch entsprechend der Position des Preises in Bezug auf die Bandbreite, um zu beobachten.
Die RSI-Trendwende-Strategie nutzt die RSI und die ATR, um eine Anpassungsbandbreite zu erstellen, die die Stop-Loss-Punkte dynamisch anpasst und zeitnah auf Marktveränderungen reagiert. Die Strategie hat eine klare Logik und eine breite Palette von Anwendungsbereichen und kann als ein leistungsfähiges Werkzeug für quantitative Händler dienen. In der Praxis ist jedoch die Auswahl der Parameter und die Risikokontrolle zu beachten und es wird empfohlen, sie in Kombination mit anderen Indikatoren zu verwenden, um die Gesamtleistung zu verbessern.
/*backtest
start: 2023-04-22 00:00:00
end: 2024-04-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("RSI Trend Reversal", overlay=true, max_bars_back = 4999, calc_on_every_tick = false)
//INPUTS
rsi_length = input.int(title = "Lenght", defval = 8)
rsi_mult = input.float(title = "Multiplier", defval = 1.5, step = .05)
lookback = input.int(title = "Delay to prevent idealization", defval = 1)
sltp = input.float(title = "Minimum Difference", defval = 10)
src = input.source(title = "Source Input", defval = close)
//PARAMETERS INITILIZATION
hclose = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, src)
//FUNCTION INITILIZATION
highest_custom(src, length) =>
x = src
for i = 0 to length
if src[i] > x
x := src[i]
x
lowest_custom(src, length) =>
x = src
for i = 0 to length
if src[i] < x
x := src[i]
x
rsilev(src, length, mult, sltp) =>
sl = (100 - sltp) / 100
tp = (100 + sltp) / 100
var bool crossup = na
var bool crossdown = na
var float dir = na
dir_change = ta.change(dir)
var float BearGuy = 0
BullGuy = ta.barssince(crossup or crossdown)
if na(BullGuy)
BearGuy += 1
else
BearGuy := BullGuy
var float upper = na
var float lower = na
rsilower = ta.rsi(src, length)
rsiupper = math.abs(ta.rsi(src, length) - 100)
atr = ta.atr(length) / src
lower := highest_custom(math.max(highest_custom(highest_custom(src, BearGuy) * (1 - (atr + ((1 / (rsilower) * mult)))), BearGuy), src * sl), BearGuy)
upper := lowest_custom(math.min(lowest_custom(lowest_custom(src, BearGuy) * (1 + (atr + ((1 / (rsiupper) * mult)))), BearGuy), src * tp), BearGuy)
var float thresh = na
if na(thresh)
thresh := lower
if na(dir)
dir := 1
if crossdown
dir := -1
if crossup
dir := 1
if dir == 1
thresh := lower
if dir == -1
thresh := upper
crossup := ta.crossover(src, thresh)
crossdown := ta.crossunder(src, thresh)
thresh
rsiclose = rsilev(hclose, rsi_length, rsi_mult, sltp)
//PLOTTING
var color col = color.lime
if hclose > rsiclose
col := color.lime
if hclose < rsiclose
col := color.red
plot(rsiclose, linewidth = 2, color = col)
//STRATEGY
buy = ta.crossover(hclose, rsiclose)
sell = ta.crossunder(hclose, rsiclose)
if buy[lookback]
strategy.entry("long", strategy.long)
if sell[lookback]
strategy.entry("Short", strategy.short)