Strategi pembalikan mengikut arah aliran berdasarkan MACD dan RSI


Tarikh penciptaan: 2023-12-18 17:53:38 Akhirnya diubah suai: 2023-12-18 17:53:38
Salin: 0 Bilangan klik: 660
1
fokus pada
1621
Pengikut

Strategi pembalikan mengikut arah aliran berdasarkan MACD dan RSI

Gambaran keseluruhan

Strategi ini menggabungkan tiga indikator MACD, EMA, dan RSI untuk mengesan trend dan menukar perdagangan. Ia menghasilkan isyarat beli apabila MACD melintasi garis isyarat ke atas dan harga penutupan berada di atas garis rata-rata EMA; ia menghasilkan isyarat jual apabila MACD jatuh ke bawah dan harga penutupan berada di bawah garis rata-rata EMA, untuk menangkap trend; dan ia melakukan perdagangan berbalik apabila RSI mencapai kawasan jual beli yang lebih tinggi.

Prinsip Strategi

  1. Hitung MACDdiffs dan EMA.
   fastMA = ema(close, fast)  
   slowMA = ema(close, slow)
   macd = fastMA - slowMA
   signal = sma(macd, 9)
   ema = ema(close, input(200))
  1. Menjana isyarat beli: MACD selisih ((macd-signal) melalui 0 dan harga penutupan lebih tinggi daripada garis rata-rata EMA.
   delta = macd - signal 
   buy_entry= close>ema and delta > 0
  1. Menjana isyarat jual: MACD pecah di bawah 0 dan harga penutupan di bawah garis purata EMA
   sell_entry = close<ema and delta<0 
  1. Apabila RSI memasuki zon overbought dan oversold, lakukan perdagangan berbalik.
   if (rsi > 70 or rsi < 30)
       reversal := true

Analisis kelebihan

  1. Gabungan trend-following dan reversal trading membolehkan anda untuk menjejaki trend utama dan mendapat keuntungan pada titik-titik reversal.
  2. Menggunakan MACD untuk menentukan arah trend utama dan mengelakkan penembusan palsu.
  3. EMA menapis sebahagian daripada bunyi tersebut.
  4. Indeks RSI menilai titik pembalikan, meningkatkan ruang untuk keuntungan strategi.

Analisis risiko

  1. Dalam pasaran trend besar, perdagangan terbalik boleh menyebabkan kerugian.
  2. Parameter yang tidak betul akan meningkatkan frekuensi transaksi dan kos slippage.
  3. Isyarat pembalikan boleh menyebabkan kelewatan dan kehilangan masa masuk yang terbaik.

Penyelesaian:

  1. Mengoptimumkan parameter, mencari kombinasi parameter yang terbaik.
  2. Menyesuaikan nilai terhad RSI untuk perdagangan berbalik.
  3. Pertimbangkan untuk memasukkan Stop Loss untuk mengawal kerugian.

Arah pengoptimuman

  1. Uji parameter garis purata EMA untuk pelbagai panjang.
  2. Mengoptimumkan parameter MACD untuk mencari kombinasi parameter terbaik.
  3. Uji nilai RSI berbalik yang berbeza.
  4. Pertimbangkan untuk menggabungkan kombinasi dengan penunjuk lain.

ringkaskan

Strategi ini menggunakan indikator MACD, EMA dan RSI secara komprehensif, mewujudkan kombinasi organik untuk mengesan trend dan membalikkan perdagangan. MACD menentukan arah trend utama, EMA mematikan bunyi gelombang, dan RSI menangkap titik pembalikan. Kombinasi pelbagai indikator ini dapat menilai pergerakan pasaran dengan lebih tepat, meningkatkan peluang keuntungan sambil mengurangkan perdagangan yang salah.

Kod sumber strategi
/*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