Strategi perdagangan berdasarkan RSI dan Stochastic RSI


Tanggal Pembuatan: 2024-02-18 16:13:50 Akhirnya memodifikasi: 2024-02-18 16:13:50
menyalin: 1 Jumlah klik: 711
1
fokus pada
1617
Pengikut

Strategi perdagangan berdasarkan RSI dan Stochastic RSI

Ringkasan

Strategi perdagangan ini menggabungkan dua indikator teknis yang digunakan untuk menghasilkan sinyal perdagangan: RSI yang relatif kuat (RSI) dan RSI yang relatif kuat (RSI) secara acak. Strategi ini juga menggunakan pergerakan harga cryptocurrency dalam kerangka waktu yang lebih tinggi untuk mengkonfirmasi tren, untuk meningkatkan keandalan sinyal.

Nama kebijakan

Strategi Perdagangan RSI-SRSI Kerangka Waktu Berbagai

Prinsip Strategi

Strategi ini menilai overbought dan oversold berdasarkan nilai RSI. Jika RSI berada di bawah 30, itu adalah sinyal oversold. Jika RSI berada di atas 70, itu adalah sinyal oversold.

Strategi ini juga menggabungkan pergerakan harga cryptocurrency pada kerangka waktu yang lebih tinggi (misalnya, perputaran). Sinyal beli hanya dihasilkan ketika RSI pada kerangka waktu yang lebih tinggi (misalnya, 45), yang lebih tinggi dari penurunan. Pengaturan ini dapat menyaring sinyal oversell yang tidak persisten yang muncul ketika keseluruhan berada dalam tren turun.

Sinyal beli dan jual setelah dipicu, perlu melalui siklus tertentu (seperti 8 garis K) untuk mengkonfirmasi, untuk menghindari sinyal yang menyesatkan.

Keunggulan Strategis

  • Metode analisis teknis klasik yang menggunakan indikator RSI untuk menilai overbought dan oversold
  • Kombinasi Stochastic RSI Indikator untuk mengidentifikasi sinyal reversal RSI itu sendiri
  • Aplikasi multi-frame timeframe untuk memfilter sinyal yang salah dan meningkatkan kualitas sinyal

Risiko Strategis dan Solusi

  • Indeks RSI mudah menghasilkan sinyal palsu
    • Menyaring sinyal yang salah dalam kombinasi dengan indikator lain
    • Aplikasi Teknologi Pengakuan Tren
  • Setting parameter threshold yang tidak tepat dapat menghasilkan terlalu banyak sinyal perdagangan
    • Optimalkan kombinasi parameter untuk menemukan parameter yang optimal
  • Sinyal jual beli membutuhkan waktu konfirmasi.
    • Menemukan siklus konfirmasi yang seimbang, memfilter sinyal yang menyesatkan, dan tidak melewatkan kesempatan

Arah optimasi strategi

  • Tes lebih banyak kombinasi indikator untuk mencari sinyal yang lebih kuat
    • Misalnya dengan memasukkan MACD ke dalam strategi.
  • Mencoba Metode Pembelajaran Mesin Untuk Menemukan Parameter Optimal
    • Pengoptimalan otomatis menggunakan algoritma genetik/evolusi
  • Meningkatkan strategi stop loss untuk mengendalikan risiko transaksi tunggal
    • Stop loss ketika harga turun dari level support

Meringkaskan

Strategi ini terutama mengandalkan RSI dan Stochastic RSI dua indikator perdagangan klasik untuk menghasilkan sinyal perdagangan. Pada saat yang sama, memperkenalkan kerangka waktu yang lebih tinggi untuk konfirmasi tren, dapat secara efektif memfilter sinyal yang menyesatkan, meningkatkan kualitas sinyal.

Kode Sumber Strategi
/*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")