
Madrid Ribbon RSI Enhanced Multi-Time Frame EMA Trend Strategy adalah sistem perdagangan kuantitatif yang komprehensif yang secara cerdik menggabungkan sistem pita rata-rata bergerak (Madrid Ribbon) dengan filter indikator relatif kuat (RSI) untuk memberikan mekanisme konfirmasi ganda untuk identifikasi tren dan pelaksanaan perdagangan. Inti dari strategi ini adalah struktur pita yang terbentuk melalui pemantauan rata-rata pergerakan indeks (EMA) yang berbeda dalam beberapa periode (dari 5 hingga 90), sambil memperkenalkan indikator RSI sebagai kondisi penyaringan, yang secara efektif mengurangi sinyal palsu.
Prinsip inti dari strategi ini didasarkan pada analisis cluster moving average multi-frame dan penyaringan indikator RSI:
Multi-frame moving average sistem pitaStrategi ini membangun 18 rata-rata bergerak dari 5 hingga 90 periode dan membandingkannya dengan garis dasar dari 100 periode. Setiap rata-rata bergerak diberi label warna berdasarkan arah pergeseran dan posisi relatif terhadap garis dasar:
Kuantitas intensitas trenStrategi: Mengukur kekuatan tren dengan menghitung jumlah rata-rata bergerak hijau (naik) dan merah (turun):
Mekanisme penyaringan RSIUntuk mengurangi sinyal palsu, strategi untuk memasukkan RSI sebagai kondisi penyaringan:
Mekanisme manajemen risiko: Strategi mengatur parameter stop loss berdasarkan persentase:
Manajemen danaStrategi: memungkinkan pengguna untuk mengatur jumlah modal awal dan secara otomatis menghitung ukuran posisi berdasarkan harga saat ini.
Mekanisme multiple confirmationStrategi ini memberikan mekanisme multiple confirmation yang secara signifikan mengurangi kemungkinan sinyal yang salah. Keandalan sinyal meningkat secara signifikan ketika cluster moving average dan RSI memenuhi persyaratan secara bersamaan.
Kuantitas intensitas trenBerbeda dengan strategi crossover sederhana, strategi ini mengkuantifikasi kekuatan tren dengan menghitung jumlah rata-rata bergerak warna yang berbeda, membuat keputusan perdagangan lebih objektif dan didorong oleh data.
Sinyal perdagangan visualStrategi: Menampilkan sinyal dengan jelas pada grafik dengan perubahan warna latar belakang dan penanda bentuk, sehingga pedagang dapat secara intuitif mengidentifikasi peluang perdagangan potensial.
Manajemen risiko internalStrategi ini secara default terintegrasi dengan mekanisme stop loss, dengan keuntungan dan kerugian maksimum yang jelas untuk setiap perdagangan, dan pengendalian risiko yang efektif.
Sangat mudah beradaptasiStrategi memungkinkan pengguna untuk memilih menggunakan EMA atau SMA, yang dapat disesuaikan secara fleksibel sesuai dengan kondisi pasar yang berbeda. EMA lebih sensitif terhadap perubahan harga baru-baru ini, sedangkan SMA lebih halus, dengan pengaturan yang berbeda sesuai dengan kondisi pasar yang berbeda.
Pemantauan kondisi pasar secara menyeluruhDengan memantau 18 rata-rata bergerak dari periode yang berbeda, strategi ini dapat menangkap dinamika pasar secara menyeluruh, mengurangi titik buta yang mungkin disebabkan oleh analisis kerangka waktu tunggal.
Kecepatan PeningkatanKarena strategi bergantung pada beberapa moving average, reaksi yang terlambat dapat terjadi ketika tren berbalik dengan cepat, sehingga waktu masuk atau keluar tidak ideal. Untuk menghadapi risiko ini, pertimbangkan untuk menambahkan indikator dengan periode yang lebih pendek atau menyesuaikan parameter RSI untuk meningkatkan sensitivitas strategi terhadap perubahan pasar.
Kondisi penyaringan yang ketat menyebabkan peluang yang terlewatkanRSI memiliki kondisi filter yang lebih ketat (<30 dan >70), sehingga Anda mungkin akan melewatkan beberapa peluang perdagangan potensial. Anda dapat menyesuaikan RSI dengan kondisi pasar tertentu, misalnya dengan kondisi pembelian yang lebih longgar hingga RSI <40, dan kondisi penjualan yang lebih longgar hingga RSI >60.
Batas dari persentase stop loss tetapStrategi menggunakan setelan stop loss dengan persentase tetap (0,5% dan 1%), yang mungkin tidak cukup fleksibel di pasar dengan fluktuasi yang berbeda. Disarankan untuk menyesuaikan level stop loss berdasarkan dinamika rata-rata fluktuasi aktual aset (ATR).
Risiko pasar horizontalPada tahap penyusunan horizontal pasar, rata-rata bergerak dapat sering bercampur, menyebabkan sinyal berantakan. Ini dapat dihindari dengan menambahkan mekanisme deteksi horizontal tambahan (seperti indikator ADX) untuk menghindari overtrading dalam lingkungan yang rendah.
Parameter SensitivitasKinerja strategi sangat sensitif terhadap pilihan parameter (seperti siklus moving average dan panjang RSI), dan pilihan parameter yang tidak tepat dapat menyebabkan kinerja strategi yang buruk. Dianjurkan untuk melakukan optimasi dan pengujian parameter yang cukup sebelum digunakan secara langsung.
Mekanisme Stop Loss Dinamis: Mengganti pengaturan stop loss dengan persentase tetap dengan indikator ATR, dapat lebih beradaptasi dengan perubahan volatilitas pasar. Misalnya, stop loss dapat diatur menjadi 1,5*ATR, stop pada 1.*ATR, untuk membuat manajemen risiko lebih fleksibel dan beradaptasi dengan pasar.
Tambahkan filter intensitas trenIntroduksi indikator ADX untuk mengukur kekuatan tren, hanya berdagang dalam lingkungan tren kuat di ADX> 25 dan menghindari terlalu banyak sinyal palsu di pasar tren lemah atau horizontal.
Optimalkan parameter RSIStrategi saat ini menggunakan RSI 14 siklus standar, pertimbangkan untuk menyesuaikan siklus RSI sesuai dengan karakteristik aset dan kerangka waktu tertentu, atau menggunakan sistem RSI ganda (misalnya memeriksa RSI periode pendek dan periode panjang pada saat yang sama) untuk mengurangi sinyal palsu.
Pengumuman pengiriman: Menambahkan dimensi analisis volume transaksi, memastikan ada dukungan partisipasi pasar yang cukup saat sinyal terjadi, meningkatkan keandalan sinyal perdagangan. Misalnya, volume transaksi dapat diminta lebih tinggi dari rata-rata N hari saat sinyal beli muncul.
Menerapkan penyesuaian posisi dinamis: Mengubah ukuran posisi secara dinamis sesuai dengan kekuatan tren (jumlah rata-rata bergerak hijau atau merah), meningkatkan posisi pada tren yang lebih kuat, mengurangi posisi pada tren yang lebih lemah, mengoptimalkan efisiensi penggunaan dana.
Bergabung dengan Marketplace Filter: Mengindeks kondisi pasar saat ini melalui indikator volatilitas (seperti VIX atau ATR), menyesuaikan parameter strategi atau menghentikan perdagangan dalam lingkungan yang sangat berfluktuasi, mengurangi risiko dalam kondisi pasar yang ekstrem.
Strategi tren EMA multi-frame yang diperkuat dengan RSI Madrid adalah sistem perdagangan kuantitatif yang komprehensif, yang menyediakan para pedagang dengan alat identifikasi tren dan pelaksanaan perdagangan yang kuat dengan menggabungkan struktur pita rata-rata bergerak dan mekanisme penyaringan RSI. Keunggulan inti dari strategi ini adalah mekanisme konfirmasi ganda dan kemampuan untuk mengukur intensitas tren, yang membuat keputusan perdagangan lebih objektif dan didorong oleh data.
Meskipun strategi bekerja dengan baik di pasar tren, mereka mungkin menghadapi tantangan di pasar lateral dan di lingkungan yang berbalik dengan cepat. Strategi dapat ditingkatkan lebih lanjut dengan meningkatkan ketahanan dan adaptasi strategi dengan memperkenalkan langkah-langkah pengoptimalan seperti stop loss dinamis, penyaringan intensitas tren, dan konfirmasi volume transaksi.
Strategi ini sangat cocok untuk pedagang tren jangka menengah dan panjang, yang dapat mencari peluang perdagangan dengan probabilitas tinggi dalam berbagai jenis lingkungan pasar melalui penyesuaian parameter dan manajemen risiko yang masuk akal. Namun, strategi perdagangan apa pun perlu dicocokkan dengan preferensi risiko dan tujuan investasi pedagang.
/*backtest
start: 2024-03-24 00:00:00
end: 2025-03-23 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BNB_USDT"}]
*/
//@version=5
strategy("Madrid Ribbon Strategy with Backtesting", shorttitle="Madrid Ribbon Strat", overlay=true, default_qty_type=strategy.cash, default_qty_value=100000)
// Inputs
i_exp = input.bool(true, title="Use Exponential MA")
wallet_balance = input.float(100000, title="Starting Wallet Balance", minval=1000)
// RSI Settings
rsi_length = input.int(14, title="RSI Length")
rsi = ta.rsi(close, rsi_length)
// Profit Target & Stop Loss (%)
long_take_profit_perc = input.float(0.5, title="Long Take Profit (%)") / 100 // 0.5%
long_stop_loss_perc = input.float(1.0, title="Long Stop Loss (%)") / 100 // 1%
short_take_profit_perc = input.float(0.5, title="Short Take Profit (%)") / 100 // 0.5%
short_stop_loss_perc = input.float(1.0, title="Short Stop Loss (%)") / 100 // 1%
// Source
src = close
// Compute Moving Averages
ma05 = i_exp ? ta.ema(src, 5) : ta.sma(src, 5)
ma10 = i_exp ? ta.ema(src, 10) : ta.sma(src, 10)
ma15 = i_exp ? ta.ema(src, 15) : ta.sma(src, 15)
ma20 = i_exp ? ta.ema(src, 20) : ta.sma(src, 20)
ma25 = i_exp ? ta.ema(src, 25) : ta.sma(src, 25)
ma30 = i_exp ? ta.ema(src, 30) : ta.sma(src, 30)
ma35 = i_exp ? ta.ema(src, 35) : ta.sma(src, 35)
ma40 = i_exp ? ta.ema(src, 40) : ta.sma(src, 40)
ma45 = i_exp ? ta.ema(src, 45) : ta.sma(src, 45)
ma50 = i_exp ? ta.ema(src, 50) : ta.sma(src, 50)
ma55 = i_exp ? ta.ema(src, 55) : ta.sma(src, 55)
ma60 = i_exp ? ta.ema(src, 60) : ta.sma(src, 60)
ma65 = i_exp ? ta.ema(src, 65) : ta.sma(src, 65)
ma70 = i_exp ? ta.ema(src, 70) : ta.sma(src, 70)
ma75 = i_exp ? ta.ema(src, 75) : ta.sma(src, 75)
ma80 = i_exp ? ta.ema(src, 80) : ta.sma(src, 80)
ma85 = i_exp ? ta.ema(src, 85) : ta.sma(src, 85)
ma90 = i_exp ? ta.ema(src, 90) : ta.sma(src, 90)
ma100 = i_exp ? ta.ema(src, 100) : ta.sma(src, 100)
// Function for ribbon color
maColor(_ma, _maRef) =>
diffMA = ta.change(_ma)
resultColor = diffMA >= 0 and _ma > _maRef ? color.lime :
diffMA < 0 and _ma > _maRef ? color.maroon :
diffMA <= 0 and _ma < _maRef ? color.red :
diffMA >= 0 and _ma < _maRef ? color.green : color.gray
resultColor
// Count Green and Red Ribbons
count_green = 0
count_red = 0
mas = array.new_float(18)
array.set(mas, 0, ma05)
array.set(mas, 1, ma10)
array.set(mas, 2, ma15)
array.set(mas, 3, ma20)
array.set(mas, 4, ma25)
array.set(mas, 5, ma30)
array.set(mas, 6, ma35)
array.set(mas, 7, ma40)
array.set(mas, 8, ma45)
array.set(mas, 9, ma50)
array.set(mas, 10, ma55)
array.set(mas, 11, ma60)
array.set(mas, 12, ma65)
array.set(mas, 13, ma70)
array.set(mas, 14, ma75)
array.set(mas, 15, ma80)
array.set(mas, 16, ma85)
array.set(mas, 17, ma90)
for i = 0 to array.size(mas) - 1
ma = array.get(mas, i)
col = maColor(ma, ma100)
count_green += col == color.lime or col == color.green ? 1 : 0
count_red += col == color.red or col == color.maroon ? 1 : 0
// Buy/Sell Conditions
buy_signal = count_green >= 13
sell_signal = count_red >= 9
// RSI Filtering
rsi_buy = buy_signal and rsi < 30
rsi_sell = sell_signal and rsi > 70
// Calculate Entry, Take Profit & Stop Loss for Long and Short
entry_price = close
long_take_profit = entry_price * (1 + long_take_profit_perc) // +0.5%
long_stop_loss = entry_price * (1 - long_stop_loss_perc) // -1%
short_take_profit = entry_price * (1 - short_take_profit_perc) // -0.5%
short_stop_loss = entry_price * (1 + short_stop_loss_perc) // +1%
// Backtesting Orders
if rsi_buy
strategy.entry("Buy", strategy.long, qty=wallet_balance / close)
strategy.exit("Long Exit", from_entry="Buy", limit=long_take_profit, stop=long_stop_loss)
alert("📈 Buy Signal! Entering long trade at " + str.tostring(entry_price), alert.freq_once_per_bar_close)
if rsi_sell
strategy.entry("Sell", strategy.short, qty=wallet_balance / close)
strategy.exit("Short Exit", from_entry="Sell", limit=short_take_profit, stop=short_stop_loss)
alert("📉 Sell Signal! Entering short trade at " + str.tostring(entry_price), alert.freq_once_per_bar_close)
// Highlight Chart Background Based on Ribbon Counts
bgcolor(count_green >= 13 ? color.new(color.green, 90) : count_red >= 9 ? color.new(color.red, 90) : na, title="Ribbon Trend Highlight")
// Plot "B" when Buy Signal is active
plotshape(rsi_buy, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="B")
// Plot "S" when Sell Signal is active
plotshape(rsi_sell, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="S")
// Plot the Madrid Ribbon (all MAs)
plot(ma05, color=maColor(ma05, ma100), title="MA05", linewidth=1)
plot(ma10, color=maColor(ma10, ma100), title="MA10", linewidth=1)
plot(ma15, color=maColor(ma15, ma100), title="MA15", linewidth=1)
plot(ma20, color=maColor(ma20, ma100), title="MA20", linewidth=1)
plot(ma25, color=maColor(ma25, ma100), title="MA25", linewidth=1)
plot(ma30, color=maColor(ma30, ma100), title="MA30", linewidth=1)
plot(ma35, color=maColor(ma35, ma100), title="MA35", linewidth=1)
plot(ma40, color=maColor(ma40, ma100), title="MA40", linewidth=1)
plot(ma45, color=maColor(ma45, ma100), title="MA45", linewidth=1)
plot(ma50, color=maColor(ma50, ma100), title="MA50", linewidth=1)
plot(ma55, color=maColor(ma55, ma100), title="MA55", linewidth=1)
plot(ma60, color=maColor(ma60, ma100), title="MA60", linewidth=1)
plot(ma65, color=maColor(ma65, ma100), title="MA65", linewidth=1)
plot(ma70, color=maColor(ma70, ma100), title="MA70", linewidth=1)
plot(ma75, color=maColor(ma75, ma100), title="MA75", linewidth=1)
plot(ma80, color=maColor(ma80, ma100), title="MA80", linewidth=1)
plot(ma85, color=maColor(ma85, ma100), title="MA85", linewidth=1)
plot(ma90, color=maColor(ma90, ma100), title="MA90", linewidth=1)
plot(ma100, color=maColor(ma100, ma100), title="MA100", linewidth=2)