Strategi RSI MACD Moving Average yang Ditingkatkan

Penulis:ChaoZhang, Tanggal: 2024-01-05 16:11:23
Tag:

img

Gambaran umum

Ini adalah strategi kombinasi yang menggunakan RSI, MACD dan Moving Averages. Ini menggabungkan sinyal overbought / oversold dari RSI, sensitivitas MACD dan efek indikator rata-rata bergerak saat menentukan titik masuk.

Logika Strategi

Strategi ini terutama menilai empat kondisi berikut untuk memutuskan masuk panjang:

  1. histogram MACD lebih besar dari tingkat entri panjang yang ditetapkan;
  2. RSI di atas 50, menunjukkan keadaan overbought;
  3. EMA jangka pendek melintasi EMA jangka panjang, membentuk salib emas;
  4. Harga penutupan melewati EMA jangka panjang dan lebih tinggi dari EMA jangka panjang ditambah rentang stop loss ATR.

Ketika dua kondisi keluar berikut terpenuhi, strategi akan menutup posisi untuk menghentikan kerugian:

  1. histogram MACD kurang dari level stop loss yang ditetapkan;
  2. EMA jangka pendek melintasi di bawah EMA jangka panjang, membentuk silang mati.

Dengan demikian strategi tepat waktu menghentikan kerugian dan menghindari kerugian besar ketika mengambil keuntungan atau retracement.

Analisis Keuntungan

Keuntungan terbesar dari strategi ini terletak pada kombinasi penggunaan indikator, memberikan manfaat penuh dari masing-masing indikator:

  1. Penggunaan RSI menghindari kerugian biaya transaksi yang disebabkan oleh berulang kali membuka posisi di pasar yang terikat rentang.

  2. Sensitivitas indikator histogram MACD memastikan penangkapan tepat waktu titik infleksi.

  3. Rata-rata bergerak menyaring kebisingan pasar jangka pendek dan memberikan permainan penuh untuk efek indikator.

Risiko & Solusi

Risiko utama dari strategi ini meliputi:

  1. Risiko retracement yang tinggi. Risiko terbesar dari moving average seperti strategi trend following adalah pullback besar yang disebabkan oleh pembalikan trend. Hal ini dapat dikendalikan secara aktif melalui ukuran posisi, stop loss dll.

  2. Kesulitan dalam optimasi parameter. Strategi gabungan multi-indikator memiliki kesulitan yang lebih tinggi dalam pengaturan parameter dan optimasi. Metode seperti berjalan maju, algoritma genetik dapat diadopsi untuk parameter yang dioptimalkan.

Orientasi Peningkatan

Strategi ini dapat dioptimalkan lebih lanjut dalam aspek berikut:

  1. Meningkatkan filter tambahan untuk menghindari sinyal palsu, misalnya menggabungkan dengan indikator volume, volatilitas dll.

  2. Perbedaan parameter uji yang cocok dengan lebih banyak produk.

  3. Mengoptimalkan pengaturan parameter rata-rata bergerak. Uji perbedaan dari berbagai parameter panjang.

  4. Cari rata-rata bergerak adaptif, ganti set parameter yang berbeda berdasarkan rezim pasar.

Kesimpulan

Sebagai kesimpulan, strategi ini adalah versi yang dioptimalkan dari moving average dan trend following strategy. Strategi ini menyerap kekuatan dari indikator arus utama seperti MACD dan RSI dalam aspek waktu masuk dan stop loss. Langkah selanjutnya bisa meningkatkan dari perspektif seperti optimasi parameter dan pengendalian risiko untuk membuat strategi lebih kuat dan dapat beradaptasi dengan lebih banyak produk, sehingga menghasilkan stabilitas yang lebih tinggi.


/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Improved RSI MACD Strategy with Moving Averages", overlay=true)

// Inputs
src = input(close, title="RSI Source")

// RSI Settings
lengthRSI = input.int(14, minval=1)

// Stop Loss Settings
stopLossPct = input.float(0.09, title="Stop Loss Percentage")
takeProfitPct = input.float(0.15, title="Take Profit Percentage")

// MACD Settings
fastlen = input(12)
slowlen = input(26)
siglen = input(9)

// Strategy Settings
longEntry = input(0, title="Long Entry Level")
exitLevel = input(0, title="Exit Level")

// EMA Settings
emaShortLength = input(8, title="Short EMA Length")
emaLongLength = input(21, title="Long EMA Length")

atrMultiplier = input.float(2, title="atrMultiplier")
atrLength = input.int(20, title="atrLength")

// Indicators
rsi1 = ta.rsi(src, lengthRSI)
[macd, signal, hist] = ta.macd(src, fastlen, slowlen, siglen)

// Calculate EMAs
emaShort = ta.ema(src, emaShortLength)
emaLong = ta.ema(src, emaLongLength)

// Calculate ATR
atr = ta.atr(atrLength)

// Variables
var bool canEnterLong = na

// Strategy conditions
longCondition = hist > longEntry and rsi1 > 50 and emaShort > emaLong and close > emaLong + atrMultiplier * atr

// Entries and Exits
if hist < exitLevel and emaShort < emaLong
    canEnterLong := true
    strategy.close("Long")
    
// Store last entry price
var lastEntryPrice = float(na)
var lastEntryPrice2 = float(na)
if longCondition
    strategy.entry("Long", strategy.long)
    canEnterLong := false
    lastEntryPrice := close
if lastEntryPrice < close
    lastEntryPrice := close
// Calculate Stop Loss and Take Profit Levels based on last entry price
stopLossLevel = lastEntryPrice * (1 - stopLossPct)

// Check for stop loss and take profit levels and close position if triggered
if (strategy.position_size > 0)
    last_buy = strategy.opentrades[0]
    if (close < stopLossLevel)
        strategy.close("Long", comment="Stop Loss Triggered")
    if (close * (1 - takeProfitPct) > strategy.opentrades.entry_price(strategy.opentrades - 1) )
        strategy.close("Long", comment="Take Profit Triggered")

Lebih banyak