Strategi Perdagangan Divergensi RSI

Penulis:ChaoZhang, Tarikh: 2023-10-25 16:47:14
Tag:

img

Ringkasan

Strategi perdagangan RSI Divergence menghasilkan isyarat beli dan jual dengan mengenal pasti perbezaan antara penunjuk RSI dan pergerakan harga. Strategi ini juga menggabungkan stop loss, mengambil keuntungan dan trailing stop loss untuk menguruskan risiko dengan berkesan.

Prinsip

Strategi ini terutamanya menggunakan perbezaan dalam penunjuk RSI untuk mengenal pasti peluang perdagangan. Secara khusus, strategi pertama mengira nilai RSI dalam tempoh tertentu, kemudian memetakan garis trend untuk kedua-dua penunjuk RSI dan harga. Apabila garis RSI menyimpang dari garis harga, iaitu RSI naik semasa harga jatuh, atau RSI jatuh semasa harga naik, strategi mengambilnya sebagai tanda pembalikan trend yang akan datang dan menghasilkan isyarat perdagangan.

Jika strategi mengesan garis RSI mendatar sementara garis harga mendaki, isyarat beli dihasilkan. Jika garis RSI mendaki sementara garis harga mendaki, isyarat jual dihasilkan. Setelah isyarat perdagangan berlaku, strategi boleh berdagang mengikut saiz nilai RSI.

Selain itu, strategi ini mempunyai ciri stop loss, mengambil keuntungan dan trailing stop loss. Stop loss mengawal risiko penurunan, mengambil kunci keuntungan dalam keuntungan, dan trailing stop membolehkan keuntungan berjalan. Tetapan ini berkesan menguruskan risiko untuk setiap perdagangan.

Kelebihan

Strategi perdagangan perbezaan RSI mempunyai kelebihan berikut:

  1. Mengesan perbezaan RSI boleh mengesan pembalikan trend pada peringkat awal.

  2. RSI digunakan secara meluas dan tersedia di kebanyakan platform perdagangan.

  3. Parameter RSI fleksibel dan boleh diselaraskan dengan keadaan pasaran yang berbeza.

  4. Pengendalian stop loss, mengambil keuntungan dan pengendalian stop loss dengan berkesan.

  5. Strategi ini mempunyai frekuensi isyarat yang sederhana, mengelakkan perdagangan berlebihan.

  6. Logiknya mudah dan mudah untuk diprogram untuk automasi.

Risiko

Strategi ini juga mempunyai beberapa risiko:

  1. Perbezaan RSI tidak boleh dipercayai sepenuhnya dan boleh menghasilkan isyarat palsu.

  2. Perbezaan mungkin gagal dalam pasaran yang kuat, yang harus dielakkan.

  3. Parameter RSI yang tidak betul boleh mempengaruhi prestasi. Tempoh yang terlalu pendek meningkatkan kekerapan dan risiko.

  4. Stop loss yang terlalu ketat mengurangkan keuntungan; terlalu longgar gagal untuk mengehadkan risiko.

  5. Trailing stop boleh berhenti sebelum masa semasa pasaran yang tidak menentu. Lebar trailing yang munasabah diperlukan memandangkan turun naik.

Risiko boleh dikurangkan dengan:

  1. Menambah penunjuk lain seperti MACD, Bollinger Bands untuk menapis isyarat dan mengurangkan isyarat palsu.

  2. Menggunakan strategi hanya semasa pasaran sampingan yang terhad, mengelakkan trend yang kuat.

  3. Mengoptimumkan parameter RSI, memilih tempoh optimum melihat kembali.

  4. Menetapkan tahap stop loss dan mengambil keuntungan yang munasabah berdasarkan ujian semula sejarah.

  5. Menyesuaikan jarak hentian berdasarkan turun naik pasaran dan selera risiko.

Pengoptimuman

