Strategi Crossover Rata-rata Gerak RSI Multi-Timeframe

Penulis:ChaoZhang, Tanggal: 2023-11-16 16:28:22
Tag:

img

Gambaran umum

Multi-Timeframe RSI Moving Average Crossover Strategy adalah strategi yang mengikuti tren di beberapa jangka waktu. Strategi ini menggunakan indikator RSI pada beberapa jangka waktu dan mengambil rata-rata bergerak tertimbang dari setiap RSI jangka waktu. Sinyal akhir dihasilkan dengan menggabungkan semua rata-rata bergerak RSI menjadi dua indikator komprehensif dan memperdagangkan sinyal crossover, yang merupakan sistem crossover rata-rata bergerak ganda yang khas.

Prinsip-prinsip

Strategi ini pertama-tama menghitung indikator RSI pada beberapa kerangka waktu (1-menit, 5-menit, 15-menit, dll).

Setelah itu, semua rata-rata bergerak RSI dari kerangka waktu yang berbeda digabungkan sama dalam dua sinyal - garis cepat dan garis lambat.

Ketika garis cepat melintasi di atas garis lambat, sinyal beli dihasilkan. Ketika garis cepat melintasi di bawah garis lambat, sinyal jual dihasilkan. Dengan menggabungkan RSI multi-frame dengan cara ini, sinyal crossover dapat secara efektif melacak tren sambil menyaring kebisingan pasar jangka pendek.

Keuntungan

  1. Menggabungkan beberapa kerangka waktu dapat merata kurva harga dan menghindari false breakout secara efektif.

  2. RSI menunjukkan tingkat overbought/oversold, menghindari mengejar level tinggi/rendah baru.

  3. Rata-rata bergerak ganda memiliki efek penahan yang lebih baik daripada sistem rata-rata bergerak tunggal.

  4. Menggunakan VMA alih-alih SMA mengurangi dampak fluktuasi jangka pendek.

Risiko

  1. Strategi multi-frame membutuhkan pengaturan parameter yang luas, pengaturan yang tidak tepat dapat menyebabkan entri yang baik hilang atau entri terlambat.

  2. Rata-rata bergerak memiliki kelonggaran kurva yang buruk, berkinerja buruk pada titik perubahan tren.

  3. Perbedaan RSI sering terjadi, sinyal pembalikan harus diwaspadai.

Solusi: Optimalkan parameter timeframe; Gabungkan dengan indikator lain seperti MACD untuk menentukan tren; Waspada sinyal divergensi RSI.

Arahan Optimasi

  1. Optimalkan jumlah kerangka waktu dan pengaturan parameter untuk lebih menangkap tren.

  2. Pertimbangkan untuk menambahkan stop loss untuk mengendalikan risiko.

  3. Menggabungkan indikator lain untuk keputusan yang lebih baik tentang tren dan perbedaan.

  4. Uji parameter periode penyimpanan yang berbeda untuk efek penyimpanan terbaik.

Kesimpulan

Multi-Timeframe RSI Moving Average Crossover Strategy menghasilkan sinyal perdagangan dengan menggabungkan indikator RSI dari beberapa kerangka waktu menggunakan sistem rata-rata bergerak, yang merupakan strategi trend berikut multi-timeframe yang khas. Kekuatannya terletak pada melacak tren secara efektif dan menyaring kebisingan, tetapi penyesuaian parameter dan pengendalian risiko membutuhkan perhatian. Dengan optimasi lebih lanjut, itu dapat menjadi sistem trend berikut yang kuat.


