Strategi RSI Moving Average Crossover Multi-Timeframe

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

img

Ringkasan

Strategi Crossover Purata Bergerak RSI Multi-Timeframe adalah strategi yang mengikuti trend di pelbagai kerangka masa. Ia menggunakan penunjuk RSI pada pelbagai kerangka masa dan mengambil purata bergerak tertimbang dari setiap RSI kerangka masa. Isyarat akhir dihasilkan dengan menggabungkan semua purata bergerak RSI ke dalam dua penunjuk komprehensif dan memperdagangkan isyarat crossover, yang merupakan sistem crossover purata bergerak berganda biasa.

Prinsip-prinsip

Strategi ini mula-mula mengira penunjuk RSI pada beberapa bingkai masa (1 minit, 5 minit, 15 minit, dan lain-lain). Kemudian ia mengambil VMA 15 tempoh (rata-rata bergerak tertimbang) RSI untuk setiap bingkai masa untuk mendapatkan garis purata bergerak RSI.

Selepas itu, semua purata bergerak RSI dari bingkai masa yang berbeza digabungkan sama rata menjadi dua isyarat - garis pantas dan garis perlahan.

Apabila garisan pantas melintasi di atas garis perlahan, isyarat beli dihasilkan. Apabila garisan pantas melintasi di bawah garis perlahan, isyarat jual dihasilkan. Dengan menggabungkan RSI pelbagai jangka masa dengan cara ini, isyarat silang dapat dengan berkesan mengesan trend sambil menapis bunyi pasaran jangka pendek.

Kelebihan

  1. Menggabungkan pelbagai jangka masa dapat meluruskan lengkung harga dan mengelakkan pecah palsu dengan berkesan.

  2. RSI menunjukkan tahap overbought / oversold, mengelakkan mengejar tinggi baru / rendah.

  3. Purata bergerak berganda mempunyai kesan penahan yang lebih baik daripada sistem purata bergerak tunggal.

  4. Menggunakan VMA bukannya SMA mengurangkan kesan turun naik jangka pendek.

Risiko

  1. Strategi pelbagai jangka masa memerlukan penyesuaian parameter yang luas, tetapan yang tidak betul boleh menyebabkan entri yang baik hilang atau entri terlambat.

  2. Purata bergerak mempunyai pemasangan lengkung yang buruk, berprestasi rendah pada titik perubahan trend.

  3. Perbezaan RSI berlaku dengan kerap, isyarat pembalikan harus diperhatikan.

Penyelesaian: Mengoptimumkan parameter jangka masa; Menggabungkan dengan penunjuk lain seperti MACD untuk menentukan trend; Berhati-hati dengan isyarat perbezaan RSI.

Arahan pengoptimuman

  1. Mengoptimumkan bilangan jangka masa dan tetapan parameter untuk menangkap trend dengan lebih baik.

  2. Pertimbangkan untuk menambah stop loss untuk mengawal risiko.

  3. Menggabungkan penunjuk lain untuk keputusan yang lebih baik mengenai trend dan perbezaan.

  4. Uji parameter tempoh tahan yang berbeza untuk kesan tahan terbaik.

Kesimpulan

Strategi Crossover Purata Bergerak RSI Berbilang Jangka Masa menjana isyarat perdagangan dengan menggabungkan penunjuk RSI dari beberapa jangka masa menggunakan sistem purata bergerak, yang merupakan strategi trend berikut pelbagai jangka masa yang biasa. Kekuatannya terletak pada mengesan trend dengan berkesan dan menapis bunyi bising, tetapi penyesuaian parameter dan kawalan risiko memerlukan perhatian. Dengan pengoptimuman lanjut, ia boleh menjadi sistem trend berikut yang mantap.


/*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 lanjut