Sumber daya yang dimuat... Pemuatan...

Tren Mengikuti RSI dan Moving Average Combined Quantitative Trading Strategy

Penulis:ChaoZhang, Tanggal: 2025-01-06 10:58:42
Tag:RSIMASMATPSL

img

Gambaran umum

Strategi ini adalah sistem perdagangan yang menggabungkan Indeks Kekuatan Relatif (RSI) dan Rata-rata Bergerak Sederhana (SMA). Strategi ini mengidentifikasi arah tren pasar menggunakan rata-rata bergerak sambil mengkonfirmasi momentum dengan RSI, mengeksekusi perdagangan ketika tren dan momentum sejajar. Strategi ini mencakup mekanisme stop-loss dan take-profit yang komprehensif untuk pengendalian risiko yang efektif.

Prinsip Strategi

Logika inti didasarkan pada kombinasi dua indikator teknis:

  1. Moving Average (MA): Digunakan untuk menentukan tren keseluruhan.
  2. Relative Strength Index (RSI): Digunakan untuk mengkonfirmasi momentum harga. Momentum naik dikonfirmasi ketika RSI melebihi ambang batas (misalnya, 55), momentum turun ketika di bawah ambang batas (misalnya, 45).

Logika Generasi Sinyal Trading:

  • Kondisi panjang: Harga di atas MA dan RSI di atas ambang beli
  • Kondisi pendek: Harga di bawah MA dan RSI di bawah ambang jual

Pengendalian risiko menggunakan tingkat stop loss dan take profit berdasarkan persentase, yang ditetapkan sebagai persentase tetap dari harga masuk.

Keuntungan Strategi

  1. Stabilitas sinyal: Mengurangi sinyal palsu melalui konfirmasi ganda tren dan momentum
  2. Manajemen risiko yang komprehensif: Stop-loss persentase tetap dan mengambil keuntungan secara efektif mengendalikan risiko per perdagangan
  3. Fleksibilitas parameter: Parameter utama seperti periode MA dan ambang RSI dapat dioptimalkan untuk karakteristik pasar yang berbeda
  4. Logika strategi yang jelas: Aturan perdagangan sederhana dan intuitif untuk dipahami dan dilaksanakan
  5. Kemampuan beradaptasi yang tinggi: Berlaku pada berbagai kerangka waktu perdagangan

Risiko Strategi

  1. Risiko pembalikan tren: Penghentian berturut-turut dapat terjadi pada titik perubahan tren
  2. Risiko pasar terikat rentang: Kemungkinan kerugian perdagangan sering di pasar sampingan
  3. Ketergantungan parameter: Parameter optimal dapat bervariasi secara signifikan di berbagai lingkungan pasar
  4. Risiko slippage: slippage yang signifikan mungkin terjadi selama volatilitas tinggi
  5. Keterlambatan indikator teknis: MA dan RSI memiliki keterlambatan yang melekat, berpotensi menunda waktu masuk

Arah Optimasi Strategi

  1. Optimalisasi parameter dinamis: Memperkenalkan mekanisme parameter adaptif yang menyesuaikan periode MA dan ambang RSI berdasarkan volatilitas pasar
  2. Penyaringan lingkungan pasar: Tambahkan mekanisme penyaringan volatilitas untuk menyesuaikan ukuran posisi atau menghentikan perdagangan dalam volatilitas tinggi
  3. Analisis beberapa kerangka waktu: Masukkan konfirmasi tren kerangka waktu yang lebih lama untuk meningkatkan akurasi arah
  4. Optimasi stop-loss: Terapkan trailing stop untuk perlindungan keuntungan yang lebih baik
  5. Penyaringan sinyal: Tambahkan volume dan indikator tambahan lainnya untuk meningkatkan keandalan sinyal

Ringkasan

Strategi ini membangun sistem perdagangan yang jelas secara logis dan dikendalikan risiko dengan menggabungkan indikator tren dan momentum. Meskipun risiko yang melekat ada, strategi menunjukkan kepraktisan yang baik melalui pengaturan parameter yang tepat dan pengendalian risiko. Optimasi masa depan berfokus pada penyesuaian parameter dinamis, pengakuan lingkungan pasar, dan peningkatan kualitas sinyal, berpotensi meningkatkan stabilitas dan profitabilitas 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")


Berkaitan

Lebih banyak