Sumber dimuat naik... memuat...

Multi-MA Crossover dengan RSI Dinamis Trailing Stop Loss Strategi Dagangan Kuantitatif

Penulis:ChaoZhang, Tarikh: 2024-11-29 16:10:35
Tag:MARSISMASLTS

img

Ringkasan

Strategi ini adalah sistem perdagangan kuantitatif yang menggabungkan Moving Average crossover dengan Indeks Kekuatan Relatif (RSI), bersepadu dengan fungsi stop loss yang menyusul. Strategi ini menggunakan dua purata bergerak - 9 tempoh dan 21 tempoh - sebagai penunjuk trend utama, ditambah dengan RSI untuk pengesahan isyarat perdagangan, dan melaksanakan hentian trailing dinamik untuk perlindungan keuntungan dan kawalan risiko. Reka bentuk strategi secara komprehensif mempertimbangkan trend pasaran, momentum, dan dimensi pengurusan risiko untuk membentuk sistem perdagangan yang lengkap.

Prinsip Strategi

Logik teras strategi ini adalah berdasarkan unsur-unsur utama berikut:

  1. Pengesanan Trend: Mengenali perubahan trend pasaran melalui persilangan purata bergerak pantas (9-periode) dan perlahan (21-periode). Isyarat panjang dihasilkan apabila MA pantas melintasi di atas MA perlahan dengan RSI di atas 55, manakala isyarat pendek berlaku apabila MA pantas melintasi di bawah dengan RSI di bawah 45.
  2. Pengesahan Isyarat: Menggunakan RSI sebagai penapis isyarat, meningkatkan kebolehpercayaan isyarat perdagangan melalui tetapan ambang RSI.
  3. Kawalan Risiko: Menggunakan kerugian hentian 1%, menyesuaikan kedudukan hentian secara dinamik untuk melindungi keuntungan. Juga termasuk syarat mengambil keuntungan berdasarkan RSI, menutup kedudukan panjang apabila RSI melebihi 80 dan kedudukan pendek apabila RSI jatuh di bawah 22.
  4. Mekanisme Stop Loss: Menggabungkan hentian tetap dan hentian, secara automatik menutup kedudukan apabila pelanggaran harga menetapkan tahap peratusan dari titik masuk atau mencapai tahap hentian.

Kelebihan Strategi

  1. Pengesahan Isyarat Berbilang Dimensi: Meningkatkan ketepatan isyarat dagangan melalui pengesahan ganda persilangan MA dan RSI.
  2. Pengurusan Risiko yang Komprehensif: Melaksanakan hentian trailing dinamik untuk kedua-dua perlindungan keuntungan dan kawalan risiko.
  3. Mekanisme Masuk Fleksibel: Mencatatkan titik perubahan pasaran dengan berkesan dengan menggabungkan penunjuk trend dan momentum.
  4. Tahap Automasi Tinggi: Logik strategi yang jelas memudahkan pelaksanaan perdagangan automatik.
  5. Kebolehsesuaian yang kuat: Dapat disesuaikan dengan persekitaran pasaran yang berbeza melalui penyesuaian parameter.

Risiko Strategi

  1. Risiko pasaran sampingan: Boleh menghasilkan isyarat pecah palsu yang kerap di pasaran yang terhad.
  2. Risiko tergelincir: Kemungkinan kerugian tergelincir semasa pelaksanaan hentian.
  3. Sensitiviti Parameter: Prestasi strategi dipengaruhi secara signifikan oleh tempoh MA dan tetapan ambang RSI.
  4. Risiko Sistemik: Stop loss mungkin tidak dilaksanakan tepat pada masanya dalam keadaan pasaran yang melampau.

Arahan Pengoptimuman Strategi

  1. Peningkatan Isyarat: Pertimbangkan untuk memasukkan penunjuk jumlah sebagai syarat pengesahan tambahan.
  2. Pembersihan Stop Loss: Melaksanakan mekanisme penyesuaian stop loss dinamik berdasarkan turun naik.
  3. Pengurusan Kedudukan: Tambah sistem pengukuran kedudukan dinamik berdasarkan penilaian risiko.
  4. Kebolehsesuaian pasaran: Merangkumi mekanisme pengiktirafan persekitaran pasaran untuk tetapan parameter yang berbeza dalam pelbagai keadaan pasaran.
  5. Penapisan Isyarat: Tambah penapisan masa untuk mengelakkan perdagangan semasa tempoh pembukaan dan penutupan pasaran yang tidak menentu.

Ringkasan

Strategi ini membina sistem perdagangan yang menggabungkan ciri-ciri trend dan momentum melalui penunjuk analisis teknikal klasik. Kekuatannya utama terletak pada mekanisme pengesahan isyarat berbilang dimensi dan sistem pengurusan risiko yang komprehensif. Melalui pengoptimuman dan peningkatan yang berterusan, strategi ini menunjukkan janji untuk mengekalkan prestasi yang stabil di pelbagai persekitaran pasaran. Pedagang dinasihatkan untuk melakukan pengujian balik yang menyeluruh sebelum pelaksanaan langsung dan menyesuaikan parameter mengikut ciri instrumen perdagangan tertentu.


/*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)


Berkaitan

Lebih lanjut