Strategi Perdagangan RSI Divergence


Tarikh penciptaan: 2023-10-25 16:47:14 Akhirnya diubah suai: 2023-10-25 16:47:14
Salin: 0 Bilangan klik: 846
1
fokus pada
1617
Pengikut

Strategi Perdagangan RSI Divergence

Gambaran keseluruhan

Strategi perdagangan dengan pengesanan RSI memberi isyarat membeli dan menjual dengan mengenal pasti pengesanan antara RSI dan pergerakan harga. Strategi ini mempunyai fungsi penghentian, hentian, dan pengesanan hentian untuk mengawal risiko dengan berkesan.

Prinsip

Strategi ini terutamanya berdasarkan kepada RSI yang berlainan untuk mengenal pasti peluang perdagangan. Secara khusus, strategi pertama mengira nilai RSI dalam jangka masa tertentu, dan kemudian melukis garis trend RSI. Pada masa yang sama, strategi juga melukis garis trend harga. Apabila garis RSI berlainan dengan garis harga, iaitu RSI naik dan harga turun atau RSI turun dan harga naik, strategi menilai mungkin terdapat pembalikan, menghasilkan isyarat perdagangan.

Jika mengenal pasti keadaan di mana RSI naik ke paras rendah dan harga naik ke paras tinggi, isyarat beli akan diberikan. Jika mengenal pasti keadaan di mana RSI naik ke paras tinggi dan harga naik ke paras rendah, isyarat jual akan diberikan.

Di samping itu, strategi juga menetapkan fungsi berhenti, berhenti dan mengesan berhenti. Hentikan boleh mengawal risiko kerugian, berhenti boleh mengunci keuntungan, dan mengesan berhenti boleh membiarkan keuntungan terus berjalan. Tetapan ini dapat menguruskan risiko setiap perdagangan dengan berkesan.

Kelebihan

Strategi RSI yang berpusing dari perdagangan mempunyai kelebihan berikut:

  1. Dengan menangkap pergerakan RSI, anda boleh mengesan perubahan harga lebih awal.

  2. RSI digunakan secara meluas, kebanyakan perisian perdagangan mempunyai RSI dalaman. Strategi ini sangat sesuai.

  3. RSI mempunyai parameter yang fleksibel, yang boleh disesuaikan dengan kitaran pemerhatian pasaran dan menyesuaikan diri dengan keadaan yang berbeza.

  4. Gabungan dengan seting berhenti, hentikan dan jejak berhenti, anda dapat mengawal risiko setiap dagangan dengan berkesan.

  5. Strategi untuk berdagang dengan frekuensi isyarat yang sederhana dan mengelakkan perdagangan yang terlalu padat.

  6. Idea strategi jelas dan mudah difahami, mudah dilaksanakan oleh program komputer.

Risiko

Strategi ini mempunyai beberapa risiko:

  1. RSI tidak boleh dipercayai 100 peratus, dan ia boleh menyebabkan isyarat palsu. Ia perlu digabungkan dengan isyarat penapis indikator lain.

  2. Dalam keadaan trend, isyarat RSI yang menyimpang dari trend mungkin tidak berfungsi dan harus dielakkan.

  3. Pengaturan parameter RSI yang tidak betul juga boleh mempengaruhi kesan strategi. Pengaturan kitaran yang terlalu pendek akan meningkatkan frekuensi perdagangan dan risiko.

  4. Tetapan titik henti terlalu kecil, mungkin akan berhenti terlalu awal; titik henti terlalu besar, tidak dapat mengawal risiko dengan berkesan. Ia perlu ditetapkan dengan pertimbangan.

  5. Tracking stop loss Apabila harga turun naik dengan pesat, ia mungkin terhenti terlalu awal. Perlu menetapkan jarak tracking stop loss yang munasabah dengan turun naik pasaran.

Risiko yang berkaitan boleh dikurangkan dengan langkah-langkah berikut:

  1. Menambah petunjuk lain, seperti MACD, Brinline dan lain-lain untuk penapisan isyarat, mengurangkan isyarat palsu.

  2. Ia hanya boleh digunakan untuk merangka pasaran yang bergolak dan mengelakkan trend yang jelas.

  3. Mengoptimumkan parameter RSI, memilih panjang kitaran yang terbaik. Pada masa yang sama, menguji pilihan parameter di pasaran yang berbeza.

  4. Berdasarkan data pengesanan semula sejarah, kedudukan hentian dan hentian yang munasabah ditetapkan.

  5. Mengambil kiraan yang bersesuaian dengan turun naik pasaran dan keutamaan risiko.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dengan:

  1. Menambah penilaian indikator lain untuk menapis isyarat perdagangan dan meningkatkan kebolehpercayaan isyarat.

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

  3. Mengikut corak pasaran yang berbeza, reka bentuk algoritma berhenti yang dinamik. Sebagai contoh, meluaskan berhenti dalam keadaan goyah dan mengurangkan berhenti dalam keadaan trend.

  4. Reka bentuk algoritma pengurusan kedudukan dinamik yang menyesuaikan saiz kedudukan setiap perdagangan berdasarkan faktor seperti kadar turun naik pasaran.

  5. Memperkenalkan konsep kadar turun naik dalam pengesanan hentian dan menetapkan jarak hentian mengikut intensiti turun naik harga.

  6. Menerapkan strategi ini ke pasaran lain, seperti forex dan cryptocurrency.

  7. Membina sistem perdagangan kuantitatif, perdagangan automatik untuk melaksanakan strategi.

ringkaskan

Strategi perdagangan RSI ini menghasilkan isyarat perdagangan dengan menangkap perpindahan antara indikator RSI dan pergerakan harga. Kelebihan strategi ini adalah bahawa ia mudah dan jelas, dan mudah dilakukan secara automatik. Pada masa yang sama, tetapan stop loss, stop loss, dan tracking stop loss juga dapat mengawal risiko dengan berkesan. Tetapi, strategi ini juga mempunyai beberapa batasan, memerlukan tanda pengesahan gabungan pelbagai indikator, dan tidak sesuai untuk keadaan trend yang kuat.

Kod sumber strategi
/*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)