Strategi perdagangan kuantitatif gabungan RSI mengikuti tren dan rata-rata pergerakan

RSI MA SMA TP SL
Tanggal Pembuatan: 2025-01-06 10:58:42 Akhirnya memodifikasi: 2025-01-06 10:58:42
menyalin: 3 Jumlah klik: 62
1
fokus pada
1166
Pengikut

Strategi perdagangan kuantitatif gabungan RSI mengikuti tren dan rata-rata pergerakan

Ringkasan

Strategi ini adalah sistem perdagangan mengikuti tren yang menggabungkan Indeks Kekuatan Relatif (RSI) dan Rata-Rata Pergerakan Sederhana (SMA). Strategi ini menggunakan rata-rata pergerakan untuk menentukan arah tren pasar dan menggunakan indikator RSI untuk mengonfirmasi momentum, sehingga dapat diperdagangkan saat tren dan momentum beresonansi. Strategi ini telah merancang mekanisme stop-profit dan stop-loss yang lengkap, yang dapat mengendalikan risiko secara efektif.

Prinsip Strategi

Logika inti dari strategi ini didasarkan pada penggunaan gabungan dua indikator teknis:

  1. Moving Average (MA): Digunakan untuk menentukan tren keseluruhan. Bila harga berada di atas MA, maka dianggap tren naik, jika tidak maka dianggap tren turun.
  2. Indeks Kekuatan Relatif (RSI): Digunakan untuk mengonfirmasi momentum harga. Bila RSI berada di atas ambang batas yang ditetapkan (misalnya 55), ini mengonfirmasi momentum kenaikan, dan bila berada di bawah ambang batas (misalnya 45), ini mengonfirmasi momentum penurunan.

Logika pembuatan sinyal perdagangan:

  • Kondisi panjang: harga berada di atas MA dan RSI lebih besar dari ambang batas beli
  • Kondisi penjualan pendek: harga di bawah MA dan RSI kurang dari ambang batas jual

Pengendalian risiko menggunakan metode persentase stop loss dan take profit, yang masing-masing ditetapkan sebagai persentase tetap dari harga masuk.

Keunggulan Strategis

  1. Stabilitas sinyal: Dengan menggabungkan konfirmasi ganda tren dan momentum, sinyal palsu dapat dikurangi secara efektif.
  2. Manajemen risiko yang sempurna: stop loss dan take profit dengan persentase tetap ditetapkan untuk mengendalikan risiko setiap transaksi secara efektif.
  3. Fleksibilitas parameter: Parameter utama seperti periode MA, ambang batas RSI, dll. dapat dioptimalkan sesuai dengan karakteristik pasar yang berbeda.
  4. Logika strateginya jelas: aturan perdagangan sederhana dan intuitif, mudah dipahami dan dijalankan.
  5. Kemampuan beradaptasi yang kuat: dapat diterapkan pada transaksi dalam berbagai periode waktu.

Risiko Strategis

  1. Risiko pembalikan tren: Stop loss berkelanjutan dapat terjadi pada titik balik tren.
  2. Risiko pasar yang bergejolak: Perdagangan yang sering dapat mengakibatkan kerugian dalam kondisi pasar yang terikat pada kisaran tertentu.
  3. Ketergantungan parameter: Parameter optimal dapat sangat bervariasi di lingkungan pasar yang berbeda.
  4. Risiko tergelincir: Anda mungkin menghadapi tergelincir besar ketika pasar berfluktuasi hebat.
  5. Keterlambatan indikator teknis: Baik MA maupun RSI memiliki kelambatan tertentu, yang dapat mengakibatkan keterlambatan waktu masuk.

Arah optimasi strategi

  1. Optimalisasi parameter dinamis: Memperkenalkan mekanisme parameter adaptif untuk menyesuaikan periode MA dan ambang batas RSI secara dinamis sesuai dengan volatilitas pasar.
  2. Penyaringan lingkungan pasar: Tambahkan mekanisme penyaringan volatilitas untuk menyesuaikan posisi atau menangguhkan perdagangan dalam lingkungan volatilitas tinggi.
  3. Analisis multi-periode waktu: Memperkenalkan konfirmasi tren jangka panjang untuk meningkatkan akurasi arah perdagangan.
  4. Optimalisasi stop loss: Perkenalkan mekanisme trailing stop loss untuk melindungi keuntungan dengan lebih baik.
  5. Penyaringan sinyal: Tambahkan indikator tambahan seperti volume perdagangan untuk meningkatkan keandalan sinyal.

Meringkaskan

