Strategi Dagangan Kuantitatif Berdasarkan Indikator RSI dan Purata Bergerak

Penulis:ChaoZhang, Tarikh: 2023-12-25 11:40:36
Tag:

img

Ringkasan

Strategi ini dinamakan Quantitative Trading Strategy Based on RSI Indicator and Moving Average. Ia menggunakan penunjuk RSI dan purata bergerak sebagai isyarat perdagangan untuk melaksanakan strategi perdagangan kuantitatif yang membuat operasi pembalikan di bawah latar belakang trend. Idea utamanya adalah untuk membuka kedudukan apabila isyarat pembalikan harga berlaku dan mengambil keuntungan apabila terlalu banyak dibeli atau terlalu banyak dijual.

Prinsip Strategi

Strategi ini terutamanya menggunakan penunjuk RSI dan purata bergerak pantas / perlahan untuk menentukan trend harga dan masa pembalikan. Khususnya, ia pertama kali mengira purata bergerak pantas (SMA) dan purata bergerak perlahan. Apabila SMA pantas melintasi SMA perlahan, isyarat beli dihasilkan. Apabila SMA pantas melintasi di bawah SMA perlahan, isyarat jual dihasilkan. Ini menunjukkan trend harga berubah.

Pada masa yang sama, strategi ini mengira penunjuk RSI untuk menentukan sama ada harga berada dalam keadaan overbought atau oversold. Sebelum membuka kedudukan, ia akan menilai sama ada penunjuk RSI adalah normal. Jika RSI melebihi ambang yang ditetapkan, ia akan menangguhkan kedudukan pembukaan dan menunggu RSI jatuh kembali sebelum membuka kedudukan. Ini dapat mengelakkan penubuhan kedudukan pada masa overbought dan oversold yang tidak menguntungkan. Sebaliknya, selepas mengambil kedudukan, jika RSI melebihi ambang mengambil keuntungan yang ditetapkan, ia akan menutup kedudukan untuk mengambil keuntungan. Ini boleh mengunci keuntungan perdagangan.

Dengan bekerjasama dengan purata bergerak, kedudukan boleh dibuka apabila isyarat pembalikan harga berlaku. dan dengan mengambil keuntungan apabila overbought atau oversold, strategi perdagangan kuantitatif yang membuat operasi pembalikan keuntungan di bawah latar belakang trend harga boleh dilaksanakan.

Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Menggunakan purata bergerak golden cross sebagai isyarat beli dan death cross sebagai isyarat jual boleh menangkap peluang pembalikan trend harga dengan tepat.

  2. Mengelakkan masa kedudukan pembukaan yang tidak baik. Dengan menilai keadaan overbought dan oversold melalui penunjuk RSI, ia dapat dengan berkesan mengelakkan penubuhan kedudukan apabila harga turun naik secara berlebihan dalam jangka pendek, mengelakkan kerugian terapung yang tidak perlu.

  3. Risiko boleh dikawal dengan baik. RSI mengambil keuntungan boleh mengekalkan kedudukan dalam julat keuntungan yang munasabah dan mengawal risiko perdagangan dengan berkesan.

  4. Mudah untuk mengoptimumkan parameter. Tempoh SMA, parameter RSI dan lain-lain boleh diselaraskan dengan fleksibel untuk menyesuaikan diri dengan persekitaran pasaran yang berbeza.

  5. Kecekapan penggunaan modal yang tinggi. Perdagangan yang kerap boleh dilakukan semasa pengukuhan trend dan peringkat kejutan, membuat penggunaan modal yang cekap.

Analisis Risiko

Strategi ini juga mempunyai risiko berikut:

  1. Mengesan risiko ralat. purata bergerak sebagai penunjuk penilaian trend mempunyai kelewatan tertentu, yang boleh membawa kepada masa yang tidak tepat untuk membuka kedudukan.

  2. Risiko perdagangan yang kerap: Dalam pasaran yang berayun, ia boleh membawa kepada pembukaan dan penutupan kedudukan yang terlalu kerap.

  3. Risiko penyesuaian parameter. Tempoh SMA dan parameter RSI memerlukan ujian berulang dan penyesuaian untuk menyesuaikan diri dengan pasaran. Tetapan yang tidak betul boleh menjejaskan prestasi strategi.

  4. Mengambil risiko keuntungan. tetapan RSI mengambil keuntungan yang tidak betul juga boleh membawa kepada keluar awal dari kedudukan atau peningkatan berterusan selepas keluar keuntungan.

Arahan pengoptimuman

Arah pengoptimuman adalah seperti berikut:

  1. Cuba gunakan MACD, Bollinger Bands dan penunjuk lain yang digabungkan dengan RSI untuk membuat isyarat lebih tepat dan boleh dipercayai.

  2. Tingkatkan algoritma pembelajaran mesin untuk menyesuaikan parameter secara automatik berdasarkan data sejarah, mengurangkan risiko penyesuaian parameter.

  3. Meningkatkan mekanisme pengoptimuman untuk mengambil strategi keuntungan untuk membuat mengambil keuntungan lebih bijak dan dapat disesuaikan dengan perubahan pasaran.

  4. Mengoptimumkan strategi pengurusan kedudukan dengan menyesuaikan saiz kedudukan secara dinamik untuk mengurangkan risiko perdagangan tunggal.

  5. Menggabungkan data frekuensi tinggi dan menggunakan data masa nyata tahap tik untuk perdagangan frekuensi tinggi untuk meningkatkan kekerapan strategi.

Kesimpulan

