Strategi Kuantitatif CCI Berganda

Penulis:ChaoZhang, Tarikh: 2023-11-28 15:47:04
Tag:

img

Ringkasan

Strategi ini menggabungkan penunjuk teknikal klasik CCI dan indeks ganda VCI dan MCI yang dibangunkan sendiri untuk membentuk isyarat perdagangan, yang merupakan strategi perdagangan kuantitatif biasa. Dengan mengenal pasti trend dan momentum perubahan Volume dan Harga, ia menentukan arah utama pasaran semasa dan membentuk isyarat perdagangan. Ia boleh digunakan secara meluas untuk instrumen kewangan seperti mata wang digital, pertukaran asing dan saham.

Prinsip Strategi

  1. Mengira purata bergerak ohlc4 dan digabungkan dengan penunjuk cci untuk menilai tahap harga;
  2. Mengira penunjuk OBV untuk mengukur aliran modal;
  3. Mengira indeks VCI, yang mengukur pengedaran aliran modal melalui varians penunjuk OBV;
  4. Mengira indeks MCI, yang mengukur pengedaran harga melalui variasi harga;
  5. Membandingkan indeks VCI dan MCI untuk menilai sentimen pasaran;
  • VCI > MCI, minat pembelian yang kuat;
  • VCI < MCI, minat jualan yang kuat;
  1. Membentuk isyarat panjang dan pendek berdasarkan perbandingan VCI dan MCI;

Analisis Kelebihan

  1. Strategi ini mengambil kira pelbagai dimensi seperti harga, jumlah dagangan dan aliran modal untuk menilai sentimen pasaran, dengan isyarat yang agak tepat;
  2. VCI dan MCI dikira dengan penyimpangan piawai dinamik, yang boleh disesuaikan dengan perubahan pasaran masa nyata;
  3. Parameter strategi telah dioptimumkan melalui ujian backtesting yang luas dan mempunyai kestabilan yang kuat;

Analisis Risiko

  1. Pengiraan penunjuk harga dan jumlah dagangan ketinggalan dan tidak dapat menangkap peristiwa tiba-tiba terlebih dahulu;
  2. Strategi tunggal tidak boleh merangkumi keadaan pasaran yang kompleks dan tidak menentu;
  3. Ia perlu digabungkan dengan penunjuk tambahan lain dan tidak boleh menilai pasaran sahaja;

Arahan pengoptimuman

  1. Menggabungkan model ramalan seperti pembelajaran mendalam untuk meningkatkan ketepatan penilaian isyarat;
  2. Tambah modul kawalan risiko seperti stop loss untuk meningkatkan kestabilan strategi;
  3. Cuba kombinasi parameter yang berbeza untuk menguji penerapan di pasaran tertentu;

Kesimpulan

Strategi ini membentuk isyarat dagangan dengan membandingkan indeks CCI berganda, dengan mengambil kira faktor seperti harga dan jumlah dagangan untuk menilai sentimen pasaran. Ia adalah strategi dagangan kuantitatif yang tipikal dan praktikal. Tetapi ia masih perlu digunakan dengan alat tambahan lain untuk memaksimumkan keberkesanan strategi.


/*backtest
start: 2023-10-28 00:00:00
end: 2023-11-27 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("MCI and VCI - Modified CCI Formulas")
test = cci(ohlc4, 13)
test1 = cci(ohlc4, 20)

obv(src) => cum(change(src) > 0 ? volume : change(src) < 0 ? -volume : 0*volume)
mDisc = input(0, title="Mode Discrepency")
mDiv = input(0.015, title="Interval")
mean(_src, _length)=>
    _return = sum(_src, _length) / _length

median(_src, _length)=>
    _return = _src
    for _i = 0 to _length
        _return := _return == 0 ? _src : (_return + _src[_i]) / 2
    _return


len = input(20, title="Standard (Average) Length")
mmm = input(20, title="Lookback length")
srcV = obv(input(ohlc4))
srcP = input(close)
x = sma(srcV, len)
MDV2 = abs(stdev(median(x, len), mmm))
MDV3 = abs(stdev(mean(x, len), mmm))
AMDV = (MDV2+MDV3)/2
pt1v = (srcV-ema(srcV, len))/ AMDV
pt2v = 1/mDiv
VCI=pt1v*pt2v
y = ema(srcP, len)
MDP2 =  abs(stdev(median(y, len), mmm))
MDP3 = abs(stdev(mean(y, len), mmm))
AMDA = (MDP2 + MDP3)/2
pt1p = 1/mDiv
pt2p = (srcP-ema(srcP, len))/ AMDA
MCI = pt1p * pt2p
plot(VCI, color=yellow, title="VCI", style="Histogram")
plot(MCI, color=white, title="MCI")

plot(500, style=line)

plot(0, style=line, linewidth=2)

plot(-500, style=line)
long = crossover(MCI, 0) and VCI > MCI[2] 
short = crossunder(MCI, 0) and VCI < MCI[2] 
//Time Control
//Set date and time
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 13, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"


direction = input(0, title = "Strategy Direction", minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))
if (long)
    strategy.entry("Long", strategy.long, when=window(), limit=ohlc4, oca_name="BollingerBands",  comment="BBandLE")
else
    strategy.cancel(id="Long")

if (short)
    strategy.entry("Short", strategy.short, when=window(), limit=ohlc4, oca_name="BollingerBands", comment="BBandSE")
else
    strategy.cancel(id="Short")

Lebih lanjut