RSI dan Moving Average Breakout Strategy

Penulis:ChaoZhang, Tanggal: 2024-01-24 14:31:01
Tag:

img

Gambaran umum

RSI dan Moving Average Breakout Strategy adalah strategi kuantitatif yang memanfaatkan indikator RSI dan garis rata-rata bergerak untuk menentukan peluang perdagangan.

Logika Strategi

  1. Menghitung indikator RSI dan garis Rata-rata Gerak Sederhana berdasarkan parameter yang ditentukan pengguna.

  2. Ketika RSI melintasi di atas garis oversold (default 30), sinyal panjang dihasilkan jika harga berada di bawah LONG exit Moving Average.

  3. Ketika RSI melintasi di bawah garis overbought (default 70), sinyal short dihasilkan jika harga berada di atas Moving Average keluar SHORT.

  4. Pengguna dapat memilih untuk menyaring sinyal berdasarkan garis trend Moving Average.

  5. Keluar ditentukan oleh garis LONG dan SHORT exit Moving Average.

Analisis Keuntungan

  1. Desain indikator ganda meningkatkan akurasi dengan memasukkan dua faktor pasar utama.

  2. Menggunakan karakteristik rata-rata-reversi dari RSI secara efektif untuk menemukan titik balik.

  3. Filter tambahan dengan Moving Averages meningkatkan ketelitian logika untuk menghindari mengejar atas dan bawah.

  4. Parameter yang dapat disesuaikan memungkinkan optimasi di berbagai produk dan kerangka waktu.

  5. Logika sederhana membuatnya mudah dimengerti dan dimodifikasi.

Analisis Risiko

  1. Whipsaws umum dengan RSI, Density indicator bisa membantu.

  2. RSI cenderung gagal pada kerangka waktu yang lebih besar, parameter dapat disesuaikan atau indikator tambahan dapat membantu.

  3. Moving Averages memiliki efek keterlambatan, panjang bisa diperpendek atau indikator seperti MACD dapat membantu.

  4. Lebih banyak indikator harus diperkenalkan untuk memvalidasi sinyal karena logika dasar.

Arahan Optimasi

  1. Mengoptimalkan parameter RSI atau memperkenalkan indikator Densitas untuk mengurangi sinyal palsu.

  2. Menggabungkan indikator tren dan volatilitas seperti DMI dan BOLL untuk menemukan tren dan dukungan.

  3. Memperkenalkan MACD untuk menggantikan atau melengkapi penilaian Moving Average.

  4. Tambahkan lebih banyak kondisi logis pada sinyal masuk untuk menghindari breakout yang tidak menguntungkan.

Kesimpulan

Strategi RSI dan Moving Average Breakout menggabungkan deteksi overbought-oversold RSI dan penentuan tren Moving Averages untuk memanfaatkan peluang pembalikan rata-rata secara teoritis. Strategi ini intuitif dan mudah digunakan untuk pemula, dan dapat dioptimalkan di berbagai produk, menjadikannya strategi kuantitatif pemula yang disarankan. Lebih banyak indikator tambahan dapat diperkenalkan untuk lebih memvalidasi sinyal dan meningkatkan profitabilitas.


/*backtest
start: 2024-01-16 00:00:00
end: 2024-01-23 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Global Market Signals: RSI Strategy.
//@version=4
strategy("GMS: RSI Strategy", overlay=true)

LongShort = input(title="Long Only or Short Only or Both?", type=input.string, defval="Both", options=["Both", "Long Only", "Short Only"])
RSILength = input(title="RSI Length", type = input.integer ,defval=14)
RSIUpper = input(title="Upper Threshold", type = input.float ,defval=70)
RSILower = input(title="Lower Threshold", type = input.float ,defval=30)
LongExit = input(title="Long Exit SMA Length", type = input.integer ,defval=5)
ShortExit = input(title="Short Exit SMA Length", type = input.integer ,defval=5)
AboveBelow = input(title="Trend SMA Filter?", type=input.string, defval="Above", options=["Above", "Below", "Don't Include"])
TrendLength = input(title="Trend SMA Length", type = input.integer ,defval=200)


//Long Side

if LongShort =="Long Only" and AboveBelow == "Above"
    strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit) and close>sma(close,TrendLength))
    strategy.close("LONG", when = close>sma(close,LongExit))
    
if LongShort =="Long Only" and AboveBelow == "Below"
    strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit) and close<sma(close,TrendLength))
    strategy.close("LONG", when = close>sma(close,LongExit))
    
if LongShort =="Long Only" and AboveBelow == "Don't Include"
    strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit))
    strategy.close("LONG", when = close>sma(close,LongExit))
    
if LongShort =="Both" and AboveBelow == "Above"
    strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit) and close>sma(close,TrendLength))
    strategy.close("LONG", when = close>sma(close,LongExit))
    
if LongShort =="Both" and AboveBelow == "Below"
    strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit) and close<sma(close,TrendLength))
    strategy.close("LONG", when = close>sma(close,LongExit))
    
if LongShort =="Both" and AboveBelow == "Don't Include"
    strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit))
    strategy.close("LONG", when = close>sma(close,LongExit))
    
    
//SHORT SIDE

if LongShort =="Short Only" and AboveBelow == "Above"
    strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit) and close>sma(close,TrendLength))
    strategy.close("SHORT", when = close<sma(close,ShortExit))
    
if LongShort =="Short Only" and AboveBelow == "Below"
    strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit) and close<sma(close,TrendLength))
    strategy.close("SHORT", when = close<sma(close,ShortExit))
    
if LongShort =="Short Only" and AboveBelow == "Don't Include"
    strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit))
    strategy.close("SHORT", when = close<sma(close,ShortExit))
    
if LongShort =="Both" and AboveBelow == "Above"
    strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit) and close>sma(close,TrendLength))
    strategy.close("SHORT", when = close<sma(close,ShortExit))
    
if LongShort =="Both" and AboveBelow == "Below"
    strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit) and close<sma(close,TrendLength))
    strategy.close("SHORT", when = close<sma(close,ShortExit))
    
if LongShort =="Both" and AboveBelow == "Don't Include"
    strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit))
    strategy.close("SHORT", when = close<sma(close,ShortExit))
    
    
    
    
    
    
   





Lebih banyak