Strategi RSI gabungan dengan purata bergerak dan MACD

Penulis:ChaoZhang, Tarikh: 2024-02-20 14:28:59
Tag:

img

Ringkasan

Strategi ini mengenal pasti trend harga dan membuat keputusan membeli rendah menjual tinggi dengan menggabungkan purata bergerak, penunjuk MACD dan penunjuk RSI. Ia menghasilkan isyarat beli apabila purata bergerak jangka pendek melintasi di atas purata bergerak jangka panjang dan harga dekat di atas purata bergerak 50 hari. Ia menghasilkan isyarat jual apabila sebaliknya berlaku. Di samping itu, strategi menggunakan penunjuk RSI untuk mengelakkan zon overbought dan oversold, dan histogram MACD untuk menentukan trend jangka menengah hingga panjang.

Logika Strategi

Inti strategi ini bergantung pada sistem crossover purata bergerak berganda, yang menghasilkan isyarat beli dan jual apabila EMA jangka pendek (3 hari) melintasi EMA jangka panjang (30 hari).

Di samping itu, strategi ini menggabungkan garis purata bergerak 50 hari untuk mengelakkan perdagangan yang kerap, menggunakannya sebagai penapis untuk isyarat perdagangan.

Selain itu, penunjuk RSI mengenal pasti senario overbought (di atas 70) dan oversold (di bawah 30).

Akhirnya, histogram MACD digunakan untuk menentukan trend jangka menengah hingga panjang pasaran. Dengan histogram MACD > 0, latar belakang adalah trend menaik jadi isyarat beli lebih boleh dipercayai. Apabila histogram MACD < 0, latar belakang adalah downtrend jadi isyarat beli mungkin menghadapi pembetulan tidak lama lagi.

Kelebihan

Kelebihan terbesar strategi ini adalah penggunaan gabungan beberapa penunjuk, yang menjadikan setiap keputusan perdagangan sangat yakin dan boleh dipercayai. Isyarat palsu boleh berlaku kepada penunjuk individu dengan kerap, sementara strategi ini meningkatkan ketepatan dengan mengesahkan isyarat dari segi trend jangka pendek, trend jangka panjang, status overbought / oversold, trend pertengahan, dll.

Satu lagi kelebihan adalah bahawa ia menggabungkan perdagangan trend dan perdagangan pembalikan purata. Mengikuti trend adalah penting bagi peniaga trend, tetapi strategi maju tidak akan kaku mengenainya.

Risiko

Risiko utama berasal dari kejutan harga tiba-tiba disebabkan oleh peristiwa berita yang penting, yang boleh menembusi titik stop loss dan menimbulkan kerugian besar.

Satu lagi risiko adalah dihentikan semasa penurunan sementara dalam pasaran lembu jangka menengah hingga panjang. Strategi mungkin gagal menangkap potensi menaik sepenuhnya jika dihentikan lebih awal.

Peningkatan

Strategi ini boleh dioptimumkan dalam dimensi berikut:

  1. Pengoptimuman parameter untuk mencari kombinasi optimum.

  2. Masukkan lebih banyak penunjuk seperti Bollinger Bands dan KDJ untuk memperkaya model.

  3. Uji mekanisme stop loss yang lebih maju seperti trailing stop loss dan volatility stop loss.

  4. Mengoptimumkan bahagian strategi untuk menyesuaikan diri dengan lebih banyak jenis pasaran.

Kesimpulan

Kesimpulannya, dengan menggabungkan purata bergerak, RSI dan MACD, strategi ini dapat menghasilkan isyarat berkualiti tinggi dan mengelakkan batasan penunjuk tunggal. Ia membuat setiap perdagangan dengan yakin dengan mengesahkan trend. Juga, strategi ini menyeimbangkan perdagangan trend dan perdagangan bertentangan, cemerlang dalam mengejar momentum dan mengambil kedudukan anti-siklik apabila sesuai. Ia adalah strategi kuantitatif yang kukuh dan cekap secara keseluruhan.


/*backtest
start: 2023-02-13 00:00:00
end: 2024-02-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('sachin 3.30 ', overlay=true)

// Input parameters
length = input.int(14, title='RSI Length', minval=1)
overbought = input.int(70, title='RSI Overbought Level', minval=0, maxval=100)
oversold = input.int(30, title='RSI Oversold Level', minval=0, maxval=100)
ema3_length = input(3, title='EMA 3 Length')
ema30_length = input(30, title='EMA 30 Length')
ema50_length = input(50, title='EMA 50 Length')

// Calculate EMAs
ema3 = ta.ema(close, ema3_length)
ema30 = ta.ema(close, ema30_length)
ema50 = ta.ema(close, ema50_length)

// Calculate RSI
rsiValue = ta.rsi(close, length)

// Calculate MACD
[macdLine, signalLine, hist] = ta.macd(close, 12, 26, 9)

var float buyPrice = na

// Buy condition: EMA 3 crosses above EMA 30 and price is above EMA 50
buyCondition = ta.crossover(ema3, ema30) and close > ema50
if (buyCondition)
    buyPrice := close
    strategy.entry('Buy', strategy.long)

// Exit long position when close is below EMA30 and below the low of the previous 3 candles after the buy entry
exitLongCondition = close < ema30 and close < ta.lowest(low, 3) and close < buyPrice
if (exitLongCondition)
    strategy.close('BuyExit')

// Sell condition: EMA 3 crosses below EMA 30 and price is below EMA 50
sellCondition = ta.crossunder(ema3, ema30) and close < ema50
if (sellCondition)
    strategy.entry('Sell', strategy.short)

// Exit short position when close is above EMA30 and above the high of the previous 3 candles after the sell entry
exitShortCondition = close > ema30 and close > ta.highest(high, 3)
if (exitShortCondition)
    strategy.close('SellExit')

// Plot EMAs on the chart
plot(ema3, color=color.new(color.blue, 0), title='EMA 3')
plot(ema30, color=color.new(color.red, 0), title='EMA 30')

// Change color of EMA 50 based on MACD histogram
ema50Color = hist > 0 ? color.new(color.blue, 0) : hist < 0 ? color.new(color.black, 0) : color.new(color.blue, 0)
plot(ema50, color=ema50Color, title='EMA 50 Colored')

// Change color of EMA 30 based on RSI trend
ema30Color = rsiValue > oversold ? color.new(color.green, 0) : rsiValue < overbought ? color.new(color.red, 0) : color.new(color.blue, 0)
plot(ema30, color=ema30Color, title='EMA 30 Colored')

// Highlight Buy and Sell signals on the chart
bgcolor(buyCondition ? color.new(color.green, 90) : na)
bgcolor(sellCondition ? color.new(color.red, 90) : na)

// Plotting Buy and Sell Signals on the Chart until strategy exit
barcolor(strategy.position_size > 0 and rsiValue > overbought ? color.new(color.yellow, 0) : strategy.position_size < 0 and rsiValue < oversold ? color.new(color.black, 0) : na)


Lebih lanjut