Strategi kuantitatif elastis RSI oversold dengan stop loss ATR dinamis

RSI SMA ATR TP SL
Tanggal Pembuatan: 2024-11-29 16:18:55 Akhirnya memodifikasi: 2024-11-29 16:18:55
menyalin: 0 Jumlah klik: 453
1
fokus pada
1617
Pengikut

Strategi kuantitatif elastis RSI oversold dengan stop loss ATR dinamis

Ringkasan

Strategi ini adalah sistem perdagangan kuantitatif yang didasarkan pada sinyal oversold RSI dan stop loss ATR dinamis. Strategi ini menggunakan data tingkat garis harian, menggabungkan sinyal oversold RSI dan filter tren garis rata-rata 200 hari, untuk menangkap peluang bouncing saat pasar oversold. Strategi ini menggunakan mekanisme perlindungan ganda dari stop loss ATR dinamis dan stop loss persentase statis, dan menetapkan tujuan profit tiga kali lipat, untuk memaksimalkan keuntungan dengan mengurangi posisi secara bertahap.

Prinsip Strategi

Logika inti dari strategi ini mencakup elemen-elemen kunci berikut:

  1. Sinyal masuk: Ketika RSI ((5)) berada di bawah level oversold 30 dan harga berada di atas garis rata-rata 200 hari, sistem mengeluarkan sinyal multiply.
  2. Mekanisme Stop Loss: Mekanisme ganda yang menggabungkan Stop Loss Dinamis 1.5x ATR ((20) dan Stop Loss Tetap 25%.
  3. Target keuntungan: ditetapkan tiga titik target sebesar 5%, 10% dan 15%, masing-masing berkurang 33%, 66% dan 100% ketika mencapai target.
  4. Manajemen Posisi: Disarankan untuk menggunakan 59.13% dari posisi yang dihitung dengan Kelly Criterion, atau menggunakan 75% dari posisi untuk perdagangan konservatif.

Keunggulan Strategis

  1. Konfirmasi tren ganda: meningkatkan peluang perdagangan dengan verifikasi ganda RSI oversold dan trend rata-rata.
  2. Fleksibilitas pengendalian risiko: Stop loss ATR dinamis dapat disesuaikan dengan fluktuasi pasar, dan stop loss tetap memberikan pertahanan terakhir.
  3. Manajemen Keuntungan Cerdas: Triple Target Binary dengan pengurangan saham secara bertahap, dapat mengunci sebagian keuntungan tanpa melewatkan pasar besar.
  4. Ilmu pengelolaan uang: Menggunakan prinsip Kelly untuk mengoptimalkan posisi, mencapai keseimbangan antara risiko dan keuntungan.

Risiko Strategis

  1. Tergantung pada tren: Strategi dapat sering memicu stop loss di pasar yang bergejolak. Saran: Anda bisa menambahkan indikator getaran untuk memfilter sinyal palsu.

  2. Stop loss yang lebih besar: Stop loss tetap 25% dapat menyebabkan kerugian tunggal yang terlalu besar. Disarankan: Sesuaikan Stop Loss Ratio dengan kemampuan tanggung risiko individu.

  3. Resiko penarikan: keuntungan terputus-putus dapat mengurangi posisi terlalu dini dalam situasi yang kuat. Saran: Anda dapat secara dinamis menyesuaikan target keuntungan, atau mempertahankan beberapa posisi untuk melacak tren.

Arah optimasi strategi

  1. Optimasi Sinyal:
  • Menambahkan konfirmasi pengiriman
  • Kombinasi dengan indikator tren seperti MACD
  • Memperkenalkan filter volatilitas
  1. Optimalisasi Stop Loss:
  • Mencapai Rasio Stop Loss Dinamis
  • Meningkatkan waktu stop loss
  • Tambahkan filter keuntungan-keuntungan
  1. Optimalisasi keuntungan:
  • Pengaturan target berdasarkan ATR dinamis
  • Mengimplementasikan tracking stop
  • Optimalkan Rasio Deposit

Meringkaskan

Strategi ini membangun sistem perdagangan yang lengkap dengan menggabungkan sinyal oversold RSI dan penyaringan tren rata-rata, dengan stop loss ATR dinamis dan target profit tiga kali lipat. Keuntungan dari strategi ini adalah kontrol risiko yang fleksibel, manajemen keuntungan yang masuk akal, namun masih perlu disesuaikan secara optimal sesuai dengan kondisi pasar yang sebenarnya dan preferensi risiko pribadi. Dengan terus meningkatkan sistem sinyal, mekanisme stop loss dan strategi profit, sistem ini diharapkan dapat berkinerja lebih baik di bursa perdagangan nyata.

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

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