Strategi RSI Momentum Dinamik

Penulis:ChaoZhang, Tarikh: 2023-10-07 15:47:42
Tag:

Ringkasan

Idea teras strategi ini adalah untuk menjadikan tempoh penyelarasan penunjuk RSI dinamik, menyesuaikan secara automatik berdasarkan korelasi antara harga dan momentum, dengan itu meningkatkan kegunaan penunjuk RSI.

Logika Strategi

Strategi ini mula-mula mengira momentum harga, kemudian mengira pekali korelasi antara harga dan momentum. Apabila pekali korelasi hampir 1, ia bermakna harga dan momentum sangat positif korelasi. Apabila pekali korelasi hampir -1, ia bermakna harga dan momentum sangat negatif korelasi.

Berdasarkan korelasi antara harga dan momentum, tempoh penyelarasan penunjuk RSI boleh diselaraskan. Apabila korelasi tinggi, tempoh RSI yang lebih pendek digunakan. Apabila korelasi rendah, tempoh RSI yang lebih lama digunakan.

Khususnya, strategi ini menetapkan julat tempoh RSI menjadi 20-50 secara lalai. Selepas mengira pekali korelasi antara harga dan momentum, ia menggunakan pemetaan linear untuk memetakan pekali korelasi ke julat 20-50 sebagai tempoh penyelarasan RSI akhir.

Ini membolehkan parameter RSI disesuaikan secara automatik berdasarkan keadaan pasaran. Apabila perubahan harga berkorelasi kuat dengan perubahan momentum, RSI tempoh yang lebih pendek digunakan untuk menjadikannya lebih sensitif. Apabila korelasi lemah, RSI tempoh yang lebih lama digunakan untuk mengurangkan kesan bunyi pada isyarat.

Analisis Kelebihan

  • Penyesuaian parameter dinamik menyesuaikan diri dengan perubahan pasaran
  • Mengelakkan batasan penunjuk tempoh tetap
  • Tempoh pelinciran dioptimumkan secara automatik, tidak perlu memilih secara manual parameter terbaik
  • Julat tempoh RSI yang boleh dikonfigurasikan berfungsi untuk produk yang berbeza

Analisis Risiko

  • Pengiraan korelasi sendiri memperkenalkan kelewatan, mungkin terlepas titik perubahan harga
  • Hanya mempertimbangkan hubungan harga-momentum terlalu sederhana, mengabaikan faktor lain
  • Julat tempoh RSI lalai mungkin tidak sesuai dengan semua produk, memerlukan pengoptimuman
  • Pertimbangkan untuk memasukkan faktor lain seperti turun naik untuk menyesuaikan tempoh RSI

Arahan pengoptimuman

  • Cuba kaedah pengiraan korelasi yang berbeza untuk mengurangkan lag
  • Pertimbangkan lebih banyak faktor, bukan hanya korelasi untuk menentukan tempoh RSI
  • Ujian semula pada produk yang berbeza untuk mencari julat tempoh RSI lalai yang optimum
  • Boleh menetapkan berat faktor korelasi, bukannya pemetaan linear semata-mata
  • Tambah penapis untuk mengelakkan tempoh RSI yang tidak sesuai dalam persekitaran pasaran tertentu

Ringkasan

Idea penyesuaian dinamik tempoh pelunturan RSI adalah perlu dipelajari, tetapi pelaksanaan khusus mempunyai banyak ruang untuk peningkatan. Kuncinya adalah untuk mengenal pasti faktor-faktor yang menentukan yang mempengaruhi pemilihan parameter RSI, dan menukarnya menjadi penunjuk yang boleh diukur. Juga, jangan hanya bergantung pada model, pengoptimuman empirikal julat parameter diperlukan. Secara keseluruhan ini adalah idea yang sangat inovatif, dengan potensi praktikal selepas pengoptimuman dan penambahbaikan lanjut.


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



Lebih lanjut