Strategi dagangan pintar henti rugi dinamik RSI

RSI SMA ATR
Tarikh penciptaan: 2024-11-12 11:39:06 Akhirnya diubah suai: 2024-11-12 11:39:06
Salin: 2 Bilangan klik: 503
1
fokus pada
1617
Pengikut

Strategi dagangan pintar henti rugi dinamik RSI

Gambaran keseluruhan

Strategi ini adalah sistem perdagangan stop loss dinamik berdasarkan indikator RSI, yang menggabungkan garis rata-rata SMA dan indikator gelombang ATR untuk mengoptimumkan keputusan perdagangan. Strategi ini menggunakan skema stop loss bertingkat untuk memaksimumkan keuntungan melalui cara kedudukan piramid, sambil menggunakan stop loss dinamik ATR untuk mengawal risiko. Strategi ini mempunyai kemampuan beradaptasi yang tinggi dan dapat menyesuaikan parameter perdagangan secara automatik mengikut turun naik pasaran.

Prinsip Strategi

Strategi ini bergantung kepada RSI oversold range ((RSI<30) sebagai isyarat untuk membuka kedudukan, dan memerlukan harga berada di atas 200 hari rata-rata untuk memastikan ia berada dalam trend menaik. Sistem ini menggunakan sasaran tiga stop stop ((5%, 10%, 15%) dan digabungkan dengan stop loss ATR dinamik). Secara khusus:

  1. Syarat kemasukan: RSI di bawah 30 dan harga di atas SMA200
  2. Pengurusan kedudukan: 75% dana digunakan untuk membuka kedudukan sekali
  3. Tetapan stop loss: Stop loss dinamik berdasarkan 1.5 kali ATR
  4. Strategi berhenti: Tetapkan tiga titik berhenti di kedudukan 5%, 10% dan 15%, dengan perkadaran 33%, 66% dan 100%

Kelebihan Strategik

  1. Pengurusan risiko dinamik: menyesuaikan diri dengan turun naik pasaran melalui ATR
  2. Mengurangkan gangguan emosi dan meningkatkan peluang keuntungan
  3. Pengesahan trend: Menapis isyarat palsu menggunakan saluran rata
  4. Pengurusan wang: Menggunakan kawalan kedudukan peratusan untuk menyesuaikan dengan saiz akaun yang berbeza
  5. Optimasi komisen: Mengambil kira kos transaksi, lebih dekat dengan transaksi sebenar

Risiko Strategik

  1. Kelemahan purata mungkin menyebabkan kelewatan kemasukan
  2. RSI oversold tidak semestinya berbalik
  3. Peratusan besar kedudukan mungkin membawa kepada penarikan balik yang lebih besar
  4. Kemasukan yang lebih kerap boleh meningkatkan kos transaksi. Adalah disyorkan untuk menguruskan risiko ini dengan menyesuaikan parameter dan menambah syarat penapisan.

Arah pengoptimuman strategi

  1. Tingkatkan isyarat pengesahan volum
  2. Memperkenalkan Penunjuk Kekuatan Aliran
  3. Optimumkan peruntukan nisbah penghalang
  4. Tambah penapis kitaran masa
  5. Pertimbangan untuk memasukkan pengurusan kedudukan yang menyesuaikan diri dengan kadar turun naik

ringkaskan

Strategi ini, dengan menggabungkan petunjuk teknikal dan pengurusan risiko dinamik, membina sistem perdagangan yang agak lengkap. Kelebihannya adalah bahawa ia sangat mudah disesuaikan, risiko boleh dikawal, tetapi masih perlu mengoptimumkan parameter mengikut keadaan pasaran sebenar. Strategi ini sesuai untuk digunakan oleh pelabur jangka menengah dan panjang, dan boleh digunakan sebagai permulaan yang baik untuk perdagangan sistematik.

Kod sumber strategi
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-11 00: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