Strategi RSI breakout adalah strategi perdagangan kuantitatif

Penulis:ChaoZhang, Tanggal: 2023-12-22 14:06:45
Tag:

img

Gambaran umum

Strategi RSI breakout adalah strategi perdagangan kuantitatif yang didasarkan pada indikator Relative Strength Index (RSI). Strategi ini menghasilkan sinyal perdagangan ketika RSI melanggar batas nilai overbought dan oversold yang telah ditetapkan sebelumnya, yaitu pergi panjang ketika RSI di bawah 30 dan pergi pendek ketika RSI di atas 70.

Logika Strategi

Ide inti dari strategi RSI breakout adalah untuk memanfaatkan indikator RSI untuk menentukan kondisi overbought dan oversold di pasar. RSI menghitung rasio kenaikan dan kerugian harga rata-rata selama periode waktu untuk mencerminkan kekuatan atau kelemahan saham baru-baru ini. Secara umum, RSI di bawah 30 dianggap oversold dan RSI di atas 70 dianggap overbought.

Strategi ini pertama-tama menetapkan nilai ambang oversold dan overbought untuk RSI, dengan nilai default 30 dan 70. Kemudian memantau garis RSI secara real time. Ketika RSI melintasi di bawah ambang 70 dari atas ke bawah, sinyal jual dihasilkan. Ini menunjukkan pasar telah memasuki zona overbought dan kemungkinan akan berbalik ke bawah, sehingga posisi pendek diambil. Sebaliknya, ketika RSI melanggar di atas ambang 30, sinyal beli dihasilkan, yang menunjukkan pasar oversold kemungkinan akan bangkit kembali, sehingga posisi panjang diambil.

Dengan cara ini, strategi ini mencoba untuk menangkap titik pembalikan harga selama fluktuasi saham dan menyesuaikan posisi sesuai dengan beli rendah dan jual tinggi.

Keuntungan

Strategi RSI breakout memiliki keuntungan berikut:

  1. Indikator RSI mudah dihitung dan ditafsirkan dengan hanya mengamati apakah garis indikator melanggar nilai ambang. Perdagangan dapat dilakukan dengan cepat ketika sinyal terjadi tanpa aturan yang kompleks.

  2. Perdagangan yang dihasilkan oleh indikator RSI tanpa campur tangan manusia. Pada saat yang sama, sinyal RSI overbought dan oversold cenderung efektif, yang mengarah pada pengembalian strategi yang layak dalam backtest.

  3. Sangat dapat disesuaikan. Pedagang dapat menyesuaikan parameter RSI secara fleksibel seperti ambang overbought / oversold agar sesuai dengan dinamika saham dan pasar yang berbeda.

Risiko

Strategi RSI breakout juga membawa beberapa risiko:

  1. Kemungkinan untuk whipsaws. Crossover yang sering dari nilai ambang indikator dapat menyebabkan perdagangan yang berlebihan tidak efektif, menghambat keuntungan yang stabil. Parameter dapat disetel untuk menyaring beberapa sinyal whippy.

  2. Tidak ada penilaian tren. RSI hanya menghasilkan sinyal berdasarkan tingkat overbought / oversold tanpa menilai tren keseluruhan dengan baik. Strategi cenderung terjebak di pasar bergolak. Filter tren dapat ditambahkan untuk menghindari perdagangan kontra-tren.

  3. Risiko penarikan tinggi. RSI sering menunjukkan divergensi bullish di mana harga terus naik sementara RSI cenderung turun.

Bidang Peningkatan

Strategi RSI breakout dapat ditingkatkan dengan cara berikut:

  1. Menggabungkan beberapa indikator untuk mengatasi keterbatasan RSI, misalnya rata-rata bergerak untuk menentukan tren pasar, indikator kekuatan dan filter volume untuk mengkonfirmasi sinyal.

  2. Mengoptimalkan parameter RSI untuk stabilitas yang lebih tinggi, termasuk penyesuaian ambang overbought / oversold, pengaturan filter durasi sinyal dll melalui pengujian yang ketat.

  3. Implementasikan stop loss dan take profit untuk mengendalikan risiko. Misalnya, tetapkan persentase atau titik stop. Hindari kerugian tunggal yang terlalu besar pada keuntungan keseluruhan. Juga pertimbangkan tren dan poin teknis untuk mengambil keuntungan.

Kesimpulan

Strategi RSI breakout adalah strategi kuantitatif reversi rata-rata berdasarkan sinyal overbought dan oversold. Strategi ini memiliki sinyal yang sederhana dan jelas, kemampuan otomatisasi penuh dan kemampuan penyesuaian yang tinggi tetapi menderita risiko whipsaw dan penarikan. Dengan mengoptimalkan dengan kombinasi indikator dan kontrol risiko, strategi ini dapat disetel menjadi strategi yang stabil.


