Strategi Perdagangan Divergensi RSI

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

img

Gambaran umum

Strategi perdagangan RSI Divergence menghasilkan sinyal beli dan jual dengan mengidentifikasi perbedaan antara indikator RSI dan pergerakan harga. Strategi ini juga menggabungkan stop loss, take profit dan trailing stop loss untuk mengelola risiko secara efektif.

Prinsip

Strategi ini terutama menggunakan divergensi dalam indikator RSI untuk mengidentifikasi peluang perdagangan. Secara khusus, strategi pertama menghitung nilai RSI selama periode tertentu, kemudian memetakan garis tren untuk indikator RSI dan harga. Ketika garis RSI menyimpang dari garis harga, yaitu RSI naik saat harga turun, atau RSI turun saat harga naik, strategi menganggapnya sebagai tanda pembalikan tren yang akan datang dan menghasilkan sinyal perdagangan.

Jika strategi mendeteksi garis RSI menduduki titik terendah sementara garis harga berada di atas, sinyal beli akan dihasilkan. Jika garis RSI berada di puncak sementara garis harga berada di bawah, sinyal jual akan dihasilkan. Setelah sinyal perdagangan terjadi, strategi dapat berdagang sesuai dengan ukuran nilai RSI.

Selain itu, strategi ini memiliki fitur stop loss, take profit dan trailing stop loss. Stop loss mengendalikan risiko penurunan, mengambil kunci keuntungan dalam keuntungan, dan trailing stop memungkinkan keuntungan untuk berjalan. Pengaturan ini secara efektif mengelola risiko untuk setiap perdagangan.

Keuntungan

Strategi perdagangan divergensi RSI memiliki keuntungan berikut:

  1. Menangkap divergensi RSI dapat mendeteksi pembalikan tren lebih awal.

  2. RSI banyak digunakan dan tersedia di sebagian besar platform perdagangan.

  3. Parameter RSI fleksibel dan dapat disesuaikan dengan kondisi pasar yang berbeda.

  4. Stop loss, mengambil keuntungan dan pengendalian stop loss yang mengiringi risiko secara efektif.

  5. Strategi ini memiliki frekuensi sinyal yang moderat, menghindari over-trading.

  6. Logikanya sederhana dan mudah diprogram untuk otomatisasi.

Risiko

Strategi ini juga memiliki beberapa risiko:

  1. Perbedaan RSI tidak sepenuhnya dapat diandalkan dan dapat menghasilkan sinyal palsu.

  2. Perbedaan mungkin gagal di pasar dengan tren yang kuat, yang harus dihindari.

  3. Parameter RSI yang tidak tepat dapat mempengaruhi kinerja. periode yang terlalu pendek meningkatkan frekuensi dan risiko.

  4. Stop loss yang terlalu ketat mengurangi keuntungan; terlalu longgar gagal membatasi risiko.

  5. Trailing stop dapat berhenti prematur selama pasar yang volatile. lebar trailing yang wajar diperlukan mengingat volatilitas.

Risiko dapat dikurangi dengan:

  1. Menambahkan indikator lain seperti MACD, Bollinger Bands untuk menyaring sinyal dan mengurangi sinyal palsu.

  2. Menggunakan strategi hanya selama pasar sisi yang terikat kisaran, menghindari tren yang kuat.

  3. Mengoptimalkan parameter RSI, memilih periode optimum melihat kembali.

  4. Menetapkan stop loss yang wajar dan mengambil tingkat keuntungan berdasarkan backtesting historis.

  5. Menyesuaikan jarak stop trailing berdasarkan volatilitas pasar dan nafsu risiko.

Optimalisasi

Strategi ini dapat ditingkatkan dalam hal berikut:

  1. Masukkan indikator lain untuk menyaring sinyal dan meningkatkan keandalan.

  2. Menggunakan pembelajaran mesin untuk mengoptimalkan parameter RSI secara otomatis.

  3. Desain algoritma stop loss dinamis sesuai dengan rezim pasar. Stop yang lebih luas untuk rentang, stop yang lebih ketat untuk pasar tren.

  4. Membangun model ukuran posisi dinamis berdasarkan volatilitas untuk menyesuaikan ukuran posisi.

  5. Memperkenalkan volatilitas di trailing stop untuk menetapkan jarak trail berdasarkan perubahan harga.

  6. Mengerahkan strategi ke pasar lain seperti forex dan mata uang kripto.

  7. Mengembangkan sistem perdagangan kuantitatif untuk otomatisasi.

Kesimpulan

Strategi perdagangan divergensi RSI menghasilkan sinyal dengan mengidentifikasi divergensi antara RSI dan harga. Logika sederhana dan mudah diotomatiskan. Stop loss, take profit dan trailing stop secara efektif mengendalikan risiko. Namun, strategi ini memiliki keterbatasan dalam akurasi dan tren pasar. Perbaikan dapat dilakukan melalui pengoptimalan parameter, menambahkan filter dan stop dinamis. Sebagai strategi teknis, ini dapat berfungsi sebagai pelengkap selama pasar yang terikat kisaran ketika disistematisasi.


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