Strategi ini boleh ditingkatkan dalam aspek berikut:

  1. Masukkan penunjuk lain untuk menapis isyarat dan meningkatkan kebolehpercayaan.

  2. Menggunakan pembelajaran mesin untuk mengoptimumkan parameter RSI secara automatik.

  3. Reka bentuk algoritma stop loss dinamik mengikut rejimen pasaran. Hentian yang lebih luas untuk julat, hentian yang lebih ketat untuk pasaran trend.

  4. Membina model saiz kedudukan dinamik berdasarkan turun naik untuk menyesuaikan saiz kedudukan.

  5. Memperkenalkan turun naik dalam hentian penghantaran untuk menetapkan jarak penghantaran berdasarkan turun naik harga.

  6. Mengerahkan strategi ke pasaran lain seperti forex dan mata wang kripto.

  7. Membangunkan sistem perdagangan kuantitatif untuk automasi.

Kesimpulan

Strategi perdagangan perbezaan RSI menjana isyarat dengan mengenal pasti perbezaan antara RSI dan harga. Logiknya mudah dan mudah untuk automatik. Stop loss, mengambil keuntungan dan trailing stop berkesan mengawal risiko. Walau bagaimanapun, strategi ini mempunyai batasan dalam ketepatan dan pasaran trend. Penambahbaikan boleh dibuat melalui pengoptimuman parameter, menambah penapis dan berhenti dinamik. Sebagai strategi teknikal, ia boleh berfungsi sebagai pelengkap semasa pasaran terhad julat apabila disistematik.


/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 4h
basePeriod: 15m
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/
// © faytterro

//@version=5
// strategy("RSI Divergence Strategy", overlay=true, scale = scale.none)
rsilen=input.int(14, title="rsi length")
rsisrc=input(close, title="source")
x=ta.rsi(rsisrc,rsilen)
len=input.int(14, title="RSI Divergence length", maxval=500)
tpb = input.float(25, title="take profit", group = "buy", step = 0.5)
sb = input.float(5, title="stop", group = "buy", step = 0.5)
tsb = input.float(0.25, title="trailing stop", group = "buy", step = 0.5)
tps = input.float(25, title="take profit", group = "sell", step = 0.5)
ss =input.float(5, title="stop", group = "sell", step = 0.5)
tss = input.float(0.25, title="trailing stop", group = "sell", step = 0.5)
src=close
extrapolation=0
zoom=input.int(0, title="zoom", maxval=27, minval=-27)
hline(300-zoom*10, color=color.rgb(54, 58, 69, 100))
hline(10, color=color.rgb(54, 58, 69, 100))
// for ax+b
xo=0.0
yo=0.0
xyo=0.0
xxo=0.0
for i=0 to len-1
    xo:= xo + i/(len)
    yo:= yo + x[len-1-i]/(len)
    xyo:= xyo + i*x[len-1-i]/(len)
    xxo:= xxo + i*i/(len)
dnm=ta.lowest(low,200)
dizi=array.new_float(len*2+1+extrapolation)
// linedizi=array.new_line()
a=(xo*yo-xyo)/(xo*xo-xxo)
b=yo-a*xo
for i=0 to len-1+extrapolation
    array.set(dizi,i,a*i+b)
//// for src
// for ax+b
xo2=0.0
yo2=0.0
xyo2=0.0
xxo2=0.0
for i=0 to len-1
    xo2:= xo2 + i/(len)
    yo2:= yo2 + src[len-1-i]/(len)
    xyo2:= xyo2 + i*src[len-1-i]/(len)
    xxo2:= xxo2 + i*i/(len)

dizi2=array.new_float(len*2+1+extrapolation)
// linedizi2=array.new_line()
a2=(xo2*yo2-xyo2)/(xo2*xo2-xxo2)
b2=yo2-a*xo2
for i=0 to len-1+extrapolation
    array.set(dizi2,i,a2*i+b2)
ttk=((array.get(dizi,0)<array.get(dizi,1)) and (array.get(dizi2,0)>array.get(dizi2,1)))? 1 : 
 ((array.get(dizi,0)>array.get(dizi,1)) and (array.get(dizi2,0)<array.get(dizi2,1)))? -1 : 0
