Langfristige Trendfolgestrategie basierend auf dem RSI-Indikator


Erstellungsdatum: 2023-12-25 14:32:19 zuletzt geändert: 2023-12-25 14:32:19
Kopie: 1 Klicks: 633
1
konzentrieren Sie sich auf
1623
Anhänger

Langfristige Trendfolgestrategie basierend auf dem RSI-Indikator

Überblick

Die Strategie basiert auf der Entwicklung von relativ starken (RSI) Indikatoren, die eine mehrstufige Trendverfolgung für RSI-Low-Buy- und High-Stop-Loss-Stopp-Trading-Strategien erzeugen. Die Strategie erzeugt ein Kaufsignal, wenn der RSI-Indikator unter der Überkauflinie liegt, und ein Verkaufsignal, wenn der RSI-Indikator über die Überverkauflinie liegt. Die Strategie optimiert die Performance der Trendverfolgung und kann das Handelsrisiko effektiv steuern.

Strategieprinzip

Die Strategie nutzt den RSI, um zu bestimmen, ob die Aktienpreise über- oder unterbewertet sind. Der RSI kombiniert die Überkauf- und Überverkaufslinien zu einem Kauf- und Verkaufssignal. Insbesondere erzeugt der RSI ein Kaufsignal, wenn er die Überverkaufslinien von 20 überschreitet; und ein Verkaufssignal, wenn er die Überkaufslinien von 80 überschreitet.

Nach dem Eintritt in eine Mehrpositionsposition setzt die Strategie eine anfängliche Stop-Line ein, um das Abwärtsrisiko zu kontrollieren. Gleichzeitig werden zwei Stop-Lines mit unterschiedlichen Anteilen eingerichtet, die Stop-Lines in Gruppen aufteilen, um die Gewinne zu sperren.

Die Strategie nutzt die RSI-Indikatoren, um den Zeitpunkt des Markteintritts zu bestimmen. Die Stop-Loss-Einstellungen sind vernünftig und können das Risiko effektiv kontrollieren.

Strategische Vorteile

  • Der RSI zeigt, dass man zu viel macht, um nicht zu viel zu tun.
  • Die RSI-Parameter wurden optimiert, damit der Indikator besser funktioniert
  • Doppelstopper sind vernünftig ausgelegt, um mehr Profit zu erzielen
  • Erste und fortgesetzte Stop-Loss-Systeme zur Verhinderung großer Verluste

Risikoanalyse

  • Die Strategie der “Mehrköpfigen” wirkt in einem “Bull Market”, der nicht nachhaltig profitabel ist, schlecht.
  • Die RSI-Indikator gibt die Wahrscheinlichkeit, dass ein falsches Signal ausgegeben wird, und ein falsches Signal kann den Verlust erhöhen
  • Das Risiko, dass ein Stop-Loss zu tief ist, führt zu unhaltbaren Verlusten.
  • Das Fehlen von Beschränkungen für die Anzahl und den Umfang der Einlagen könnte zu Verlusten führen.

Optimierungsrichtung

  • In Kombination mit anderen Indikatoren filtern Sie die RSI-Signale, um die Signalgenauigkeit zu erhöhen
  • Hinzufügen von Einschränkungen für die Anzahl und den Anteil der Einlagen
  • Testen der Wirkung verschiedener RSI-Parameter
  • Optimierung der Stop-Loss-Stopp-Punkte und Risikominderung

Zusammenfassen

Die Strategie nutzt die RSI-Anzeige, um die Entwicklung zu beurteilen. Die Stop-Loss-Einstellungen sind vernünftig. Die Strategie kann die Trendentwicklung effektiv beurteilen, das Handelsrisiko kontrollieren und ist geeignet für die Verwendung als mehrköpfige Tracking-Strategie. Die Stabilität der Strategie kann durch Signalfilterung, Parameterprüfung und Stop-Loss-Optimierung weiter verbessert werden.

