Trend berasaskan ATR dan RSI Berikutan Strategi Dagangan

Penulis:ChaoZhang, Tarikh: 2023-10-09 15:18:10
Tag:

Ringkasan

Strategi ini merekabentuk sistem perdagangan dengan fungsi trend berikut berdasarkan Julat Benar Purata (ATR) dan Indeks Kekuatan Relatif (RSI). Ia boleh mengenal pasti arah trend secara automatik dan mempunyai ciri stop loss dan mengambil keuntungan.

Logika Strategi

  1. Hitung ATR dan RSI. ATR mencerminkan turun naik harga purata dalam tempoh. RSI mencerminkan perbandingan kuasa antara lembu dan beruang.

  2. Apabila ATR lebih tinggi daripada purata bergerak, ia dianggap sebagai tempoh turun naik yang tinggi yang sesuai untuk perdagangan.

  3. Apabila RSI berada di atas garisan overbought, pergi panjang. Apabila RSI berada di bawah kawasan oversold, pergi pendek.

  4. Selepas lama, gunakan titik tinggi dikalikan dengan nisbah tetap sebagai harga stop loss yang mengikuti. Selepas pendek, gunakan titik rendah dikalikan dengan nisbah tetap sebagai harga stop loss yang mengikuti.

  5. Ambil keuntungan mengikut nisbah keuntungan.

Analisis Kelebihan

  1. Penghentian kerugian boleh memaksimumkan perintah stop loss untuk mengurangkan kerugian.

  2. RSI dapat menilai kekuatan lembu dan beruang dengan berkesan untuk mengelakkan berulang kali membuka kedudukan di pasaran yang terikat julat.

  3. Sebagai penunjuk turun naik, ATR boleh menapis pasaran terhad julat dan hanya berdagang di pasaran yang sedang berkembang.

  4. Rasio mengambil keuntungan dengan keuntungan boleh mengunci beberapa keuntungan.

Analisis Risiko

  1. Kedua-dua ATR dan RSI adalah penunjuk yang ketinggalan, yang boleh menyebabkan masa kemasukan lewat. Parameter boleh dioptimumkan untuk menjadikan sistem lebih sensitif.

  2. Nisbah keuntungan dan kerugian tetap untuk stop loss dan mengambil keuntungan cenderung untuk mengoptimumkan, harus ditetapkan dengan berhati-hati berdasarkan hasil backtest.

  3. Dalam pasaran jangkaan kitaran yang besar, ATR mungkin lebih tinggi daripada purata bergerak untuk masa yang lama, yang membawa kepada perdagangan berlebihan.

Arahan pengoptimuman

  1. Mengoptimumkan parameter ATR dan RSI untuk menjadikan sistem lebih sensitif.

  2. Tambah MA dan penunjuk lain untuk menentukan arah trend, elakkan memasuki pasaran yang terikat julat dengan salah.

  3. Cuba stop loss dinamik dan mengambil nisbah keuntungan, bukannya tetapan tetap.

  4. Pertimbangkan untuk menambah langkah kawalan saiz dagangan.

Ringkasan

Strategi ini mengintegrasikan kelebihan penunjuk ATR dan RSI dan merancang trend yang mudah dan praktikal mengikuti sistem perdagangan. Meningkatkan lagi kestabilan sistem dengan pengoptimuman parameter dan menambah penapis. Secara keseluruhan, strategi ini mempunyai nilai praktikal yang kuat untuk perdagangan langsung.


/*backtest
start: 2023-09-08 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// © liwei666
//@version=5
// # ========================================================================= #
// #                   |   Strategy  |
// # ========================================================================= #
strategy(
 title                = "ATR_RSI_Strategy v2[liwei666]",
 shorttitle           = "ATR_RSI_Strategy",
 overlay              =  true,
 max_lines_count                 =  500, 
 max_labels_count                =  500, 
 max_boxes_count                 =  500,
 max_bars_back = 5000,
 initial_capital = 10000,
 default_qty_type=strategy.percent_of_equity, 
 default_qty_value=50, commission_type=strategy.commission.percent, pyramiding=1, 
 commission_value=0.05
 )
// # ========================================================================= #
// #                   |   Strategy  |
// # ========================================================================= #

atr_length = input.int(26, "atr_length", minval = 6, maxval = 100, step=1)
atr_ma_length = input.int(45, "atr_ma_length", minval = 6, maxval = 100, step=1)
rsi_length = input.int(15, "rsi_length", minval = 6, maxval = 100, step=1)
rsi_entry = input.int(10, "rsi_entry", minval = 6, maxval = 100, step=1)
atr_ma_norm_min = input.float(0.3, "atr_ma_norm_min", minval = 0.1, maxval = 0.5, step=0.1)
atr_ma_norm_max = input.float(0.7, "atr_ma_norm_max", minval = 0.5, maxval = 1, step=0.1)
trailing_percent= input.float(1.5, "trailing_percent", minval = 0.1, maxval = 2, step=0.1)

var rsi_buy = 50 + rsi_entry
var rsi_sell = 50 - rsi_entry

sma_norm_h_45() => 
    source = high
    n = 45
    sma = ta.sma(source, n) 
    sma_norm = (sma - ta.lowest(sma, n)) / (ta.highest(sma,n) - ta.lowest(sma, n))
    sma_norm

atr_value = ta.atr(atr_length)
atr_ma = ta.sma(atr_value, atr_ma_length) 
rsi_value = ta.rsi(close, length = rsi_length) 
atr_ma_norm = atr_ma / close * 100
sma_norm = sma_norm_h_45()

var intra_trade_high = 0.0
var intra_trade_low = 0.0

if strategy.position_size == 0
    intra_trade_high := high
    intra_trade_low := low

    if atr_ma_norm >= atr_ma_norm_min and atr_ma_norm <= atr_ma_norm_max
        if atr_value > atr_ma
            if rsi_value > rsi_buy
                strategy.entry("B1", strategy.long, limit = close + 5 )
            else if rsi_value < rsi_sell
                strategy.entry("S1", strategy.short, limit = close - 5 )
else if strategy.position_size > 0
    intra_trade_high := math.max(intra_trade_high, high)
    intra_trade_low := low

    long_tp = intra_trade_high * (1 - trailing_percent / 100)
    strategy.exit("Exit B1", from_entry="B1", stop = long_tp, limit = strategy.position_avg_price * 1.03)

else if strategy.position_size < 0
    intra_trade_high := high
    intra_trade_low := math.min(intra_trade_low, low) 

    short_tp = intra_trade_low * (1 + trailing_percent / 100)
    strategy.exit("Exit S1", from_entry="S1", stop = short_tp, limit = strategy.position_avg_price * 0.94)

Lebih lanjut