Strategi perdagangan kuantitatif berbilang faktor yang menggabungkan RSI dan CCI dinamik


Tarikh penciptaan: 2023-11-27 18:54:34 Akhirnya diubah suai: 2023-11-27 18:54:34
Salin: 0 Bilangan klik: 732
1
fokus pada
1617
Pengikut

Strategi perdagangan kuantitatif berbilang faktor yang menggabungkan RSI dan CCI dinamik

Gambaran keseluruhan

Strategi ini mewujudkan strategi perdagangan kuantitatif yang didorong oleh pelbagai faktor dengan menggabungkan indikator RSI yang dinamik, indikator CCI, dan garis purata MA berganda. Strategi ini mengambil kira pelbagai dimensi seperti trend, overbought dan oversold secara komprehensif, membuat keputusan dan menghasilkan isyarat perdagangan.

Prinsip Strategi

Penunjuk teknikal

  • Garis purata MA: mengira purata harga penutupan dalam tempoh tertentu untuk menilai trend harga
  • Indeks RSI yang agak lemah: menilai kawasan overbought dan oversold
  • Indeks CCI: Pertimbangan Terlalu Beli dan Terlalu Jual
  • Indeks Stoch KDJ: menilai penunjuk rawak yang menyimpang dari trend utama

Isyarat dagangan

Sinyal beli: MA12 memakai MA26, CCI di bawah 100 (terlalu banyak), Stoch KDJ di bawah 80 (terlalu banyak)

Sinyal jual: RSI menembusi penurunan dinamik, Stoch KDJ lebih tinggi daripada 80 (Overbought)

Kelebihan Strategik

  1. Pemanduan pelbagai faktor, penilaian komprehensif, pengurangan isyarat palsu
  2. Dinamika penurunan nilai sellable, pengesanan dalam masa nyata
  3. Gabungan trend, acak, dan pelbagai petunjuk teknologi utama
  4. Fleksibiliti yang tinggi dengan pelbagai set parameter

Risiko Strategik

  1. Komposisi pelbagai faktor terlalu rumit, parameter yang sukar untuk disesuaikan
  2. Prestasi strategi sangat berkaitan dengan pilihan parameter
  3. Memperbaiki parameter dengan ketat mengikut proses kuantitatif
  4. Terdapat risiko yang lebih tinggi untuk kecocokan kurva

Pengoptimuman Strategi

  1. Lebih banyak set data yang menguji strategi ketahanan
  2. Ujian gabungan pelbagai parameter untuk mencari parameter optimum
  3. Meningkatkan mekanisme penangguhan kerugian untuk mengurangkan pengeluaran maksimum
  4. Meningkatkan kawalan kedudukan untuk mengelakkan kejatuhan
  5. Ujian kesesuaian kontrak pelbagai jenis

ringkaskan

Strategi ini menggunakan pelbagai indikator teknikal dan penilaian yang didorong oleh pelbagai faktor, mencari parameter terbaik melalui penyesuaian parameter dan pengesahan statistik yang ketat, yang dapat memberikan kesan strategi yang lebih baik. Tetapi tahap kerumitan yang lebih tinggi diperlukan untuk mengelakkan risiko overfit, sambil mengawal kedudukan dan hentian kerugian untuk mengurangkan pengeluaran maksimum.

Kod sumber strategi
/*backtest
start: 2023-11-19 00:00:00
end: 2023-11-26 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="ATOM2.0", shorttitle="ATOM V2.0", overlay=false, default_qty_type=strategy.cash, currency=currency.USD, initial_capital=200, default_qty_type=strategy.cash, default_qty_value=100, pyramiding=10)

// Set Parameter MA12
len12 = input(12, minval=1, title="Length")
src12 = input(close, title="Source")
ma12 = sma(src12, len12)
//plot(ma12, color=color.blue, title="MA12")

// Set Parameter MA26
len26 = input(26, minval=1, title="Length")
src26 = input(close, title="Source")
ma26 = sma(src26, len26)
//plot(ma26, color=color.orange, title="MA12")

//Stochastic RSI 14,3,3
smoothK_1 = input(3, minval=1)
smoothD_1 = input(3, minval=1)
lengthRSI = input(14, minval=1)
lengthStoch = input(14, minval=1)
src_1 = input(close, title="RSI Source_1")

rsi1 = rsi(src_1, lengthRSI)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK_1)
d = sma(k, smoothD_1)
//plot(k, color=color.red)
//plot(d, color=color.yellow)

//Stochastic RSI 5,4,3
smoothK_2 = input(4, minval=1)
smoothD_2 = input(3, minval=1)
lengthRSI_2 = input(5, minval=1)
lengthStoch_2 = input(5, minval=1)
src_2 = input(close, title="RSI Source_2")

rsi2 = rsi(src_2, lengthRSI_2)
k_2 = sma(stoch(rsi2, rsi2, rsi2, lengthStoch_2), smoothK_2)
d_2 = sma(k_2, smoothD_2)
//plot(k_2, color=color.white)
//plot(d_2, color=color.green)

// CCI
cci = cci(close,26)
//plot(cci,color=color.blue)

// Dynamic RSI
DZbuy = 0.1
DZsell = 0.1
Period = 14
Lb = 60

RSILine = rsi(close,Period)
jh = highest(RSILine, Lb)
jl = lowest(RSILine, Lb)
jc = (wma((jh-jl)*0.5,Period) + wma(jl,Period))
Hiline = jh - jc * DZbuy
Loline = jl + jc * DZsell
R = (4 * RSILine + 3 * RSILine[1] + 2 * RSILine[2] + RSILine[3] ) / 10

plot(R, title='R', color=color.white, linewidth=1, transp=0)
plot(Hiline, title='Hiline', color=color.yellow,  linewidth=1, transp=0)
plot(Loline, title='Loline', color=color.yellow, linewidth=1, transp=0)
plot(jc, title='Jc', color=color.purple,  linewidth=1, transp=50)

col_1 = R > Hiline ? color.red:na
col_2 = R < Loline ? color.green:na

fill(plot(R, title='R', color=color.white, linewidth=1, transp=0), plot(Hiline, title='Hiline', color=color.yellow,  linewidth=1, transp=0), color=col_1,transp=0)
fill(plot(R, title='R', color=color.white, linewidth=1, transp=0), plot(Loline, title='Loline', color=color.yellow, linewidth=1, transp=0), color=col_2,transp=0)
//------------------------------------------------------------------------------
// Calculate qty
// Parameter
fund = 10           // Fund per Contract in USD
leverage = 100     // Leverage
// Buy Condition
buyCondition = (ma12>ma26 and cci<100 and k<80 and d<80 and k_2<80 and d_2<80 and crossover(k_2, d_2))
buy = (buyCondition == input(1))
alertcondition(buy, title='time to Long', message='Long!!!')
//closeBuy = (cci>100 and cci<cci[1] and cci<cci[2])
closeBuy = (crossunder(R, Hiline) and k>80)
alertcondition(closeBuy, title='Time to Close', message='Close Long')

// Submit Orders
strategy.entry(id="Long", qty=(fund*leverage)/close, long=true, when=buyCondition)
strategy.close(id="Long", when=closeBuy)