Strategi ini mendesain sistem perdagangan dengan fungsi mengikuti tren berdasarkan Average True Range (ATR) dan Relative Strength Index (RSI).
Hitung ATR dan RSI. ATR mencerminkan volatilitas harga rata-rata selama periode. RSI mencerminkan perbandingan kekuatan antara bulls dan bears.
Ketika ATR lebih besar dari rata-rata bergeraknya, itu dianggap periode volatilitas tinggi yang cocok untuk perdagangan.
Ketika RSI berada di atas garis overbought, pergi panjang.
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.
Ambil keuntungan rasio keuntungan.
Mengikuti stop loss dapat memaksimalkan perintah stop loss untuk mengurangi kerugian.
RSI dapat secara efektif menilai kekuatan bulls dan bears untuk menghindari berulang kali membuka posisi di pasar yang terikat rentang.
Sebagai indikator volatilitas, ATR dapat menyaring pasar yang terikat rentang dan hanya berdagang di pasar tren.
Mengambil keuntungan rasio keuntungan dapat mengunci di beberapa keuntungan.
Baik ATR dan RSI adalah indikator yang tertinggal, yang dapat menyebabkan penundaan waktu masuk. Parameter dapat dioptimalkan untuk membuat sistem lebih sensitif.
Rasio keuntungan dan kerugian tetap untuk stop loss dan take profit cenderung terlalu dioptimalkan, harus ditetapkan dengan hati-hati berdasarkan hasil backtest.
Pada pasar yang besar, rentang siklusnya mungkin lebih tinggi dari rata-rata bergerak untuk waktu yang lama, yang mengarah pada perdagangan yang berlebihan.
Mengoptimalkan parameter ATR dan RSI untuk membuat sistem lebih sensitif.
Tambahkan MA dan indikator lain untuk menentukan arah tren, hindari memasuki pasar yang terikat rentang secara salah.
Coba stop loss dinamis dan mengambil rasio keuntungan, bukan pengaturan tetap.
Pertimbangkan untuk menambahkan langkah-langkah pengendalian ukuran perdagangan.
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)