Strategi perdagangan cerdas stop loss dinamis RSI

RSI SMA ATR
Tanggal Pembuatan: 2024-11-12 11:39:06 Akhirnya memodifikasi: 2024-11-12 11:39:06
menyalin: 2 Jumlah klik: 503
1
fokus pada
1617
Pengikut

Strategi perdagangan cerdas stop loss dinamis RSI

Ringkasan

Strategi ini adalah sistem perdagangan stop loss dinamis berdasarkan indikator RSI, yang menggabungkan indikator SMA rata-rata dan amplitudo ATR untuk mengoptimalkan keputusan perdagangan. Strategi ini menggunakan skema stop loss bertingkat untuk memaksimalkan keuntungan melalui metode posisi terdepan piramida, sambil menggunakan stop loss dinamis ATR untuk mengendalikan risiko. Strategi ini memiliki kemampuan beradaptasi yang tinggi dan dapat secara otomatis menyesuaikan parameter perdagangan sesuai dengan fluktuasi pasar.

Prinsip Strategi

Strategi ini didasarkan pada RSI oversold range ((RSI<30) sebagai sinyal untuk membuka posisi, dan meminta harga berada di atas 200 hari rata-rata untuk memastikan berada dalam tren naik. Sistem ini menggunakan tiga stop-loss target ((5%, 10%, 15%) dan digabungkan dengan stop loss ATR dinamis). Secara khusus:

  1. Syarat masuk: RSI di bawah 30 dan harga di atas SMA200
  2. Manajemen Posisi: 75% dari dana yang digunakan untuk membuka posisi
  3. Pengaturan Stop Loss: Stop loss dinamis berdasarkan nilai ATR 1,5 kali lipat
  4. Strategi Stop Out: Tetapkan tiga stop out di posisi 5%, 10% dan 15%, dengan rasio 33%, 66% dan 100%

Keunggulan Strategis

  1. Manajemen Risiko Dinamis: Beradaptasi dengan Perubahan Pasar Melalui ATR
  2. Penghentian Batch: Mengurangi Gangguan Emosional dan Meningkatkan Probabilitas Keuntungan
  3. Konfirmasi tren: Filter sinyal palsu dengan garis rata
  4. Pengelolaan dana: Menggunakan kontrol posisi persentase untuk menyesuaikan ukuran akun
  5. Optimalisasi komisi: Mengingat biaya transaksi, lebih dekat dengan transaksi yang sebenarnya

Risiko Strategis

  1. Keterlambatan rata-rata bisa menyebabkan keterlambatan masuk
  2. RSI oversold tidak selalu berarti berbalik
  3. Posisi yang lebih besar dapat menyebabkan penurunan yang lebih besar.
  4. Penghentian batch sering dapat meningkatkan biaya transaksi Disarankan untuk mengelola risiko ini dengan menyesuaikan parameter dan menambahkan kondisi penyaringan.

Arah optimasi strategi

  1. Meningkatkan sinyal konfirmasi volume
  2. Memperkenalkan Indikator Kekuatan Tren
  3. Optimalkan distribusi proporsi hambatan
  4. Tambahkan filter siklus waktu
  5. Pertimbangkan untuk menambahkan manajemen posisi yang beradaptasi dengan volatilitas

Meringkaskan

Strategi ini dengan menggabungkan indikator-indikator teknis dan manajemen risiko dinamis, membangun sistem perdagangan yang relatif lengkap. Keuntungannya adalah kemampuan beradaptasi yang kuat, risiko yang dapat dikontrol, tetapi masih perlu untuk mengoptimalkan parameter sesuai dengan kondisi pasar yang sebenarnya. Strategi ini cocok untuk digunakan oleh investor jangka menengah dan panjang, dan dapat digunakan sebagai titik awal yang baik untuk perdagangan sistematis.

Kode 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