Trend Bullish Berasaskan RSI Mengikuti Strategi

Penulis:ChaoZhang, Tarikh: 2023-12-25 14:32:19
Tag:

img

Ringkasan

Strategi ini direka berdasarkan penunjuk Indeks Kekuatan Relatif (RSI) untuk membeli pada titik rendah RSI dan mengambil keuntungan dan berhenti kerugian pada titik tinggi RSI. Ia menghasilkan isyarat beli apabila RSI jatuh di bawah garis oversold dan isyarat jual apabila RSI naik di atas garis overbought. Strategi ini dioptimumkan untuk mengesan trend dengan kawalan risiko yang berkesan.

Logika Strategi

Strategi ini menggunakan penunjuk RSI untuk menentukan sama ada saham terlalu dinilai atau terlalu dinilai. RSI digabungkan dengan garis overbought dan oversold membentuk isyarat beli dan jual. Khususnya, jika RSI melintasi di atas garis oversold 20, isyarat beli dihasilkan; jika RSI melintasi di bawah garis overbought 80, isyarat jual dihasilkan.

Selepas memasuki kedudukan panjang, strategi menetapkan stop loss awal untuk mengawal risiko penurunan. Pada masa yang sama, dua baris mengambil keuntungan dengan nisbah yang berbeza ditetapkan untuk mengambil keuntungan dalam kumpulan dan mengunci keuntungan. Khususnya, 50% kedudukan akan mengambil keuntungan terlebih dahulu pada 3% di atas harga masuk; kemudian kedudukan 50% yang tersisa akan mengambil keuntungan pada 5% di atas harga masuk.

Strategi ini dengan berkesan menggunakan penunjuk RSI untuk menentukan masa masuk. tetapan stop loss dan mengambil keuntungan adalah munasabah untuk mengawal risiko dengan berkesan.

Kelebihan

  • Menggunakan penunjuk RSI untuk menentukan kedudukan panjang/pendek dan mengelakkan perdagangan secara buta
  • Parameter RSI yang dioptimumkan untuk kesan penunjuk yang lebih baik
  • Reka bentuk keuntungan mengambil dua yang munasabah membolehkan mengambil keuntungan dalam kumpulan untuk mengunci lebih banyak keuntungan
  • Stop loss awal dan trailing stop loss mengelakkan kerugian besar

Risiko

  • Prestasi yang lemah dalam pasaran lembu yang tidak dapat mengekalkan keuntungan
  • Kemungkinan isyarat yang salah dari RSI wujud dan boleh meningkatkan kerugian daripada penilaian isyarat yang tidak betul
  • Risiko bahawa stop tidak boleh dicetuskan jika titik stop loss ditetapkan terlalu tinggi
  • Risiko kerugian yang diperbesar tanpa had pada masa dan nisbah piramida

Peningkatan

  • Tambah penunjuk lain untuk menapis isyarat RSI dan meningkatkan ketepatan
  • Tetapkan had pada masa dan nisbah piramida
  • Kesan ujian parameter RSI yang berbeza
  • Mengoptimumkan stop loss dan mengambil mata keuntungan untuk mengurangkan risiko

Ringkasan

Strategi ini menggunakan RSI untuk menilai keadaan pasaran dan mempunyai konfigurasi stop loss dan mengambil keuntungan yang munasabah. Ia dapat menentukan trend pasaran dengan berkesan dan mengawal risiko perdagangan, sesuai sebagai trend bullish mengikuti strategi. penapisan isyarat, ujian parameter, pengoptimuman stop loss dan lain-lain dapat meningkatkan kestabilan strategi.


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



Lebih lanjut