Strategi purata bergerak RSI MACD yang lebih baik

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

img

Ringkasan

Ini adalah strategi gabungan yang menggunakan RSI, MACD dan Purata Bergerak. Ia menggabungkan isyarat overbought / oversold dari RSI, kepekaan MACD dan kesan penunjuk purata bergerak ketika menentukan titik masuk.

Logika Strategi

Strategi ini terutamanya menilai empat syarat berikut untuk memutuskan kemasukan panjang:

  1. histogram MACD lebih besar daripada tahap masuk panjang yang ditetapkan;
  2. RSI melebihi 50, menunjukkan keadaan overbought;
  3. EMA jangka pendek melintasi EMA jangka panjang, membentuk salib emas;
  4. Harga penutupan memecahkan EMA jangka panjang dan lebih tinggi daripada EMA jangka panjang ditambah julat stop loss ATR.

Apabila kedua-dua syarat keluar berikut dipenuhi, strategi akan menutup kedudukan untuk menghentikan kerugian:

  1. histogram MACD adalah lebih rendah daripada tahap stop loss yang ditetapkan;
  2. EMA jangka pendek melintasi di bawah EMA jangka panjang, membentuk persilangan mati.

Oleh itu strategi tepat pada masanya menghentikan kerugian dan mengelakkan kerugian besar apabila mengambil keuntungan atau retracement.

Analisis Kelebihan

Kelebihan terbesar strategi ini terletak pada penggunaan gabungan penunjuk, memberikan sepenuhnya kelebihan setiap penunjuk:

  1. Penggunaan RSI mengelakkan kerugian bayaran urus niaga yang disebabkan oleh pembukaan kedudukan berulang kali di pasaran terhad julat.

  2. Sensitiviti penunjuk histogram MACD memastikan penangkapan tepat pada masanya titik perubahan.

  3. Purata bergerak menapis bunyi pasaran jangka pendek dan memberikan permainan penuh kepada kesan penunjuk.

Risiko & Penyelesaian

Risiko utama strategi ini termasuk:

  1. Risiko retracement yang tinggi. Risiko terbesar dari purata bergerak seperti strategi trend berikut adalah pullback besar yang disebabkan oleh pembalikan trend. Ini boleh dikawal secara aktif dengan menggunakan saiz kedudukan, stop loss dan lain-lain.

  2. Kesukaran dalam pengoptimuman parameter. Strategi gabungan pelbagai penunjuk mempunyai kesukaran yang lebih tinggi dalam penetapan parameter dan pengoptimuman. Kaedah seperti berjalan ke hadapan, algoritma genetik boleh diterima pakai untuk parameter yang dioptimumkan.

Arahan Peningkatan

Strategi ini boleh dioptimumkan lagi dalam aspek berikut:

  1. Menambah penapis tambahan untuk mengelakkan isyarat palsu, contohnya menggabungkan dengan jumlah, penunjuk turun naik dan lain-lain.

  2. Perbezaan parameter ujian yang sesuai dengan lebih banyak produk. Sesuaikan parameter untuk menyesuaikan lebih banyak jenis.

  3. Mengoptimumkan tetapan parameter purata bergerak. Uji perbezaan pelbagai parameter panjang.

  4. Penyelidikan purata bergerak adaptif, menukar set parameter yang berbeza berdasarkan rejimen pasaran.

Kesimpulan

Kesimpulannya, strategi ini adalah versi yang dioptimumkan khas dari purata bergerak dan strategi trend berikut. Ia menyerap kekuatan penunjuk arus perdana seperti MACD dan RSI dalam aspek kemasukan masa dan menghentikan kerugian. Langkah seterusnya boleh meningkatkan dari perspektif seperti pengoptimuman parameter dan kawalan risiko untuk menjadikan strategi lebih kukuh dan dapat disesuaikan dengan lebih banyak produk, sehingga menghasilkan kestabilan 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 lanjut