Strategi perdagangan kuantitatif berdasarkan indikator RSI dan moving average

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

img

Gambaran umum

Strategi ini disebut Quantitative Trading Strategy Based on RSI Indicator and Moving Average. Strategi ini menggunakan indikator RSI dan moving average sebagai sinyal perdagangan untuk menerapkan strategi perdagangan kuantitatif yang melakukan operasi pembalikan di bawah latar belakang tren.

Prinsip Strategi

Strategi ini terutama menggunakan indikator RSI dan rata-rata bergerak cepat / lambat untuk menentukan tren harga dan waktu pembalikan. Secara khusus, pertama-tama menghitung rata-rata bergerak cepat (SMA) dan rata-rata bergerak lambat. Ketika SMA cepat melintasi SMA lambat, sinyal beli dihasilkan. Ketika SMA cepat melintasi di bawah SMA lambat, sinyal jual dihasilkan. Ini menunjukkan tren harga berubah.

Pada saat yang sama, strategi ini menghitung indikator RSI untuk menentukan apakah harga berada dalam keadaan overbought atau oversold. Sebelum membuka posisi, ia akan menilai apakah indikator RSI normal. Jika RSI melebihi ambang batas yang ditetapkan, ia akan menangguhkan posisi pembukaan dan menunggu RSI jatuh kembali sebelum membuka posisi. Ini dapat menghindari mendirikan posisi pada waktu overbought dan oversold yang tidak menguntungkan. Di sisi lain, setelah mengambil posisi, jika RSI melebihi ambang batas mengambil keuntungan yang ditetapkan, ia akan menutup posisi untuk mengambil keuntungan. Ini dapat mengunci keuntungan perdagangan.

Dengan berkolaborasi dengan rata-rata bergerak, posisi dapat dibuka ketika sinyal pembalikan harga terjadi. dan dengan mengambil keuntungan ketika overbought atau oversold, strategi perdagangan kuantitatif yang membuat operasi pembalikan untuk keuntungan di bawah latar belakang tren harga dapat diterapkan.

Keuntungan

Strategi ini memiliki keuntungan berikut:

  1. Menggunakan moving average golden cross sebagai sinyal beli dan death cross sebagai sinyal jual dapat dengan akurat menangkap peluang pembalikan tren harga.

  2. Dengan menilai kondisi overbought dan oversold melalui indikator RSI, dapat secara efektif mencegah pembentukan posisi ketika harga berfluktuasi berlebihan dalam jangka pendek, menghindari kerugian mengambang yang tidak perlu.

  3. Risiko dapat dikendalikan dengan baik. RSI mengambil keuntungan dapat menjaga posisi dalam kisaran keuntungan yang wajar dan secara efektif mengendalikan risiko perdagangan.

  4. Mudah untuk mengoptimalkan parameter. Periode SMA, parameter RSI dll dapat disesuaikan secara fleksibel untuk beradaptasi dengan lingkungan pasar yang berbeda.

  5. Efisiensi pemanfaatan modal yang tinggi. Perdagangan sering dapat dilakukan selama konsolidasi tren dan tahap kejutan, sehingga penggunaan modal efisien.

Analisis Risiko

Strategi ini juga memiliki risiko berikut:

  1. Mengikuti risiko kesalahan Rata-rata bergerak sebagai indikator penilaian tren memiliki keterlambatan tertentu, yang dapat menyebabkan waktu pembukaan posisi yang tidak akurat.

  2. Risiko perdagangan yang sering terjadi. Di pasar yang berosilasi, risiko ini dapat menyebabkan pembukaan dan penutupan posisi yang terlalu sering.

  3. Risiko penyesuaian parameter. Periode SMA dan parameter RSI membutuhkan pengujian dan penyesuaian berulang untuk beradaptasi dengan pasar. Pengaturan yang tidak tepat dapat mempengaruhi kinerja strategi.

  4. Mengambil risiko keuntungan. pengaturan RSI mengambil keuntungan yang tidak tepat juga dapat menyebabkan keluar prematur dari posisi atau terus meningkat setelah keluar mengambil keuntungan.

Arahan Optimasi

Arah optimasi adalah sebagai berikut:

  1. Cobalah menggunakan MACD, Bollinger Bands dan indikator lain yang dikombinasikan dengan RSI untuk membuat sinyal lebih akurat dan dapat diandalkan.

  2. Meningkatkan algoritma pembelajaran mesin untuk menyesuaikan parameter secara otomatis berdasarkan data historis, mengurangi risiko pengaturan parameter.

  3. Meningkatkan mekanisme optimasi untuk mengambil strategi keuntungan untuk membuat mengambil keuntungan lebih cerdas dan dapat beradaptasi dengan perubahan pasar.

  4. Mengoptimalkan strategi manajemen posisi dengan menyesuaikan ukuran posisi secara dinamis untuk mengurangi risiko perdagangan tunggal.

  5. Menggabungkan data frekuensi tinggi dan menggunakan data real-time tingkat tik untuk perdagangan frekuensi tinggi untuk meningkatkan frekuensi strategi.

Kesimpulan

Singkatnya, strategi ini menggunakan sinyal perdagangan yang dihasilkan oleh indikator RSI dan moving average untuk menerapkan strategi kuantitatif yang melakukan operasi pembalikan selama trend run. Dibandingkan dengan menggunakan moving average saja, dengan menambahkan penilaian indikator RSI, strategi ini dapat secara efektif mencegah waktu pembukaan posisi yang tidak menguntungkan dan mengendalikan risiko perdagangan melalui RSI mengambil keuntungan. Sejauh tertentu, ini meningkatkan stabilitas strategi. Tentu saja, masih ada ruang untuk perbaikan untuk strategi ini. Di masa depan, dapat dioptimalkan dalam aspek seperti lebih banyak kombinasi indikator, optimasi parameter otomatis, manajemen posisi, dll untuk membuat strategi kinerja 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 banyak