Strategi ini menggabungkan indikator tren dan momentum untuk membangun sistem perdagangan dengan logika yang jelas dan risiko yang dapat dikendalikan. Meskipun ada beberapa risiko yang melekat, strategi tersebut menunjukkan kepraktisan yang baik melalui pengaturan parameter yang wajar dan pengendalian risiko. Arah optimasi selanjutnya terutama akan difokuskan pada penyesuaian parameter dinamis, identifikasi lingkungan pasar, dan peningkatan kualitas sinyal, yang diharapkan dapat lebih meningkatkan stabilitas dan profitabilitas strategi.

Kode Sumber Strategi
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © raiford87

//@version=6
strategy("RSI + MA Trend Strategy (v6)",
     shorttitle="RSI_MA_Trend_v6",
     overlay=true,
     initial_capital=50000,
     default_qty_type=strategy.fixed,
     default_qty_value=1)

// ─────────────────────────────────────────────────────────────────────────────────────
// 1. USER INPUTS
// ─────────────────────────────────────────────────────────────────────────────────────
maLength       = input.int(50,   "Moving Average Length")
rsiLength      = input.int(14,   "RSI Length")
rsiBuyLevel    = input.int(55,   "RSI > X for Buy",  minval=1, maxval=99)
rsiSellLevel   = input.int(45,   "RSI < X for Sell", minval=1, maxval=99)

stopLossPerc   = input.float(1.0,  "Stop Loss %",    minval=0.1)
takeProfitPerc = input.float(2.0,  "Take Profit %",  minval=0.1)

// ─────────────────────────────────────────────────────────────────────────────────────
// 2. INDICATOR CALCULATIONS
// ─────────────────────────────────────────────────────────────────────────────────────
maValue = ta.sma(close, maLength)
rsiVal  = ta.rsi(close, rsiLength)

// Trend conditions
bullTrend = close > maValue
bearTrend = close < maValue

// RSI conditions
rsiBull   = rsiVal > rsiBuyLevel
rsiBear   = rsiVal < rsiSellLevel

// ─────────────────────────────────────────────────────────────────────────────────────
// 3. ENTRY CONDITIONS
// ─────────────────────────────────────────────────────────────────────────────────────
longCondition  = bullTrend and rsiBull
shortCondition = bearTrend and rsiBear

if longCondition
    strategy.entry("RSI MA Long", strategy.long)
if shortCondition
    strategy.entry("RSI MA Short", strategy.short)

// ─────────────────────────────────────────────────────────────────────────────────────
// 4. STOP LOSS & TAKE PROFIT
// ─────────────────────────────────────────────────────────────────────────────────────
stopLossLevel   = stopLossPerc   * 0.01
takeProfitLevel = takeProfitPerc * 0.01

if strategy.position_size > 0
    stopPriceLong = strategy.position_avg_price * (1 - stopLossLevel)
    tpPriceLong   = strategy.position_avg_price * (1 + takeProfitLevel)
    strategy.exit("Exit Long", from_entry="RSI MA Long", stop=stopPriceLong, limit=tpPriceLong)

if strategy.position_size < 0
    stopPriceShort = strategy.position_avg_price * (1 + stopLossLevel)
    tpPriceShort   = strategy.position_avg_price * (1 - takeProfitLevel)
    strategy.exit("Exit Short", from_entry="RSI MA Short", stop=stopPriceShort, limit=tpPriceShort)

// ─────────────────────────────────────────────────────────────────────────────────────
// 5. PLOT SIGNALS & LEVELS
// ─────────────────────────────────────────────────────────────────────────────────────
plot(maValue, color=color.yellow, linewidth=2, title="Moving Average")

plotchar(longCondition,  title="Long Signal",  char='▲', location=location.belowbar, color=color.green, size=size.tiny)
plotchar(shortCondition, title="Short Signal", char='▼', location=location.abovebar, color=color.red,   size=size.tiny)

// Plot Stop & TP lines
posIsLong  = strategy.position_size > 0
posIsShort = strategy.position_size < 0

plotStopLong = posIsLong ? strategy.position_avg_price * (1 - stopLossLevel) : na
plotTpLong   = posIsLong ? strategy.position_avg_price * (1 + takeProfitLevel): na
plotStopShort= posIsShort? strategy.position_avg_price * (1 + stopLossLevel) : na
plotTpShort  = posIsShort? strategy.position_avg_price * (1 - takeProfitLevel): na

plot(plotStopLong,  color=color.red,   linewidth=2, style=plot.style_line, title="Stop Loss Long")
plot(plotTpLong,    color=color.green, linewidth=2, style=plot.style_line, title="Take Profit Long")
plot(plotStopShort, color=color.red,   linewidth=2, style=plot.style_line, title="Stop Loss Short")
plot(plotTpShort,   color=color.green, linewidth=2, style=plot.style_line, title="Take Profit Short")