/*backtest
start: 2023-11-21 00:00:00
end: 2023-12-21 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Bunghole 2021

strategy(title="My New Strategy", initial_capital = 100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0, currency = 'USD', overlay=true)

//// Stoploss and Take Profit Parameters
// Enable Long Strategy
enable_long_strategy = input(true, title="Enable Long Strategy", group="SL/TP For Long Strategy",inline="1")
long_stoploss_value = input(defval=50, title='Stoploss %', type=input.float, minval=0.1, group="SL/TP For Long Strategy",inline="2")
long_stoploss_percentage = (close * (long_stoploss_value / 100)) / syminfo.mintick
long_takeprofit_value = input(defval=50, title='Take Profit %', type=input.float, minval=0.1, group="SL/TP For Long Strategy",inline="2")
long_takeprofit_percentage = (close * (long_takeprofit_value / 100)) / syminfo.mintick

// Enable Short Strategy
enable_short_strategy = input(true, title="Enable Short Strategy", group="SL/TP For Short Strategy",inline="3")
short_stoploss_value = input(defval=50, title='Stoploss %', type=input.float, minval=0.1, group= "SL/TP For Short Strategy",inline="4")
short_stoploss_percentage = (close * (short_stoploss_value / 100)) / syminfo.mintick
short_takeprofit_value = input(defval=50, title='Take Profit %', type=input.float, minval=0.1, group="SL/TP For Short Strategy",inline="4")
short_takeprofit_percentage = (close * (short_takeprofit_value / 100)) / syminfo.mintick

// Plot Stoploss & Take Profit Levels
long_stoploss_price = strategy.position_avg_price * (1 - long_stoploss_value/100)
long_takeprofit_price = strategy.position_avg_price * (1 + long_takeprofit_value/100)
short_stoploss_price = strategy.position_avg_price * (1 + short_stoploss_value/100)
short_takeprofit_price = strategy.position_avg_price * (1 - short_takeprofit_value/100)
plot(enable_long_strategy and not enable_short_strategy ? long_stoploss_price: na, color=#ff0000, style=plot.style_linebr, linewidth=2, title="Long SL Level")
plot(enable_long_strategy and not enable_short_strategy ? long_takeprofit_price: na, color=#008000, style=plot.style_linebr, linewidth=2, title="Long TP Level")
plot(enable_short_strategy and not enable_long_strategy ? short_stoploss_price: na, color=#ff0000, style=plot.style_linebr, linewidth=2, title="Short SL Level")
plot(enable_short_strategy and not enable_long_strategy ? short_takeprofit_price: na, color=#008000, style=plot.style_linebr, linewidth=2, title="Short TP Level")

// Date Range
start_date = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31, group="Date Range")
start_month = input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12, group="Date Range")
start_year = input(title="Start Year", type=input.integer, defval=1804, minval=1800, maxval=3000, group="Date Range")
end_date = input(title="End Date", type=input.integer, defval=1, minval=1, maxval=3, group="Date Range")
end_month = input(title="End Month", type=input.integer, defval=1, minval=1, maxval=12, group="Date Range")
end_year = input(title="End Year", type=input.integer, defval=2077, minval=1800, maxval=3000, group="Date Range")
in_date_range = (time >= timestamp(syminfo.timezone, start_year, start_month, start_date, 0, 0)) and (time < timestamp(syminfo.timezone, end_year, end_month, end_date, 0, 0))

//// Inputs   **This is where you enter your indicators for your strategy. For example, I added the RSI indicator.**
//RSI
rsi = rsi(close, 14)
rsi_over_sold = rsi < 30
rsi_over_bought = rsi > 70


//// Strategy  **This is where you create your strategy. For example, We have or buy and sell signals.**
// Creating Long and Short Strategy
buy_signal = rsi_over_sold
sell_signal = rsi_over_bought

// Long Strategy
if buy_signal and in_date_range and enable_long_strategy == true
    strategy.entry("Long", true, when=buy_signal, alert_message="Open Long Position")
    strategy.exit("Long  SL/TP", from_entry="Long", loss=long_stoploss_percentage, profit=long_takeprofit_percentage, alert_message="Your Long SL/TP Limit As Been Triggered.")
    strategy.close("Long", when=sell_signal, alert_message="Close Long Position")
    
// Short Strategy
if sell_signal and in_date_range and enable_short_strategy == true
    strategy.entry("Short", false, when = sell_signal, alert_message="Open Short Position")
    strategy.exit("Short SL/TP", from_entry="Short", loss=short_stoploss_percentage, profit=short_takeprofit_percentage, alert_message="Your Short SL/TP Limit As Been Triggered.")
    strategy.close("Short", when=buy_signal, alert_message="Close Short Position")


Lebih banyak