Sumber dimuat naik... memuat...

RSI Stop-Loss Dinamis ATR

Penulis:ChaoZhang, Tarikh: 2024-11-29 16:18:55
Tag:RSISMAATRTPSL

img

Ringkasan

Strategi ini adalah sistem perdagangan kuantitatif berdasarkan isyarat oversold RSI dan stop-loss ATR dinamik. Menggunakan data jangka masa harian, ia menggabungkan isyarat oversold RSI dengan penapis trend purata bergerak 200 hari untuk menangkap peluang rebound dalam keadaan pasaran oversold. Strategi ini menggunakan kedua-dua mekanisme stop-loss ATR dinamik dan peratusan statik, bersama dengan sasaran keuntungan tiga kali lipat yang dilaksanakan melalui pengurangan kedudukan bertahap.

Prinsip Strategi

Logik teras merangkumi elemen utama berikut:

  1. Isyarat Masuk: Sistem menghasilkan isyarat panjang apabila RSI ((5) jatuh di bawah tahap oversold 30 dan harga berada di atas purata bergerak 200 hari.
  2. Mekanisme Stop-Loss: Menggabungkan 1.5x ATR ((20) stop-loss dinamik dengan 25% stop-loss tetap.
  3. Sasaran Keuntungan: Menetapkan tiga sasaran pada 5%, 10% dan 15%, mengurangkan kedudukan masing-masing sebanyak 33%, 66% dan 100%.
  4. Pengurusan Posisi: Mencadangkan menggunakan sama ada saiz kedudukan 59.13% yang dikira oleh Kriteria Kelly atau saiz kedudukan 75% yang konservatif.

Kelebihan Strategi

  1. Pengesahan Trend Dual: Memvalidasi perdagangan melalui kedua-dua RSI oversold dan trend purata bergerak, meningkatkan kadar kemenangan.
  2. Kawalan Risiko Fleksibel: Stop-loss ATR dinamik menyesuaikan diri dengan turun naik pasaran manakala stop-loss tetap memberikan perlindungan akhir.
  3. Pengurusan Keuntungan Pintar: Sasaran tiga kali dengan pengurangan kedudukan bertahap memastikan keuntungan sambil mengekalkan potensi menaik.
  4. Pengurusan Modal Saintifik: Mengoptimumkan saiz kedudukan menggunakan Kriteria Kelly, menyeimbangkan risiko dan ganjaran.

Risiko Strategi

  1. Kebergantungan Trend: Strategi boleh mencetuskan hentian yang kerap di pasaran yang berbeza. Cadangan: Tambah penapis osilator untuk mengurangkan isyarat palsu.

  2. Stop-Loss yang luas: Stop-Loss tetap 25% boleh menyebabkan kerugian tunggal yang besar. Cadangan: Sesuaikan peratusan stop-loss berdasarkan toleransi risiko peribadi.

  3. Risiko Penarikan: Mengambil keuntungan bertahap boleh mengurangkan kedudukan terlalu awal dalam trend yang kuat. Cadangan: Pertimbangkan sasaran keuntungan dinamik atau simpan bahagian untuk mengikuti trend.

Arahan Pengoptimuman Strategi

  1. Pengoptimuman Isyarat:
  • Tambah pengesahan jumlah
  • Menggabungkan penunjuk trend seperti MACD
  • Melaksanakan penapis turun naik
  1. Pengoptimuman Stop-Loss:
  • Melaksanakan peratusan stop-loss dinamik
  • Tambah berhenti berasaskan masa
  • Sertakan penapis risiko-balasan
  1. Pengoptimuman Keuntungan:
  • Tetapkan sasaran dinamik berdasarkan ATR
  • Melaksanakan hentian belakang
  • Mengoptimumkan nisbah pengurangan kedudukan

Ringkasan

Strategi ini membina sistem perdagangan yang lengkap dengan menggabungkan isyarat oversold RSI dengan penapisan trend purata bergerak, dilengkapi dengan sasaran stop-loss dan keuntungan tiga kali ganda ATR yang dinamik. Kekuatannya terletak pada kawalan risiko yang fleksibel dan pengurusan keuntungan yang rasional, walaupun pengoptimuman berdasarkan keadaan pasaran dan keutamaan risiko peribadi adalah perlu. Melalui peningkatan berterusan sistem isyarat, mekanisme stop-loss, dan strategi mengambil keuntungan, sistem menunjukkan potensi untuk prestasi yang lebih baik dalam perdagangan langsung.


/*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"}]
*/

// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA/4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/
// © wielkieef

//@version=5
strategy("Simple RSI stock Strategy [1D] ", overlay=true, pyramiding=1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=75, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.03)

// Rsi
oversoldLevel = input(30, title="Oversold Level")
overboughtLevel = input(70, title="Overbought Level")
rsi = ta.rsi(close, 5)
rsi_overbought = rsi > overboughtLevel  
rsi_oversold = rsi < oversoldLevel

// Sma 200
lenghtSMA = input(200, title = "SMA lenght")
sma200 = ta.sma(close, lenghtSMA)

// ATR stop-loss
atrLength = input.int(20, title="ATR Length")
atrMultiplier = input.float(1.5, title="ATR Multiplier")
atrValue = ta.atr(atrLength)
var float long_stop_level = na
var float short_stop_level = na
var float tp1_level = na
var float tp2_level = na
var float tp3_level = na

// Strategy entry
long = (rsi_oversold ) and close > sma200 

// Take Profit levels
tp_1 = input.float(5.0, "TP 1", minval=0.1, step=0.1)
tp_2 = input.float(10.0, "TP 2", minval=0.2, step=0.1)
tp_3 = input.float(15.0, "TP 3", minval=0.3, step=0.1)

if long
    strategy.entry('Long', strategy.long)
    long_stop_level := close - atrMultiplier * atrValue
    tp1_level := strategy.position_avg_price * (1 + tp_1 / 100)
    tp2_level := strategy.position_avg_price * (1 + tp_2 / 100)
    tp3_level := strategy.position_avg_price * (1 + tp_3 / 100)

// basic SL - this code is from author RafaelZioni, modified by wielkieef
sl = input.float(25.0, 'Basic Stop Loss %', step=0.1)
per(procent) =>
    strategy.position_size != 0 ? math.round(procent / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)

// ATR SL
if (strategy.position_size > 0 and (close <= long_stop_level))
    strategy.close("Long")
    tp1_level := na
    tp2_level := na
    tp3_level := na
plot(long_stop_level, color=color.orange, linewidth=2, title="Long Stop Loss")

// TP levels
if (strategy.position_size > 0)
    if (not na(tp1_level) and close >= tp1_level)
        tp1_level := na
    if (not na(tp2_level) and close >= tp2_level)
        tp2_level := na
    if (not na(tp3_level) and close >= tp3_level)
        tp3_level := na

plot(strategy.position_size > 0 and not na(tp1_level) ? tp1_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 1")
plot(strategy.position_size > 0 and not na(tp2_level) ? tp2_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 2")
plot(strategy.position_size > 0 and not na(tp3_level) ? tp3_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 3")

// Strategy exit points for Take Profits
strategy.exit('TP 1', from_entry="Long", qty_percent=33, profit=per(tp_1), loss=per(sl))
strategy.exit('TP 2', from_entry="Long", qty_percent=66, profit=per(tp_2), loss=per(sl))
strategy.exit('TP 3', from_entry="Long", qty_percent=100, profit=per(tp_3), loss=per(sl))

// by wielkieef

Berkaitan

Lebih lanjut