cg=((array.get(dizi,0)<array.get(dizi,1)) and (array.get(dizi2,0)>array.get(dizi2,1)))// and ta.highest(ttk[1],len/2)<1)
cr=((array.get(dizi,0)>array.get(dizi,1)) and (array.get(dizi2,0)<array.get(dizi2,1)))// and ta.lowest(ttk[1],len/2)>-1)
bgcolor(color=(cg and ta.highest(ttk[1],len/2)<1)? color.rgb(76, 175, 79, 50) : 
 (cr and ta.lowest(ttk[1],len/2)>-1)? color.rgb(255, 82, 82, 50) : na, offset=0, display=display.none)
plot(x)

// for ax+b
xo3=0.0
yo3=0.0
xyo3=0.0
xxo3=0.0
for i=0 to len-1
    xo3:= xo3 + i/(len)
    yo3:= yo3 + x[len-1-i+(ta.barssince(cg))]/(len)
    xyo3:= xyo3 + i*x[len-1-i+(ta.barssince(cg))]/(len)
    xxo3:= xxo3 + i*i/(len)

dizi3=array.new_float(len*2+1+extrapolation)
// linedizi3=array.new_line()
a3=(xo3*yo3-xyo3)/(xo3*xo3-xxo3)
b3=yo3-a3*xo3
for i=0 to len-1+extrapolation
    array.set(dizi3,i,a3*i+b3)

// for ax+b
xo4=0.0
yo4=0.0
xyo4=0.0
xxo4=0.0
for i=0 to len-1
    xo4:= xo4 + i/(len)
    yo4:= yo4 + x[len-1-i+(ta.barssince(cr))]/(len)
    xyo4:= xyo4 + i*x[len-1-i+(ta.barssince(cr))]/(len)
    xxo4:= xxo4 + i*i/(len)

dizi4=array.new_float(len*2+1+extrapolation)
// linedizi4=array.new_line()
a4=(xo4*yo4-xyo4)/(xo4*xo4-xxo4)
b4=yo4-a4*xo4
for i=0 to len-1+extrapolation
    array.set(dizi4,i,a4*i+b4)

// line=line.new((last_bar_index-ta.barssince(cg)-len),
//  array.get(dizi3,0), 
//  last_bar_index-ta.barssince(cg),
//  array.get(dizi3,len-1), color=color.rgb(0,255,0), width=2)
// line2=line.new((last_bar_index-ta.barssince(cr)-len),
//  array.get(dizi4,0), 
//  last_bar_index-ta.barssince(cr),
//  array.get(dizi4,len-1), color=color.rgb(255, 0, 0, 0), width=2)
// line.delete(line[1])
// line.delete(line2[1])

alert=((array.get(dizi,0)<array.get(dizi,1)) and (array.get(dizi2,0)>array.get(dizi2,1)) and ta.highest(ttk[1],len/2)<1)
 or ((array.get(dizi,0)>array.get(dizi,1)) and (array.get(dizi2,0)<array.get(dizi2,1)) and ta.lowest(ttk[1],len/2)>-1)
alertcondition(alert)
hline(50)
rs=hline(30)
rss=hline(70)
fill(rs, rss, color=color.rgb(126, 87, 194, 90), title="RSI Background Fill")

longCondition = cg and ta.highest(ttk[1],len/2)<1 
if (longCondition)
    strategy.entry("Long", strategy.long)
    strategy.exit("exit long", "Long", limit = close*(100+tpb)/100 , stop =close*(100-sb)/100 , trail_price = close , trail_offset = close*tsb)

shortCondition = cr and ta.lowest(ttk[1],len/2)>-1 
if (shortCondition)
    strategy.entry("Short", strategy.short)
    strategy.exit("exit short", "Short", limit = close*(100-tps)/100, stop = close*(100+ss)/100, trail_price = close , trail_offset = close*tss)


Lebih lanjut