RSI-basierter Aufwärtstrend nach Strategie

Schriftsteller:ChaoZhang, Datum: 2023-12-25 14:32:19
Tags:

img

Übersicht

Diese Strategie basiert auf dem Relative Strength Index (RSI) Indikator für den Kauf an RSI-Tiefpunkten und Gewinn und Stop-Loss an RSI-Hochpunkten. Es erzeugt Kaufsignale, wenn der RSI unter die Überverkaufslinie fällt und Verkaufssignale, wenn der RSI über die Überkauflinie steigt. Die Strategie ist optimiert, um Trends mit effektiver Risikokontrolle zu verfolgen.

Strategie Logik

Die Strategie verwendet den RSI-Indikator, um festzustellen, ob eine Aktie überbewertet oder unterbewertet ist. RSI kombiniert mit überkauften und überverkauften Linien bildet Kauf- und Verkaufssignale. Insbesondere, wenn der RSI über die 20 Überverkaufslinie überschreitet, wird ein Kaufsignal generiert; wenn der RSI unter die 80 Überkaufslinie überschreitet, wird ein Verkaufssignal generiert.

Nach dem Eintritt in eine Long-Position setzt die Strategie einen anfänglichen Stop-Loss, um das Abwärtsrisiko zu kontrollieren. Zur gleichen Zeit werden zwei Take-Profit-Linien mit unterschiedlichen Verhältnissen eingestellt, um Gewinne in Chargen zu erzielen und Gewinne zu erzielen. Konkret wird 50% der Position zuerst mit 3% über dem Einstiegspreis profitieren; dann werden die restlichen 50%-Positionen mit 5% über dem Einstiegspreis profitieren.

Die Strategie nutzt effektiv den RSI-Indikator, um den Einstiegszeitpunkt zu bestimmen.

Vorteile

  • Verwenden Sie den RSI-Indikator, um Long/Short-Positionen zu bestimmen und blind zu handeln
  • Optimierte RSI-Parameter für bessere Indikatoreffekte
  • Ein vernünftiges Dual-Take-Profit-Design ermöglicht es, Gewinne in Chargen zu gewinnen, um mehr Gewinne zu erzielen
  • Erste Stop-Loss und nachfolgende Stop-Loss verhindern große Verluste

Risiken

  • Schlechte Performance in einem Bullenmarkt, der keine Gewinne aufrecht erhalten kann
  • Es besteht die Wahrscheinlichkeit von falschen Signalen des RSI und diese können die Verluste durch fehlerhafte Signalbeurteilung erhöhen
  • Risiko, dass Stops nicht ausgelöst werden können, wenn Stop-Loss-Punkte zu tief gesetzt werden
  • Risikopositionen, die nicht in die Kategorie der Risikopositionen der Risikopositionen der Risikopositionen der Risikopositionen der Risikopositionen der Risikopositionen der Risikopositionen der Risikopositionen der Risikopositionen der Risikopositionen der Risikopositionen der Risikopositionen der Risikopositionen

Verbesserungen

  • Hinzufügen anderer Indikatoren, um RSI-Signale zu filtern und die Genauigkeit zu verbessern
  • Festlegung von Grenzwerten für Pyramidenzeiten und -verhältnisse
  • Prüfwirkung verschiedener RSI-Parameter
  • Optimieren Sie den Stop-Loss und nutzen Sie Gewinnpunkte, um Risiken zu senken

Zusammenfassung

Die Strategie nutzt RSI, um die Marktlage zu beurteilen und hat eine angemessene Stop-Loss- und Take-Profit-Konfiguration. Sie kann den Markttrend effektiv bestimmen und Handelsrisiken kontrollieren, geeignet als bullischer Trend nach der Strategie. Signalfilterung, Parameterprüfung, Stop-Loss-Optimierung usw. können die Stabilität der Strategie weiter verbessern.


/*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)



Mehr