Strategi RSI yang dikombinasikan dengan moving average dan MACD

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

img

Gambaran umum

Strategi ini mengidentifikasi tren harga dan membuat keputusan membeli rendah menjual tinggi dengan menggabungkan rata-rata bergerak, indikator MACD dan indikator RSI. Ini menghasilkan sinyal beli ketika rata-rata bergerak periode pendek melintasi di atas rata-rata bergerak periode panjang dan harga dekat di atas rata-rata bergerak 50 hari. Ini menghasilkan sinyal jual ketika sebaliknya terjadi. Selain itu, strategi menggunakan indikator RSI untuk menghindari zona overbought dan oversold, dan histogram MACD untuk menentukan tren jangka menengah hingga panjang.

Logika Strategi

Inti dari strategi ini bergantung pada sistem crossover rata-rata bergerak ganda, yang menghasilkan sinyal beli dan jual ketika EMA jangka pendek (3 hari) melintasi EMA jangka panjang (30 hari).

Selain itu, strategi ini menggabungkan garis rata-rata bergerak 50 hari untuk menghindari perdagangan yang sering, menggunakannya sebagai filter untuk sinyal perdagangan.

Selain itu, indikator RSI mengidentifikasi skenario overbought (di atas 70) dan oversold (di bawah 30).

Akhirnya, histogram MACD digunakan untuk menentukan tren jangka menengah hingga panjang pasar. Dengan histogram MACD > 0, latar belakang adalah tren naik sehingga sinyal beli lebih dapat diandalkan. Ketika histogram MACD < 0, latar belakang adalah tren turun sehingga sinyal beli dapat menghadapi koreksi segera.

Keuntungan

Keuntungan terbesar dari strategi ini adalah penggunaan gabungan dari beberapa indikator, yang membuat setiap keputusan perdagangan sangat percaya diri dan dapat diandalkan. sinyal palsu dapat terjadi pada indikator individu cukup sering, sementara strategi ini meningkatkan akurasi dengan mengkonfirmasi sinyal dalam hal tren jangka pendek, tren jangka panjang, status overbought / oversold, tren perantara, dll.

Keuntungan lain adalah bahwa itu menggabungkan perdagangan tren dan perdagangan reversi rata-rata. Mengikuti tren sangat penting bagi pedagang tren, tetapi strategi canggih tidak akan kaku tentang hal itu. Mengambil posisi yang bertentangan di zona rasional juga dapat menyebabkan keuntungan keuntungan yang berlebihan.

Risiko

Risiko utama berasal dari kejutan harga tiba-tiba karena peristiwa berita yang signifikan, yang dapat menembus titik stop loss dan menimbulkan kerugian besar.

Risiko lain adalah dihentikan selama penarikan sementara di pasar bull jangka menengah hingga panjang. Strategi mungkin gagal menangkap potensi kenaikan penuh jika dihentikan lebih awal.

Peningkatan

Strategi dapat dioptimalkan dalam dimensi berikut:

  1. Optimasi parameter untuk menemukan kombinasi optimal.

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

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

  4. Mengoptimalkan bagian dari strategi untuk beradaptasi dengan lebih banyak jenis pasar.

Kesimpulan

Sebagai kesimpulan, dengan menggabungkan rata-rata bergerak, RSI dan MACD, strategi ini berhasil menghasilkan sinyal berkualitas tinggi dan menghindari keterbatasan indikator tunggal. Ini membuat setiap perdagangan dengan percaya diri dengan mengkonfirmasi tren. Juga, strategi menyeimbangkan perdagangan tren dan perdagangan kontrarian, unggul dalam mengejar momentum dan mengambil posisi anti-siklis bila sesuai. Ini adalah strategi kuantitatif yang solid dan efisien 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 banyak