/*backtest
start: 2023-10-16 00:00:00
end: 2023-11-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="RSI multitimeframe SMA crossover", shorttitle="RSI multitimeframe strategy", default_qty_type= strategy.percent_of_equity, margin_long=50, default_qty_value=150)

res1 = input(title="Res 01", type=input.resolution, defval="1")
res2 = input(title="Res 0", type=input.resolution, defval="5")
res3 = input(title="Res 1", type=input.resolution, defval="15")
res4 = input(title="Res 2", type=input.resolution, defval="15")
res5 = input(title="Res 3", type=input.resolution, defval="15")
res6 = input(title="Res 4", type=input.resolution, defval="30")
res7 = input(title="Res 5", type=input.resolution, defval="45")
res8 = input(title="Res 6", type=input.resolution, defval="60")



lengthRSI = input(15, minval=1)
lengthMA = input(15, minval=1)
lengthFMA = input(100, minval=1)
lengthFMA2 = input(150, minval=1)
Long_yes = input(defval=1, title="Long trades 0 or 1", minval=0, maxval=1)
Short_yes = input(defval=0, title="Short trades 0 or 1", minval=0, maxval=1)
src = close

// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2020, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

// === INPUT SHOW PLOT ===
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

// === FUNCTION EXAMPLE ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"



// stop loss 
longLossPerc = input(title="Long Stop Loss (%)", type=input.float, minval=0.0, step=0.5, defval=10) * 
   0.01
longStopPrice = strategy.position_avg_price * (1 - longLossPerc)

shortLossPerc = input(title="Short Stop Loss (%)", type=input.float, minval=0.0, step=0.5, defval=10) * 
   0.01
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)


rsi1 = rsi(src, lengthRSI)
MA1 = vwma(rsi1, lengthMA)






outD1 = security(syminfo.tickerid, res1, MA1)
outD2 = security(syminfo.tickerid, res2, MA1)
outD3 = security(syminfo.tickerid, res3, MA1)
outD4 = security(syminfo.tickerid, res4, MA1)
outD5 = security(syminfo.tickerid, res5, MA1)
outD6 = security(syminfo.tickerid, res6, MA1)
outD7 = security(syminfo.tickerid, res7, MA1)
outD8 = security(syminfo.tickerid, res8, MA1)




//plot_d0 = outD0
//plot_d1 = outD1
//plot_d2 = outD2
//plot_d3 = outD3
//plot_d4 = outD4
//plot_d5 = outD5
//plot_d6 = outD6

out_multi = ema(outD1+outD2+outD3+outD4+outD5+outD6+outD7+outD8, lengthFMA)
out_multi2 = ema(outD1+outD2+outD3+outD4+outD5+outD6+outD7+outD8, lengthFMA2)
//out_multi1 = outD2+outD3+outD4
//out_multi2 = outD4+outD5+outD6

//col0 = outD0 < 20 ? color.lime : outD0 > 80 ? color.red : color.blue
//col1 = outD1 < 20 ? color.lime : outD1 > 80 ? color.red : color.blue
//col2 = outD2 < 20 ? color.lime : outD2 > 80 ? color.red : color.blue
//col3 = outD3 < 20 ? color.lime : outD3 > 80 ? color.red : color.blue
//col4 = outD4 < 20 ? color.lime : outD4 > 80 ? color.red : color.blue
//col5 = outD5 < 20 ? color.lime : outD5 > 80 ? color.red : color.blue
//col6 = outD6 < 20 ? color.lime : outD6 > 80 ? color.red : color.blue


// plot(plot_d0,linewidth=2, color=col0)
// plot(plot_d1, linewidth=2, color=col1)
// plot(plot_d2,linewidth=2, color=col2)
// plot(plot_d3,linewidth=2, color=col3)
// plot(plot_d4,linewidth=2, color=col4)
// plot(plot_d5,linewidth=2, color=col5)
// plot(plot_d6,linewidth=2, color=col6)

long=(out_multi/8)
short=(out_multi2/8)

plot(long, linewidth=1, color=color.green)
plot(short, linewidth=1, color=color.red)

long1=crossover(long,short)
short1=crossunder(long,short)

h0 = hline(65, "Upper Band", color=color.red, linestyle=hline.style_solid, linewidth=2 )
h1 = hline(35, "Lower Band", color=color.green, linestyle=hline.style_solid, linewidth=2)


strategy.entry("buy", strategy.long, when=long1 and window() and Long_yes > 0) 
if strategy.position_size > 0
    strategy.exit(id="XL STP", stop=longStopPrice)
strategy.close("buy",when=short1 )

strategy.entry("sell", strategy.short, when=short1 and window() and Short_yes > 0) 
if strategy.position_size < 0
    strategy.exit(id="XS STP", stop=shortStopPrice)
strategy.close("buy",when=long1 )



Lebih banyak