Strategi RSI Berkorelasi dengan Momentum


Tanggal Pembuatan: 2023-10-07 15:47:42 Akhirnya memodifikasi: 2023-10-07 15:47:42
menyalin: 0 Jumlah klik: 751
1
fokus pada
1617
Pengikut

Ringkasan

Gagasan inti dari strategi ini adalah untuk membuat siklus perataan indikator RSI menjadi dinamis, menyesuaikan secara otomatis sesuai dengan korelasi antara harga dan momentum, sehingga meningkatkan kepraktisan indikator RSI.

Prinsip Strategi

Strategi ini pertama-tama menghitung momentum harga, kemudian menghitung koefisien korelasi antara harga dan momentum. Ketika koefisien korelasi mendekati 1, harga dan momentum sangat terkait positif; Ketika koefisien korelasi mendekati 1, harga dan momentum sangat terkait negatif.

Panjang siklus halus dari indikator RSI dapat disesuaikan sesuai dengan korelasi harga dan momentum. Bila korelasi tinggi, gunakan siklus RSI yang lebih pendek; Bila korelasi rendah, gunakan siklus RSI yang lebih panjang.

Secara khusus, strategi ini menetapkan panjang siklus RSI menjadi kisaran 20-50 secara default. Setelah menghitung koefisien terkait harga dan momentum, koefisien terkait dipetakan ke dalam kisaran 20-50 melalui metode pemetaan linier sebagai panjang siklus RSI yang disetel secara akhir.

Hal ini memungkinkan untuk menyesuaikan parameter indikator RSI secara otomatis sesuai dengan kondisi pasar, menggunakan RSI yang lebih pendek ketika perubahan harga dan perubahan momentum sangat terkait, sehingga lebih sensitif; ketika korelasi tidak kuat, menggunakan RSI yang lebih panjang untuk mengurangi pengaruh noise pada sinyal.

Analisis Keunggulan

  • Parameter penyesuaian dinamis untuk beradaptasi dengan perubahan pasar
  • Menghindari keterbatasan penggunaan indikator siklus tetap
  • Optimasi siklus pelurus otomatis, tanpa perlu memilih parameter optimal secara manual
  • Rentang siklus RSI yang dapat dikonfigurasi untuk berbagai varietas

Analisis risiko

  • Perhitungan korelasi itu sendiri membawa keterlambatan dan mungkin kehilangan titik balik harga.
  • Terlalu Terfokus pada Hubungan Harga dan Motivasi, Mengabaikan Faktor-Faktor Lain
  • Kisaran siklus RSI default mungkin tidak cocok untuk semua varietas dan perlu dioptimalkan
  • Periode RSI dapat dipertimbangkan untuk disesuaikan dengan faktor-faktor lain seperti volatilitas

Arah optimasi

  • Mencoba metode Relatedness yang berbeda untuk mengurangi keterlambatan
  • Pertimbangkan untuk memasukkan lebih banyak faktor untuk menentukan siklus RSI, dan jangan hanya mengandalkan relevansinya
  • Melakukan pengujian ulang pada varietas yang berbeda untuk menemukan kisaran siklus RSI default yang optimal
  • Anda dapat mengatur berat faktor relevansi, dan tidak sepenuhnya bergantung pada pemetaan linier
  • Menambahkan kondisi filter untuk menghindari penggunaan siklus RSI yang tidak sesuai dalam situasi pasar tertentu

Meringkaskan

Strategi ini adalah ide yang layak untuk dipelajari, tetapi ada banyak ruang untuk perbaikan. Kuncinya adalah menemukan faktor-faktor yang menentukan yang mempengaruhi pilihan parameter RSI dan menerjemahkannya ke dalam indikator yang dapat diukur.

Kode Sumber Strategi
/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=5
strategy("Dynamic RSI Momentum", "DRM Strategy", process_orders_on_close = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 50 )

// +++++++++++++++++++++
// ++      INPUT      ++ 
// +++++++++++++++++++++

// Momentum
len = input.int(10, "Momentum Length", 1,      group = "Dynamic RSI Momentum")
src = input.source(close, "Source",   group = "Dynamic RSI Momentum")

min_rsi = input.int(20, "Min RSI", group = "Dynamic RSI Momentum")
max_rsi = input.int(50, "Max RSI", group = "Dynamic RSI Momentum")

upLvl = input.float(70, "OverBought", 0, 100, group = "Dynamic RSI Momentum")
dnLvl = input.float(30, "OverSold",   0, 100, group = "Dynamic RSI Momentum")

// +++++++++++++++++++++
// ++   CALCULATION   ++ 
// +++++++++++++++++++++

// RMA Function
rmaFun(src, len) =>
    sma   = ta.sma(src, len) 
	alpha = 1/len
	sum   = 0.0
	sum  := na(sum[1]) ? sma : alpha * src + (1 - alpha) * nz(sum[1])

// RSI Function 
rsiFun(src, len) =>     
    100 - 100 / (1 + rmaFun(src - src[1] > 0 ? src - src[1] : 0, len) / 
                     rmaFun(src[1] - src > 0 ? src[1] - src : 0, len))

// Momentum
momVal = src - src[len]

// Calculation Price vs Momentum
corr  = ta.correlation(src, momVal, len)
corr := corr > 1 or corr < -1 ? float(na) : corr

rsiLen = 0
rsiLen := int(min_rsi + nz(math.round((1 - corr) * (max_rsi-min_rsi) / 2, 0), 0))

rsiMom = rsiFun(src, rsiLen)


// +++++++++++++++++++++
// ++    STRATEGY     ++ 
// +++++++++++++++++++++

long  = ta.crossover(rsiMom, dnLvl)
short = ta.crossunder(rsiMom, upLvl) 


// +++> Long <+++++
if long and not na(rsiMom)
    strategy.entry("Long", strategy.long)

// +++> Short <+++++
if short and not na(rsiMom)
    strategy.entry("Short", strategy.short)

// +++++++++++++++++++++
// ++      PLOT       ++ 
// +++++++++++++++++++++

plot(rsiMom, "Dynamic RSI Momentum", rsiMom < dnLvl ? color.green : rsiMom > upLvl ? color.red : color.yellow)

hline(50, "Mid Line", color.gray)

upperLine = hline(upLvl, "Upper Line", color.gray)
lowerLine = hline(dnLvl, "Lower Line", color.gray)
fill(upperLine, lowerLine, color.new(color.purple, 90), "Background Fill")