Strategi kuantitatif anjal terlebih jual RSI dengan stop loss ATR dinamik

RSI SMA ATR TP SL
Tarikh penciptaan: 2024-11-29 16:18:55 Akhirnya diubah suai: 2024-11-29 16:18:55
Salin: 0 Bilangan klik: 453
1
fokus pada
1617
Pengikut

Strategi kuantitatif anjal terlebih jual RSI dengan stop loss ATR dinamik

Gambaran keseluruhan

Strategi ini adalah sistem perdagangan kuantitatif berdasarkan isyarat oversold RSI dan stop loss ATR dinamik. Strategi ini menggunakan data peringkat garis harian, menggabungkan isyarat oversold RSI dan penapis trend garis 200 harian untuk menangkap peluang rebound ketika pasaran oversold. Strategi ini menggunakan mekanisme perlindungan ganda untuk stop loss ATR dinamik dan stop loss peratusan statik, dan menetapkan sasaran keuntungan tiga, untuk memaksimumkan keuntungan dengan mengurangkan kedudukan secara beransur-ansur.

Prinsip Strategi

Logik teras strategi merangkumi elemen utama berikut:

  1. Isyarat masuk: Apabila RSI ((5)) berada di bawah tahap oversold 30 dan harga berada di atas garis purata 200 hari, sistem mengeluarkan isyarat lebih banyak.
  2. Mekanisme Hentikan Kerosakan: Mekanisme berganda yang menggabungkan Hentikan Dinamik 1.5x ATR ((20) dan Hentikan Tetap 25%
  3. Matlamat keuntungan: Tiga sasaran 5% , 10% dan 15% telah ditetapkan, masing-masing mengurangkan 33%, 66% dan 100% apabila mencapai sasaran.
  4. Pengurusan kedudukan: disyorkan untuk menggunakan 59.13% daripada kedudukan yang dikira dengan kriteria Kelly, atau mengekalkan 75% daripada kedudukan untuk berdagang.

Kelebihan Strategik

  1. Pengesahan trend berganda: meningkatkan peluang kemenangan dagangan melalui pengesahan dua hala RSI oversell dan trend garis rata.
  2. Kawalan risiko yang fleksibel: Hentikan ATR dinamik dapat menyesuaikan diri dengan turun naik pasaran, dan hentikan tetap memberikan pertahanan terakhir.
  3. Pengurusan Keuntungan Cerdas: Triple Targeting dengan pengurangan saham secara beransur-ansur, dapat mengunci sebahagian keuntungan dan tidak akan terlepas peluang besar.
  4. Sains Pengurusan Wang: Menggunakan Kelly Criteria untuk mengoptimumkan kedudukan, mencapai keseimbangan antara risiko dan keuntungan.

Risiko Strategik

  1. Tergantung kepada trend: Strategi yang mungkin sering mencetuskan stop loss dalam pasaran yang bergolak. Cadangan: Anda boleh menambah penapis penunjuk gegaran untuk memfilter isyarat palsu.

  2. Stop loss yang lebih besar: 25% stop loss tetap boleh menyebabkan kerugian tunggal yang terlalu besar. Cadangan: Sesuaikan peratusan hentian kecederaan dengan kemampuan risiko individu.

  3. Risiko penarikan balik: Keuntungan berpecah-pecah boleh menyebabkan penurunan terlalu awal dalam keadaan yang kuat. Cadangan: Anda boleh menyesuaikan sasaran keuntungan secara dinamik, atau mengekalkan sebahagian daripada kedudukan untuk mengesan trend.

Arah pengoptimuman strategi

  1. Pengoptimuman Isyarat:
  • Tambah pengesahan jumlah
  • Gabungan dengan penunjuk trend seperti MACD
  • Memperkenalkan penapis kemeruapan
  1. Pengoptimuman Stop Loss:
  • Mempunyai nisbah hentian dinamik
  • Tambah Masa Hilang
  • Menambah penapis keuntungan berbanding kerugian
  1. Pengoptimuman keuntungan:
  • Tarikan sasaran berdasarkan ATR
  • Mempunyai Tracking Stop
  • Rasio pengurangan optimum

ringkaskan

Strategi ini membina sistem perdagangan yang lengkap dengan menggabungkan isyarat oversell RSI dan penapis trend rata, dengan tujuan ATR berhenti dan keuntungan tiga kali ganda yang dinamik. Kelebihan strategi ini adalah kawalan risiko yang fleksibel, pengurusan keuntungan yang munasabah, tetapi masih memerlukan penyesuaian yang optimum mengikut keadaan pasaran sebenar dan pilihan risiko individu.

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

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