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.
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.
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)