Trend Mengikuti Strategi Dagangan Berdasarkan ATR dan RSI


Tarikh penciptaan: 2023-10-09 15:18:10 Akhirnya diubah suai: 2023-10-09 15:18:10
Salin: 0 Bilangan klik: 1027
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi ini merancang sistem perdagangan dengan fungsi trend-tracking berdasarkan purata real-time turun naik ((ATR) dan indeks relatif lemah ((RSI)). Sistem ini dapat mengenal pasti arah trend secara automatik dan mempunyai fungsi stop loss dan stop loss.

Prinsip Strategi

  1. Mengira ATR dan RSI. ATR mencerminkan purata harga turun naik dalam tempoh yang baru-baru ini. RSI mencerminkan kekuatan antara kedua-dua pihak.

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

  3. Apabila RSI lebih tinggi daripada garisan beli, buatlah lebih banyak; apabila RSI lebih rendah daripada kawasan jual beli, buatlah kosong.

  4. Selepas melakukan plus, dengan titik tinggi kalikan dengan peratusan tetap sebagai tracking stop loss. Selepas melakukan shorting, dengan titik rendah kalikan dengan peratusan tetap sebagai tracking stop loss.

  5. Peratusan keuntungan menurun.

Analisis kelebihan

  1. Tracking stop loss boleh meminimumkan stop loss dan mengurangkan kerugian.

  2. RSI dapat menilai kekuatan overhead dengan berkesan, dan mengelakkan pembukaan kedudukan berulang dalam keadaan goyah.

  3. ATR sebagai penunjuk turun naik, boleh menyaring pergerakan goyah dan hanya berdagang dalam trend.

  4. Penangguhan peratusan keuntungan boleh mengunci sebahagian daripada keuntungan.

Analisis risiko

  1. ATR dan RSI adalah penunjuk ketinggalan, yang boleh menyebabkan penarikan masa masuk. Parameter boleh dioptimumkan dengan sewajarnya, menjadikan sistem lebih sensitif.

  2. Penangguhan kerugian tetap berbanding penangguhan kerugian mudah dioptimumkan, dan harus ditetapkan dengan berhati-hati dengan hasil tinjauan semula.

  3. ATR boleh menjadi lebih besar daripada purata bergerak dalam jangka masa yang panjang dalam keadaan gegaran kitaran besar, yang menyebabkan perdagangan berlebihan. Syarat penapis lain boleh ditambah.

Arah pengoptimuman

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

  2. Menambah MA sebagai penunjuk arah trend untuk mengelakkan kesesakan dalam keadaan goyah.

  3. Cubalah untuk menggunakan peratusan stop-loss yang dinamik, dan bukannya seting yang tetap.

  4. Pertimbangkan untuk menambah langkah-langkah kawalan jumlah transaksi.

ringkaskan

Strategi ini menggabungkan kelebihan kedua-dua penunjuk ATR dan RSI, merancang sistem perdagangan trend yang mudah dan praktikal. Dengan mengoptimumkan parameter dan menambah syarat penapisan, kestabilan sistem dapat ditingkatkan lagi. Secara keseluruhan, strategi ini mempunyai nilai aplikasi yang kuat di lapangan.

Kod sumber strategi
/*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)