Strategi perdagangan kuantitatif dengan crossover moving average ganda dan trailing stop loss dinamis RSI

MA RSI SMA SL TS
Tanggal Pembuatan: 2024-11-29 16:10:35 Akhirnya memodifikasi: 2024-11-29 16:10:35
menyalin: 1 Jumlah klik: 461
1
fokus pada
1617
Pengikut

Strategi perdagangan kuantitatif dengan crossover moving average ganda dan trailing stop loss dinamis RSI

Ringkasan

Strategi ini adalah sistem perdagangan kuantitatif yang menggabungkan persilangan rata-rata bergerak dan indeks relatif kuat (RSI) dengan fungsi pengintaian stop loss yang terintegrasi. Strategi ini menggunakan dua rata-rata bergerak 9 dan 21 periode sebagai indikator penilaian tren utama, bekerja dengan indikator RSI untuk konfirmasi sinyal perdagangan, dan melindungi keuntungan dan mengendalikan risiko dengan pelacakan stop loss secara dinamis.

Prinsip Strategi

Logika inti dari strategi ini didasarkan pada elemen-elemen kunci berikut:

  1. Identifikasi tren: Mengidentifikasi perubahan tren pasar melalui persilangan rata-rata bergerak cepat ((9 siklus) dan lambat ((21 siklus)). Ketika garis cepat melintasi garis lambat dan RSI lebih besar dari 55, menghasilkan sinyal multi; Ketika garis cepat melintasi garis lambat dan RSI lebih kecil dari 45, menghasilkan sinyal gap.
  2. Konfirmasi sinyal: Menggunakan RSI sebagai filter sinyal, untuk meningkatkan keandalan sinyal perdagangan dengan menetapkan RSI threshold.
  3. Pengendalian risiko: Menggunakan 1% tracking stop loss, secara dinamis menyesuaikan posisi stop loss untuk melindungi profit. Pada saat yang sama, pengaturan RSI-berdasarkan kondisi profit-taken-closed, dengan posisi overhead dan kosong kosong ketika RSI lebih dari 80 atau di bawah 22.
  4. Mekanisme Stop Loss: Menggabungkan Stop Loss dan Tracking Stop Loss, ketika harga menembus persentase yang telah ditetapkan dari titik masuk atau menyentuh Tracking Stop Loss Line, maka posisi akan keluar secara otomatis.

Keunggulan Strategis

  1. Verifikasi sinyal multi-dimensi: meningkatkan akurasi sinyal perdagangan dengan cross-regularitas dan RSI double confirmation.
  2. Manajemen risiko yang baik: Menggunakan tracking stop loss yang dinamis untuk melindungi keuntungan dan mengendalikan risiko.
  3. Fleksibilitas mekanisme masuk: Kombinasi dengan tren dan indikator momentum, dapat secara efektif menangkap titik-titik perubahan pasar.
  4. Tingkat otomatisasi yang tinggi: Strategi logis yang jelas, mudah untuk melakukan transaksi otomatis.
  5. Adaptabilitas: dapat disesuaikan dengan berbagai kondisi pasar melalui penyesuaian parameter.

Risiko Strategis

  1. Risiko pasar yang bergoyang: Sering terjadi sinyal palsu dalam pasar yang bergoyang.
  2. Resiko slippage: Anda mungkin menghadapi kehilangan slippage dalam proses pelacakan stop loss.
  3. Sensitivitas parameter: Periode garis rata-rata dan setelan RSI memiliki pengaruh besar pada kinerja strategi.
  4. Risiko sistemik: dalam situasi ekstrem, stop loss mungkin tidak dapat dilaksanakan pada waktu yang tepat.

Arah optimasi strategi

  1. Optimasi sinyal: dapat diperkenalkan indikator volume lalu lintas sebagai syarat tambahan untuk konfirmasi sinyal.
  2. Optimasi Stop Loss: Mempertimbangkan mekanisme penyesuaian rasio stop loss dinamis berdasarkan volatilitas.
  3. Manajemen Posisi: Menambahkan sistem manajemen posisi dinamis berdasarkan penilaian risiko.
  4. Adaptabilitas pasar: Menambahkan mekanisme identifikasi lingkungan pasar, menggunakan pengaturan parameter yang berbeda dalam kondisi pasar yang berbeda.
  5. Filter sinyal: Anda dapat menambahkan filter waktu untuk menghindari perdagangan pada saat volatilitas sebelum buka dan tutup pasar.

Meringkaskan

Strategi ini dengan menggabungkan indikator klasik dalam analisis teknis, membangun sebuah sistem perdagangan yang memiliki fitur pelacakan tren dan dinamika. Keunggulan utamanya adalah mekanisme konfirmasi sinyal multi-dimensi dan sistem manajemen risiko yang baik. Dengan terus-menerus mengoptimalkan dan memperbaiki, strategi ini diharapkan untuk mempertahankan kinerja yang stabil di berbagai lingkungan pasar.

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

//@version=5
strategy("ojha's Intraday MA Crossover + RSI Strategy with Trailing Stop", overlay=true)

// Define Moving Averages
fastLength = 9
slowLength = 21
fastMA = ta.sma(close, fastLength)
slowMA = ta.sma(close, slowLength)

// Define RSI
rsiPeriod = 14
rsiValue = ta.rsi(close, rsiPeriod)

// Define Conditions for Long and Short
longCondition = ta.crossover(fastMA, slowMA) and rsiValue > 55
shortCondition = ta.crossunder(fastMA, slowMA) and rsiValue < 45

// Define the trailing stop distance (e.g., 1% trailing stop)
trailingStopPercent = 1.0

// Variables to store the entry candle high and low
var float longEntryLow = na
var float shortEntryHigh = na

// Variables for trailing stop levels
var float longTrailingStop = na
var float shortTrailingStop = na

// Exit conditions
exitLongCondition = rsiValue > 80
exitShortCondition = rsiValue < 22

// Stop-loss conditions (price drops below long entry candle low * 1% or exceeds short entry candle high * 1%)
longStopLoss = longEntryLow > 0 and close < longEntryLow * 0.99
shortStopLoss = shortEntryHigh > 0 and close > shortEntryHigh * 1.01

// Execute Buy Order and store the entry candle low for long stop-loss
if (longCondition)
    strategy.entry("Long", strategy.long)
    longEntryLow := low  // Store the low of the candle where long entry happened
    longTrailingStop := close * (1 - trailingStopPercent / 100)  // Initialize trailing stop at entry

// Execute Sell Order and store the entry candle high for short stop-loss
if (shortCondition)
    strategy.entry("Short", strategy.short)
    shortEntryHigh := high  // Store the high of the candle where short entry happened
    shortTrailingStop := close * (1 + trailingStopPercent / 100)  // Initialize trailing stop at entry

// Update trailing stop for long position
if (strategy.opentrades > 0 and strategy.position_size > 0)
    longTrailingStop := math.max(longTrailingStop, close * (1 - trailingStopPercent / 100))  // Update trailing stop as price moves up

// Update trailing stop for short position
if (strategy.opentrades > 0 and strategy.position_size < 0)
    shortTrailingStop := math.min(shortTrailingStop, close * (1 + trailingStopPercent / 100))  // Update trailing stop as price moves down

// Exit Buy Position when RSI is above 80, Stop-Loss triggers, or trailing stop is hit
if (exitLongCondition or longStopLoss or close < longTrailingStop)
    strategy.close("Long")
    longEntryLow := na  // Reset the entry low after the long position is closed
    longTrailingStop := na  // Reset the trailing stop

// Exit Sell Position when RSI is below 22, Stop-Loss triggers, or trailing stop is hit
if (exitShortCondition or shortStopLoss or close > shortTrailingStop)
    strategy.close("Short")
    shortEntryHigh := na  // Reset the entry high after the short position is closed
    shortTrailingStop := na  // Reset the trailing stop

// Plot Moving Averages on the Chart
plot(fastMA, color=color.green, title="9-period MA")
plot(slowMA, color=color.red, title="21-period MA")

// Plot RSI on a separate panel
rsiPlot = plot(rsiValue, color=color.blue, title="RSI")
hline(50, "RSI 50", color=color.gray)
hline(80, "RSI 80", color=color.red)
hline(22, "RSI 22", color=color.green)

// Plot Trailing Stop for Visualization
plot(longTrailingStop, title="Long Trailing Stop", color=color.red, linewidth=1, style=plot.style_line)
plot(shortTrailingStop, title="Short Trailing Stop", color=color.green, linewidth=1, style=plot.style_line)