Strategiequellcode
/*backtest
start: 2023-12-17 00:00:00
end: 2023-12-24 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

//@version=5

strategy(title='RSI Long Strategy', overlay=true, pyramiding=5, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.075)
strat_dir_input = input.string(title='Strategy Direction', defval='long', options=['long', 'short', 'all'])
strat_dir_value = strat_dir_input == 'long' ? strategy.direction.long : strat_dir_input == 'short' ? strategy.direction.short : strategy.direction.all
strategy.risk.allow_entry_in(strat_dir_value)
//INPUTS


length = input(21)
overSold = input(20)
overBought = input(80)
p = close

vrsi = ta.rsi(p, length)
price = close
var bool long = na
var bool short = na

long := ta.crossover(vrsi, overSold)
short := ta.crossunder(vrsi, overBought)

var float last_open_long = na
var float last_open_short = na

last_open_long := long ? close : nz(last_open_long[1])
last_open_short := short ? close : nz(last_open_short[1])
mpoint=(last_open_long+last_open_short)/2

entry_value = last_open_long
entry_value1 = last_open_short

// Rounding levels to min tick
nround(x) =>
    n = math.round(x / syminfo.mintick) * syminfo.mintick
    n
//
disp_panels = input(true, title='Display info panels?')
fibs_label_off = input(40, title='fibs label offset')
fibs_label_size = input.string(size.normal, options=[size.tiny, size.small, size.normal, size.large, size.huge], title='fibs label size')
r1_x = timenow + math.round(ta.change(time) * fibs_label_off)
r1_y = last_open_short
text1 = 'High : ' + str.tostring(nround(last_open_short))
s1_y = last_open_long
text3 = 'low : ' + str.tostring(nround(last_open_long))

R1_label = disp_panels ? label.new(x=r1_x, y=r1_y, text=text1, xloc=xloc.bar_time, yloc=yloc.price, color=color.orange, style=label.style_label_down, textcolor=color.black, size=fibs_label_size) : na
S1_label = disp_panels ? label.new(x=r1_x, y=s1_y, text=text3, xloc=xloc.bar_time, yloc=yloc.price, color=color.lime, style=label.style_label_up, textcolor=color.black, size=fibs_label_size) : na

label.delete(R1_label[1])
label.delete(S1_label[1])
//
plot(mpoint, title='avreage', color=color.new(color.red, 40), style=plot.style_linebr, linewidth=3, trackprice=true, offset=-9999)
plot(last_open_short, title='high', color=color.new(color.red, 40), style=plot.style_linebr, linewidth=3, trackprice=true, offset=-9999)
plot(last_open_long, title='low', color=color.new(color.blue, 40), style=plot.style_linebr, linewidth=3, trackprice=true, offset=-9999)
//
trend = input(false)
if barstate.islast and trend == true
    line z = line.new(bar_index[1], last_open_short[1], bar_index, last_open_short, extend=extend.both, color=color.red, style=line.style_dashed, width=1)
    line f = line.new(bar_index[1], mpoint[1], bar_index, mpoint, extend=extend.both, color=color.blue, style=line.style_dashed, width=1)
    line w = line.new(bar_index[1], last_open_long[1], bar_index, last_open_long, extend=extend.both, color=color.green, style=line.style_dashed, width=1)
    line.delete(z[1])
    line.delete(f[1])
    line.delete(w[1])
    
//bu = ta.crossover(close, mpoint)
//sz = ta.crossunder(close, mpoint)
//bu1 = ta.crossover(close, last_open_short)
sz1 = ta.crossunder(close, last_open_short)
bu2 = ta.crossover(close, last_open_long)
//sz2 = ta.crossunder(close, last_open_long)
//plotshape(sz, style=shape.triangledown, location=location.abovebar, color=color.new(color.orange, 0), size=size.tiny)
//plotshape(bu, style=shape.triangleup, location=location.belowbar, color=color.new(color.blue, 0), size=size.tiny)
//plotshape(sz1, style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), size=size.tiny)
//plotshape(bu1, style=shape.triangleup, location=location.belowbar, color=color.new(color.green, 0), size=size.tiny)
//plotshape(sz2, style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), size=size.tiny)
//plotshape(bu2, style=shape.triangleup, location=location.belowbar, color=color.new(color.green, 0), size=size.tiny)

l = bu2
s = sz1 
if l
    strategy.entry('buy', strategy.long)
if s
    strategy.entry('sell', strategy.short)
per(pcnt) =>
    strategy.position_size != 0 ? math.round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)
stoploss = input.float(title=' stop loss', defval=5, minval=0.01)
los = per(stoploss)
q1 = input.int(title=' qty_percent1', defval=50, minval=1)
q2 = input.int(title=' qty_percent2', defval=50, minval=1)
tp1 = input.float(title=' Take profit1', defval=3, minval=0.01)
tp2 = input.float(title=' Take profit2', defval=5, minval=0.01)
//tp4 = input.float(title=' Take profit4', defval=5, minval=0.01)
strategy.exit('x1', qty_percent=q1, profit=per(tp1), loss=los)
strategy.exit('x2', qty_percent=q2, profit=per(tp2), loss=los)