Strategi Perdagangan RSI-SRSI Berbilang Jangka Masa

Penulis:ChaoZhang, Tarikh: 2024-02-18 16:13:50
Tag:

img

Ringkasan

Strategi perdagangan ini menggabungkan Indeks Kekuatan Relatif (RSI) dan Indeks Kekuatan Relatif Stochastic (STOCHAStic RSI) penunjuk teknikal untuk menjana isyarat perdagangan.

Nama Strategi

Strategi Perdagangan RSI-SRSI Berbilang Jangka Masa

Logika Strategi

Strategi ini menilai keadaan overbought dan oversold berdasarkan nilai RSI. RSI di bawah 30 dianggap sebagai isyarat oversold dan RSI di atas 70 dianggap isyarat overbought. Indikator RSI Stochastic mengamati turun naik nilai RSI. RSI Stochastic di bawah 5 adalah oversold dan RSI Stochastic di atas 50 adalah overbought.

Strategi ini juga menggabungkan trend harga mata wang kripto dalam jangka masa yang lebih tinggi (contohnya mingguan). Hanya apabila RSI jangka masa yang lebih tinggi berada di atas ambang (contohnya 45), isyarat panjang dicetuskan. Ini menapis isyarat oversold yang tidak berterusan apabila trend keseluruhan menurun.

Isyarat beli dan jual perlu disahkan untuk beberapa tempoh (contohnya 8 bar) sebelum isyarat dagangan sebenar dihasilkan untuk mengelakkan isyarat palsu.

Kelebihan

  • Kaedah analisis teknikal klasik menggunakan RSI untuk mengenal pasti tahap terlalu beli/lebih jual
  • Menggabungkan RSI Stochastic untuk menangkap pembalikan RSI
  • Menggunakan teknik jangka masa berbilang untuk menapis isyarat palsu dan meningkatkan kualiti

Risiko & Penyelesaian

  • RSI cenderung untuk menghasilkan isyarat palsu
    • Gabungkan penunjuk lain untuk menapis isyarat palsu
    • Menggunakan teknik pengesahan trend
  • Tetapan ambang yang tidak betul boleh menghasilkan terlalu banyak isyarat
    • Mengoptimumkan parameter untuk mencari kombinasi terbaik
  • Isyarat memerlukan masa pengesahan
    • Tempoh pengesahan baki - menapis isyarat palsu tanpa kehilangan peluang

Kawasan Peningkatan

  • Uji lebih banyak kombinasi penunjuk untuk isyarat yang lebih kuat
    • contohnya menggabungkan penunjuk MACD
  • Menggunakan kaedah pembelajaran mesin untuk mencari parameter optimum
    • contohnya algoritma genetik/algoritma evolusi untuk pengoptimuman automatik
  • Tambah strategi stop loss untuk mengawal risiko perdagangan tunggal
    • Tetapkan stop loss apabila harga memecahkan tahap sokongan

Kesimpulan

Strategi ini terutamanya bergantung kepada dua penunjuk teknikal klasik, RSI dan Stochastic RSI, untuk menjana isyarat perdagangan. Di samping itu, pengenalan pengesahan trend dari bingkai masa yang lebih tinggi membantu menapis isyarat palsu dengan berkesan dan meningkatkan kualiti isyarat. Penambahbaikan prestasi yang lebih lanjut dapat dicapai dengan mengoptimumkan parameter, menambahkan stop loss dan cara lain. Logiknya mudah dan mudah difahami. Ia berfungsi sebagai titik permulaan yang baik untuk perdagangan kuant.


/*backtest
start: 2023-02-11 00:00:00
end: 2024-02-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("RSI and Stochatic Strategy", overlay=true, use_bar_magnifier = false)


/////// Inputs ///////////////

// RSI and SRSI
rsiLength = input(14, title="RSI Length") 
stochLength = input(14, title="Stochastic Length")
kSmooth = input(3, title="K Smooth")
dSmooth = input(3, title="D Smooth")


//////// thresholds ///////////////
st_low = input(5, title="Low SRSI") // stochastic RSI low -- prepare to sell
st_hi = input(50, title="High SRSI") // stochastic RSI high -- prepare to buy
diff = input(5, title="difference") // minimum change in RSI
// inval_diff = input(12, title="difference") // invalidation difference: change in the oposite direction that invalidates rsi falling/rising
rsi_low = input(30, title="Low RSI") // RSI considered low
rsi_hi = input(60, title="High RSI") // RSI considered high
rsi_ht_hi = input(45, title="High higher time frame RSI") // RSI in higher time frame considered high


/// buy trigger duration 
tr_dur = input(8, title="Trigger duration")
low_dur = input(20, title="Monitoring last low")


///////////////// Higher time frame trend ///////////////////
// higher time frame resolution
res2 = input.timeframe("W", title="Higher time-frame")
// Input for the ticker symbol, default is an empty string
// For instance we could monitor BTC higher time frame trend
symbol = input("BTC_USDT:swap", "Input Ticker (leave empty for current)")

// Determine the symbol to use
inputSymbol = symbol == "" ? syminfo.tickerid : symbol
//////////////////////////////////////////////////////////

// Calculate RSI //
rsi = ta.rsi(close, rsiLength)

// Calculate Stochastic RSI //
rsiLowest = ta.lowest(rsi, stochLength)
rsiHighest = ta.highest(rsi, stochLength)
stochRsi = 100 * (rsi - rsiLowest) / (rsiHighest - rsiLowest)

// Apply smoothing
K = ta.sma(stochRsi, kSmooth)
D = ta.sma(K, dSmooth)

// Higher time Frame RSI
cl2 = request.security(inputSymbol, res2, close)
rsi2 = ta.rsi(cl2, 14)

// SRSI BUY/SELL signals 
sell_stoch = (ta.lowest(K, tr_dur) < st_low) or (ta.highest(rsi, tr_dur) < rsi_low)
buy_stoch = ((ta.lowest(K, tr_dur) > st_hi) or (ta.lowest(rsi, tr_dur) > rsi_hi)) and (rsi2 > rsi_ht_hi)

 // valitation / invalidation sell signal
ll = ta.barssince(not sell_stoch)+1
sell_validation = (ta.highest(rsi, ll)>rsi[ll]+diff and rsi < rsi[ll]) or (rsi < rsi[ll]-diff)

// valitation / invalidation buy signal
llb = ta.barssince(not buy_stoch)+1
buy_validation = (ta.lowest(rsi, llb)<rsi[llb]-diff and rsi > rsi[llb]) or (rsi > rsi_hi and rsi - rsi[tr_dur] > 0)

sell_signal = sell_stoch and sell_validation
buy_signal = buy_stoch and buy_validation 

// Define the start date for the strategy
startYear = input(2019, "Start Year")
startMonth = input(1, "Start Month")
startDay = input(1, "Start Day")

// Convert the start date to Unix time
startTime = timestamp(startYear, startMonth, startDay, 00, 00)

// Define the end date for the strategy
endYear = input(2030, "End Year")
endMonth = input(1, "End Month")
endDay = input(1, "End Day")

// Convert the end date to Unix time
endTime = timestamp(endYear, endMonth, endDay, 00, 00)


if true
    if buy_signal
        strategy.entry("buy", strategy.long, comment = "Buy")
    if sell_signal
        strategy.close("buy", "Sell")

Lebih lanjut