Cette stratégie est conçue sur la base de l'indicateur d'indice de force relative (RSI) pour acheter sur les points bas du RSI et prendre un profit et un stop-loss sur les points hauts du RSI. Elle génère des signaux d'achat lorsque le RSI tombe en dessous de la ligne de survente et des signaux de vente lorsque le RSI monte au-dessus de la ligne de surachat.
La stratégie utilise l'indicateur RSI pour déterminer si un stock est surévalué ou sous-évalué.
Après avoir entré dans une position longue, la stratégie définit un stop loss initial pour contrôler le risque à la baisse. En même temps, deux lignes de prise de profit avec des ratios différents sont configurées pour prendre des profits par lots et verrouiller les profits. Plus précisément, 50% de la position prendra un profit d'abord à 3% au-dessus du prix d'entrée; puis la position de 50% restante prendra un profit à 5% au-dessus du prix d'entrée.
La stratégie utilise efficacement l'indicateur RSI pour déterminer le moment de l'entrée.
La stratégie utilise le RSI pour juger de l'état du marché et a une configuration raisonnable de stop loss et de prise de profit. Elle peut déterminer efficacement la tendance du marché et contrôler les risques de trading, adaptée à une tendance haussière suivant la stratégie.
/*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)