Trend berasaskan MACD dan RSI Berikutan Strategi Pembalikan

Penulis:ChaoZhang, Tarikh: 2023-12-18 17:53:38
Tag:

img

Ringkasan

Strategi ini menggabungkan penunjuk MACD, EMA dan RSI untuk melaksanakan perdagangan trend berikut dan pembalikan. Ia menghasilkan isyarat beli apabila MACD naik melalui garis isyarat dan harga penutupan di atas EMA; dan isyarat jual apabila MACD jatuh di bawah garis isyarat dan harga penutupan di bawah EMA untuk menangkap trend. Sementara itu, ia berdagang pembalikan apabila RSI mencapai tahap overbought atau oversold.

Logika Strategi

  1. Mengira perbezaan MACD dan EMA.

    fastMA = ema(close, fast)
    slowMA = ema(close, slow) 
    macd = fastMA - slowMA
    signal = sma(macd, 9)
    ema = ema(close, input(200))
    
  2. Menghasilkan isyarat beli: MACD diff (macd - isyarat) berada di atas 0 dan harga penutupan berada di atas EMA.

    delta = macd - signal
    buy_entry= close>ema and delta > 0 
    
  3. Menghasilkan isyarat jual: Diff MACD turun di bawah 0 dan harga penutupan di bawah EMA.

    sell_entry = close<ema and delta<0
    
  4. Pembalikan perdagangan apabila RSI mencapai tahap overbought atau oversold.

    if (rsi > 70 or rsi < 30)
        reversal := true
    

Analisis Kelebihan

  1. Gabungkan perdagangan mengikut trend dan pembalikan untuk mendapat keuntungan dari kedua-dua trend dan pembalikan.
  2. Gunakan MACD untuk menilai arah trend dan mengelakkan pecah palsu.
  3. Menapis bunyi dengan EMA.
  4. Meningkatkan keuntungan dengan RSI untuk perdagangan pembalikan.

Analisis Risiko

  1. Perdagangan pembalikan boleh menimbulkan kerugian dalam pasaran yang kuat.
  2. Penyesuaian parameter yang tidak betul boleh meningkatkan kekerapan perdagangan dan kos slippage.
  3. Isyarat pembalikan mungkin mempunyai sedikit kelewatan, kehilangan harga kemasukan terbaik.

Penyelesaian:

  1. Mengoptimumkan parameter untuk mencari kombinasi terbaik.
  2. Sesuaikan ambang RSI pembalikan dengan betul.
  3. Pertimbangkan untuk menambah stop loss kepada loss kawalan.

Arahan pengoptimuman

  1. Uji panjang EMA.
  2. Mengoptimumkan parameter MACD.
  3. Uji ambang pembalikan RSI yang berbeza.
  4. Pertimbangkan untuk menggabungkan dengan penunjuk lain.

Ringkasan

Strategi ini menggabungkan MACD, EMA dan RSI untuk melaksanakan perdagangan trend berikut dan pembalikan secara organik. MACD menilai arah trend, EMA menapis bunyi bising, dan RSI menangkap titik pembalikan. Gabungan pelbagai penunjuk sedemikian dapat menentukan pergerakan pasaran dengan lebih baik, meningkatkan keuntungan sambil mengurangkan isyarat palsu. Pengoptimuman parameter dan pengurusan stop loss dapat ditingkatkan lagi untuk mengurangkan kerugian yang tidak perlu. Secara keseluruhan, ini adalah rangka kerja strategi yang kukuh dengan potensi keuntungan yang stabil.


/*backtest
start: 2023-11-17 00:00:00
end: 2023-12-17 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mbuthiacharles4

//Good with trending markets
//@version=4
strategy("CHARL MACD EMA RSI")

fast = 12, slow = 26
fastMA = ema(close, fast)
slowMA = ema(close, slow)
macd = fastMA - slowMA
signal = sma(macd, 9)

ema = ema(close, input(200))

rsi = rsi(close, input(14))
//when delta > 0  and close above ema buy

delta = macd - signal

buy_entry= close>ema and delta > 0
sell_entry = close<ema and delta<0 
var bought = false
var sold = false
var reversal = false
if (buy_entry and bought == false and rsi <= 70) 
    strategy.entry("Buy",true , when=buy_entry)
    bought := true
    
strategy.close("Buy",when= delta<0 or rsi > 70)
if (delta<0 and bought==true)
    bought := false

//handle sells

if (sell_entry and sold == false and rsi >= 30)
    strategy.entry("Sell",false , when=sell_entry)
    sold := true

strategy.close("Sell",when= delta>0 or rsi < 30)
if (delta>0 and sold==true)
    sold := false
    
if (rsi > 70 or rsi < 30)
    reversal := true
    placing = rsi > 70 ? high :low
    label.new(bar_index, placing, style=label.style_flag, color=color.blue, size=size.tiny)
if (reversal == true)
    if (rsi < 70 and sold == false and delta < 0)
        strategy.entry("Sell",false , when= delta < 0)
        sold := true
        reversal := false
    else if (rsi > 30 and bought == false and delta > 0)
        strategy.entry("Buy",true , when= delta > 0)
        bought := true
        reversal := false



Lebih lanjut