Crossover purata bergerak berbilang dan strategi dagangan kuantitatif trailing stop loss dinamik RSI

MA RSI SMA SL TS
Tarikh penciptaan: 2024-11-29 16:10:35 Akhirnya diubah suai: 2024-11-29 16:10:35
Salin: 1 Bilangan klik: 461
1
fokus pada
1617
Pengikut

Crossover purata bergerak berbilang dan strategi dagangan kuantitatif trailing stop loss dinamik RSI

Gambaran keseluruhan

Strategi ini adalah sistem perdagangan kuantitatif yang menggabungkan persilangan purata bergerak dan indeks yang agak kuat (RSI) dan mengintegrasikan fungsi pengesanan berhenti. Strategi ini menggunakan dua purata bergerak 9 dan 21 sebagai indikator penghakiman trend utama, dengan pengesahan isyarat perdagangan dengan indikator RSI, dan melindungi keuntungan dan mengawal risiko dengan mengesan berhenti secara dinamik.

Prinsip Strategi

Logik teras strategi adalah berdasarkan elemen utama berikut:

  1. Pengesanan Trend: Mengenali perubahan trend pasaran melalui persilangan rata-rata bergerak cepat ((9 kitaran) dan perlahan ((21 kitaran)). Apabila garis cepat melintasi garis perlahan dan RSI lebih besar daripada 55, ia menghasilkan isyarat banyak; Apabila garis cepat melintasi garis perlahan dan RSI kurang dari 45, ia menghasilkan isyarat kosong.
  2. Pengesahan isyarat: Menggunakan RSI sebagai penapis isyarat untuk meningkatkan kebolehpercayaan isyarat dagangan dengan menetapkan tahap RSI.
  3. Kawalan risiko: Menggunakan 1% tracking stop loss, secara dinamik menyesuaikan kedudukan stop loss untuk melindungi keuntungan. Pada masa yang sama, menetapkan syarat penutupan keuntungan berdasarkan RSI, dengan kedudukan kosong dan kosong apabila RSI melebihi 80 atau di bawah 22.
  4. Mekanisme Hentikan Kerosakan: Menggabungkan Hentikan Tetap dan Hentikan Tracking, keluar dari kedudukan secara automatik apabila harga menembusi peratusan yang ditetapkan dari titik masuk atau menyentuh garis Hentikan Tracking.

Kelebihan Strategik

  1. Pengesahan isyarat berbilang dimensi: meningkatkan ketepatan isyarat perdagangan dengan pengesahan silang rata dan RSI.
  2. Pengurusan risiko yang baik: Menggunakan tracking stop loss yang dinamik untuk melindungi keuntungan dan mengawal risiko.
  3. Mekanisme kemasukan yang fleksibel: Gabungan trend dan penunjuk momentum, dapat menangkap titik-titik perubahan pasaran dengan berkesan.
  4. Tahap automasi yang tinggi: Strategi logik yang jelas, mudah untuk melaksanakan perdagangan automatik.
  5. Ketabahan: Ia boleh disesuaikan dengan keadaan pasaran yang berbeza melalui penyesuaian parameter.

Risiko Strategik

  1. Risiko pasaran yang bergolak: Isyarat penembusan palsu yang kerap mungkin berlaku dalam pasaran yang bergolak.
  2. Risiko slippage: Mungkin mengalami kehilangan slippage semasa pelaksanaan tracking stop loss.
  3. Sensitiviti parameter: Pengaturan kitaran garis purata dan paras RSI mempunyai kesan besar terhadap prestasi strategi.
  4. Risiko sistemik: Dalam keadaan yang melampau, penangguhan mungkin tidak dapat dilaksanakan pada masa yang tepat.

Arah pengoptimuman strategi

  1. Pengoptimuman isyarat: Indeks kuantiti urus niaga boleh diperkenalkan sebagai syarat tambahan untuk pengesahan isyarat.
  2. Pengoptimuman Hentikan Kerosakan: Mempertimbangkan mekanisme penyesuaian kadar hentikan dinamik berdasarkan kadar turun naik.
  3. Pengurusan Kedudukan: Menambah sistem pengurusan kedudukan dinamik berdasarkan penilaian risiko.
  4. Kebolehsuaian pasaran: Menambah mekanisme pengenalan keadaan pasaran, menggunakan parameter yang berbeza dalam keadaan pasaran yang berbeza.
  5. Penapisan isyarat: Penapisan masa boleh ditambah untuk mengelakkan dagangan pada masa turun naik sebelum pasaran dibuka dan ditutup.

ringkaskan

Strategi ini membina sistem perdagangan yang menggabungkan ciri trend dan dinamik dengan menggabungkan petunjuk klasik dalam analisis teknikal. Kelebihan utamanya adalah mekanisme pengesahan isyarat berbilang dimensi dan sistem pengurusan risiko yang baik. Dengan pengoptimuman dan penambahbaikan berterusan, strategi ini dijangka mengekalkan prestasi yang stabil dalam pelbagai keadaan pasaran.

Kod 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)