Ringkasnya, strategi ini menggunakan isyarat perdagangan yang dihasilkan oleh penunjuk RSI dan purata bergerak untuk melaksanakan strategi kuantitatif yang membuat operasi pembalikan semasa trend run. Berbanding dengan menggunakan purata bergerak sahaja, dengan menambahkan penilaian penunjuk RSI, strategi ini dapat secara berkesan mencegah masa kedudukan pembukaan yang tidak menguntungkan dan mengawal risiko perdagangan melalui RSI mengambil keuntungan. Sejauh tertentu, ia meningkatkan kestabilan strategi. Sudah tentu, masih ada ruang untuk penambahbaikan untuk strategi ini. Pada masa akan datang, ia boleh dioptimumkan dalam aspek seperti lebih banyak kombinasi penunjuk, pengoptimuman parameter automatik, pengurusan kedudukan, dan lain-lain untuk menjadikan strategi prestasi lebih baik.


/*backtest
start: 2023-12-17 00:00:00
end: 2023-12-18 19:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//1. 做多
//    a. RSI在超买区间时不开单,直到RSI回落一点再开单
//    b. 已经有多仓,如果RSI超买,则平多获利,当RSI回落一点之后,再次开多,直到有交叉信号反转做空

//2. 做空
//    a. RSI在超卖区间时不开单,直到RSI回落一点之后再开多单
//    b. 已经有空仓,如果RSI超卖,则平空获利,当RSI回落一点之后,再开空单,直到有交叉信号反转做多

//@version=4
strategy("策略_RSI+移动揉搓线_", overlay=true)

// 输入
fastLength = input(11, minval=1)
slowLength = input(82,minval=1)
length = input(title="长度", type=input.integer, defval=14, minval=1, maxval=100)
hight_rsi = input(title="rsi超过上轨平多获利", type=input.integer, defval=80, minval=1, maxval=100)
low_rsi = input(title="rsi超过下轨平空获利", type=input.integer, defval=20, minval=1, maxval=100)

open_long_rsi_threshold = input(title="rsi低于该阈值时才开多", type=input.integer, defval=75, minval=1, maxval=100)
open_short_rsi_threshold = input(title="rsi高于该阈值时才开空仓", type=input.integer, defval=25, minval=1, maxval=100)

// 均线
sma_fast = sma(close, fastLength)
sma_slow = sma(close, slowLength)
// RSI
rsi = rsi(close, length)

//**********变量*start*******//
var long_f = false // 标记是否是均线交叉多头
var short_f = false // 标记是否是均线交叉空头
var long_open_pending = false // 标记开仓时rsi是否处于超买状态
var short_open_pending = false // 标记开仓时rsi是否处于超卖
var long_rsi_over_buy = false // 标记 多仓时 是否发生超买平多获利
var short_rsi_over_sell = false // 标记 空仓时 是否发生超卖平空获利

//**********逻辑*start*******//

// 买入
longCondition = crossover(sma_fast, sma_slow)
if (longCondition)
    short_rsi_over_sell := false // 清空该标记,防止再次开空仓
    long_f := true
	short_f := false
	if (rsi < hight_rsi)
	    // 并且没有超买
	    strategy.entry("多", long=strategy.long)
    if (rsi > hight_rsi)
        // 开仓时发生超买,等待rsi小于hight_rsi
	    long_open_pending := true

// 卖出
shortCondition = crossunder(sma_fast, sma_slow)
if (shortCondition)
    long_rsi_over_buy := false //清空该标记,防止再次开多仓
    long_f := false
    short_f := true
    if (rsi > low_rsi)
        strategy.entry("空", long=strategy.short)
	if (rsi < low_rsi)
	    // 开仓时发生超卖,等待rsi大于low_rsi
	    short_open_pending := true
	    

// 等待RSI合理,买入开仓
if (long_f and long_open_pending and strategy.position_size == 0 and rsi < open_long_rsi_threshold)
    strategy.entry("多", long=strategy.long)
	long_open_pending := false
// 等待RSI合理,卖出开仓
if (short_f and short_open_pending and strategy.position_size == 0 and rsi > open_short_rsi_threshold)
    strategy.entry("空", long=strategy.short)
	short_open_pending := false


	
//RSI止盈(RSI超买平多)
if (strategy.position_size > 0 and long_f and rsi > hight_rsi)
	strategy.close_all()
	long_rsi_over_buy := true
//RSI止盈(RSI超卖平空)
if (strategy.position_size < 0 and short_f and rsi < low_rsi)
	strategy.close_all()
	short_rsi_over_sell := true
	
	
//RSI止盈之后,再次开多
if (long_f and long_rsi_over_buy and strategy.position_size == 0 and rsi < hight_rsi)
    long_rsi_over_buy := false
    strategy.entry("多", long=strategy.long)
//RSI止盈之后,再次开空
if (short_f and short_rsi_over_sell and strategy.position_size == 0 and rsi > low_rsi)
    short_rsi_over_sell := false
    strategy.entry("空", long=strategy.short)


//**********绘图*start*******//

p1 = plot(sma_fast, linewidth=2, color=color.green)
p2 = plot(sma_slow, linewidth=2, color=color.red)
fill(p1, p2, color=color.green)
plot(cross(sma_fast, sma_slow) ? sma_fast : na, style = plot.style_circles, linewidth = 4)

// 绘制rsi线
//plot(rsi, color=color.green, editable=true, style=plot.style_circles, linewidth=2)

// 绘制上下轨
//high_ = hline(80, title="上轨")
//low_ = hline(20, title="下轨")
//fill(high_, low_, transp=80, editable=true, title="背景")
    
    
    
    
    
    
    

Lebih lanjut