Tren Berbasis ATR dan RSI Mengikuti Strategi Perdagangan

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

Gambaran umum

Strategi ini mendesain sistem perdagangan dengan fungsi mengikuti tren berdasarkan Average True Range (ATR) dan Relative Strength Index (RSI).

Logika Strategi

  1. Hitung ATR dan RSI. ATR mencerminkan volatilitas harga rata-rata selama periode. RSI mencerminkan perbandingan kekuatan antara bulls dan bears.

  2. Ketika ATR lebih besar dari rata-rata bergeraknya, itu dianggap periode volatilitas tinggi yang cocok untuk perdagangan.

  3. Ketika RSI berada di atas garis overbought, pergi panjang.

  4. Setelah long, gunakan titik tinggi dikalikan rasio tetap sebagai harga stop loss trailing. Setelah short, gunakan titik rendah dikalikan rasio tetap sebagai harga stop loss trailing.

  5. Ambil keuntungan rasio keuntungan.

Analisis Keuntungan

  1. Mengikuti stop loss dapat memaksimalkan perintah stop loss untuk mengurangi kerugian.

  2. RSI dapat secara efektif menilai kekuatan bulls dan bears untuk menghindari berulang kali membuka posisi di pasar yang terikat rentang.

  3. Sebagai indikator volatilitas, ATR dapat menyaring pasar yang terikat rentang dan hanya berdagang di pasar tren.

  4. Mengambil keuntungan rasio keuntungan dapat mengunci di beberapa keuntungan.

Analisis Risiko

  1. Baik ATR dan RSI adalah indikator yang tertinggal, yang dapat menyebabkan penundaan waktu masuk. Parameter dapat dioptimalkan untuk membuat sistem lebih sensitif.

  2. Rasio keuntungan dan kerugian tetap untuk stop loss dan take profit cenderung terlalu dioptimalkan, harus ditetapkan dengan hati-hati berdasarkan hasil backtest.

  3. Pada pasar yang besar, rentang siklusnya mungkin lebih tinggi dari rata-rata bergerak untuk waktu yang lama, yang mengarah pada perdagangan yang berlebihan.

Arahan Optimasi

  1. Mengoptimalkan parameter ATR dan RSI untuk membuat sistem lebih sensitif.

  2. Tambahkan MA dan indikator lain untuk menentukan arah tren, hindari memasuki pasar yang terikat rentang secara salah.

  3. Coba stop loss dinamis dan mengambil rasio keuntungan, bukan pengaturan tetap.

  4. Pertimbangkan untuk menambahkan langkah-langkah pengendalian ukuran perdagangan.

Ringkasan

Strategi ini mengintegrasikan keuntungan dari indikator ATR dan RSI dan merancang tren yang sederhana dan praktis mengikuti sistem perdagangan. Memperbaiki stabilitas sistem lebih lanjut dengan mengoptimalkan parameter dan menambahkan filter. Secara keseluruhan, strategi ini memiliki nilai praktis 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 banyak