RSI strategi pecah adalah strategi perdagangan kuantitatif

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

img

Ringkasan

RSI Breakout adalah strategi perdagangan kuantitatif berdasarkan Indeks Kekuatan Relatif (RSI). Strategi ini menghasilkan isyarat perdagangan apabila RSI memecahkan had harga overbought dan oversold yang telah ditetapkan, iaitu pergi panjang apabila RSI di bawah 30 dan pergi pendek apabila RSI di atas 70.

Logika Strategi

Idea utama strategi RSI adalah untuk menggunakan penunjuk RSI untuk menentukan keadaan overbought dan oversold di pasaran. RSI mengira nisbah keuntungan dan kerugian harga purata dalam tempoh masa untuk mencerminkan kekuatan atau kelemahan saham baru-baru ini. Secara amnya, RSI di bawah 30 dianggap oversold dan RSI di atas 70 dianggap overbought.

Strategi ini mula-mula menetapkan nilai ambang oversold dan overbought untuk RSI, dengan nilai lalai 30 dan 70. Ia kemudian memantau garis RSI dalam masa nyata. Apabila RSI melintasi di bawah ambang 70 dari atas ke bawah, isyarat jual dihasilkan. Ini menunjukkan pasaran telah memasuki zon overbought dan mungkin akan berbalik ke bawah, jadi kedudukan pendek diambil. Sebaliknya, apabila RSI melanggar ambang 30, isyarat beli dihasilkan, menunjukkan pasaran oversold mungkin akan bangkit kembali, jadi kedudukan panjang diambil.

Dengan cara ini, strategi ini cuba menangkap titik pembalikan harga semasa turun naik stok dan menyesuaikan kedudukan dengan sewajarnya untuk beli rendah dan menjual tinggi.

Kelebihan

Strategi RSI breakout mempunyai kelebihan berikut:

  1. Isyarat perdagangan yang mudah dan jelas. Indikator RSI mudah dikira dan ditafsirkan dengan hanya memerhatikan jika garis indikator melanggar nilai ambang. Dagangan boleh diambil dengan segera apabila isyarat berlaku tanpa peraturan yang rumit.

  2. Perdagangan dihasilkan oleh penunjuk RSI tanpa campur tangan manusia. Pada masa yang sama, isyarat RSI overbought dan oversold cenderung berkesan, yang membawa kepada pulangan strategi yang baik dalam backtest.

  3. Pedagang boleh menyesuaikan parameter RSI dengan fleksibel seperti ambang overbought / oversold untuk menyesuaikan diri dengan dinamik saham dan pasaran yang berbeza.

Risiko

Strategi RSI juga membawa beberapa risiko:

  1. Cenderung kepada whipsaws. persilangan kerap nilai ambang penunjuk boleh membawa kepada perdagangan yang tidak berkesan yang berlebihan, menghalang keuntungan yang stabil. Parameter boleh disesuaikan untuk menapis beberapa isyarat whippy.

  2. Tidak ada penilaian trend. RSI hanya menghasilkan isyarat berdasarkan tahap overbought / oversold tanpa menilai trend keseluruhan dengan baik. Strategi ini cenderung terjebak dalam pasaran yang bergolak. Penapis trend boleh ditambah untuk mengelakkan perdagangan kontra-trend.

  3. Risiko penarikan yang tinggi. RSI sering menunjukkan perbezaan menaik di mana harga terus naik sementara RSI cenderung turun. Perdagangan pendek akan menghadapi kerugian besar dalam kes sedemikian.

Kawasan Peningkatan

RSI breakout strategi boleh ditingkatkan dengan cara berikut:

  1. Menggabungkan beberapa penunjuk untuk mengatasi batasan RSI, contohnya purata bergerak untuk menentukan trend pasaran, penunjuk kekuatan dan penapis jumlah untuk mengesahkan isyarat.

  2. Mengoptimumkan parameter RSI untuk kestabilan yang lebih tinggi, termasuk menyesuaikan ambang overbought / oversold, menetapkan penapis tempoh isyarat dll melalui ujian yang ketat. Ini menapis isyarat yang tidak berkesan.

  3. Melaksanakan stop loss dan mengambil keuntungan untuk mengawal risiko. Sebagai contoh, tetapkan peratusan atau titik berhenti. Elakkan kerugian perdagangan tunggal yang terlalu besar pada keuntungan keseluruhan. Juga pertimbangkan trend dan titik teknikal untuk mengambil keuntungan.

Kesimpulan

RSI breakout adalah strategi kuantitatif pembalikan purata berdasarkan isyarat overbought dan oversold. Ia mempunyai isyarat yang mudah dan jelas, keupayaan automasi penuh dan penyesuaian yang tinggi tetapi mengalami risiko whipsaw dan penarikan. Dengan mengoptimumkan dengan kombinasi penunjuk dan kawalan risiko, ia boleh disesuaikan ke dalam 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 lanjut