Strategi Crossover Rata-rata Pergerakan RSI Multi-Kerangka Waktu


Tanggal Pembuatan: 2023-11-16 16:28:22 Akhirnya memodifikasi: 2023-11-16 16:28:22
menyalin: 1 Jumlah klik: 783
1
fokus pada
1617
Pengikut

Strategi Crossover Rata-rata Pergerakan RSI Multi-Kerangka Waktu

Ringkasan

Strategi RSI multi-frame adalah strategi pelacakan tren multi-frame. Strategi ini menggunakan indikator RSI dari beberapa frame waktu sekaligus, dan melakukan perlakuan rata-rata bergerak berbobot pada RSI dari setiap frame waktu, yang akhirnya bergabung menjadi dua indikator sinyal komposit, yang lebih banyak ketika dua indikator sinyal terjadi, dan kosong ketika terjadi.

Prinsip

Strategi ini pertama-tama menghitung RSI pada beberapa frame waktu (misalnya 1 menit, 5 menit, 15 menit, dan lain-lain) dan kemudian memproses RSI pada setiap frame waktu dengan rata-rata bergerak berbobot panjang 15 (VMA) untuk mendapatkan rata-rata RSI pada setiap frame waktu.

Kemudian, RSI rata-rata dari semua frame waktu digabungkan dengan berat yang sama, masing-masing digabungkan menjadi dua sinyal garis cepat dan lambat. EMA garis cepat adalah 100 siklus dan EMA garis lambat adalah 150 siklus.

Ketika garis cepat dari bawah ke atas menerobos garis lambat menghasilkan sinyal beli; ketika garis cepat dari atas ke bawah menerobos garis lambat menghasilkan sinyal jual. Dengan demikian, sinyal silang komprehensif dari RSI multi-frame waktu, dapat secara efektif melacak tren, sekaligus menyaring kebisingan pasar jangka pendek.

Keunggulan

  1. Integrasi multi-frame timeframe dapat meluruskan kurva harga dan memfilter penembusan palsu secara efektif.

  2. Indikator RSI dapat mencerminkan keadaan overbought dan oversold, menghindari mengejar high dan low.

  3. Sistem dua baris lebih efektif dalam memegang posisi dibandingkan dengan sistem satu baris.

  4. Penggunaan VMA dan bukan SMA dapat mengurangi dampak fluktuasi jangka pendek pada garis rata-rata.

Risiko

  1. Kebijakan multi-frame timeframe, persyaratan parameter yang lebih tinggi, pengaturan yang tidak tepat dapat masuk terlalu dini atau terlalu terlambat.

  2. Sistem garis rata tidak bekerja dengan baik pada penyesuaian kurva, dan berkinerja buruk pada titik-titik perubahan tren.

  3. Indeks RSI mudah terbentuk dari deviasi, perlu diperhatikan sinyal reversal.

Solusi: menyesuaikan pengaturan parameter jangka waktu; mengevaluasi tren dengan indikator lain, seperti MACD dan lain-lain; waspada RSI dari sinyal.

Arah optimasi

  1. Mengoptimalkan pengaturan parameter dan jumlah frame waktu untuk menangkap tren.

  2. Pertimbangkan untuk memasukkan Stop Loss Mechanism untuk mengendalikan risiko.

  3. Hal ini dikombinasikan dengan indikator lain untuk menilai tren dan deviasi, meningkatkan kualitas keputusan.

  4. Uji berbagai parameter periode pegangan untuk mencari efek pegangan yang optimal.

Meringkaskan

Strategi lintas rasio rata-rata RSI jangka waktu yang menggunakan penilaian komprehensif dari indikator RSI dalam beberapa jangka waktu, menggunakan sistem rata-rata untuk meluruskan kurva harga dan menghasilkan sinyal perdagangan, merupakan strategi pelacakan tren jangka waktu yang khas. Keuntungan dari strategi ini adalah bahwa strategi ini dapat secara efektif melacak tren sekaligus menyaring kebisingan, tetapi perlu memperhatikan pengoptimalan parameter dan pengendalian risiko. Dengan pengoptimalan lebih lanjut, strategi ini dapat menjadi sistem pelacakan tren yang lebih kuat.

Kode Sumber Strategi
/*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 )