Strategi Kuantitatif CCI Dual

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

img

Gambaran umum

Strategi ini menggabungkan indikator teknis klasik CCI dan indeks ganda VCI dan MCI yang dikembangkan sendiri untuk membentuk sinyal perdagangan, yang merupakan strategi perdagangan kuantitatif khas. Dengan mengidentifikasi tren dan momentum perubahan Volume dan Harga, strategi ini menentukan arah utama pasar saat ini dan membentuk sinyal perdagangan.

Prinsip Strategi

  1. Menghitung ohlc4 moving average dan menggabungkan dengan indikator cci untuk menilai tingkat harga;
  2. Menghitung indikator untuk mengukur arus modal;
  3. Menghitung indeks VCI, yang mengukur distribusi arus modal melalui varian indikator obv;
  4. Menghitung indeks MCI, yang mengukur distribusi harga melalui varian harga;
  5. Membandingkan indeks VCI dan MCI untuk menilai sentimen pasar;
  • VCI > MCI, minat pembelian yang kuat;
  • VCI < MCI, minat penjualan yang kuat;
  1. Membentuk sinyal panjang dan pendek berdasarkan perbandingan VCI dan MCI;

Analisis Keuntungan

  1. Strategi ini memperhitungkan berbagai dimensi seperti harga, volume perdagangan dan arus modal untuk menilai sentimen pasar, dengan sinyal yang relatif akurat;
  2. VCI dan MCI dihitung dengan penyimpangan standar dinamis, yang dapat beradaptasi dengan perubahan pasar secara real time;
  3. Parameter strategi telah dioptimalkan melalui pengujian backtesting yang luas dan memiliki stabilitas yang kuat;

Analisis Risiko

  1. Perhitungan indikator harga dan volume perdagangan tertunda dan tidak dapat menangkap peristiwa mendadak sebelumnya;
  2. Strategi tunggal tidak dapat sepenuhnya mencakup kondisi pasar yang kompleks dan volatile;
  3. Hal ini perlu dikombinasikan dengan indikator tambahan lainnya dan tidak dapat menilai pasar saja;

Arahan Optimasi

  1. Mengintegrasikan model prediktif seperti pembelajaran mendalam untuk meningkatkan akurasi penilaian sinyal;
  2. Menambahkan modul pengendalian risiko seperti stop loss untuk meningkatkan stabilitas strategi;
  3. Mencoba kombinasi parameter yang berbeda untuk menguji penerapan di pasar tertentu;

Kesimpulan

Strategi ini membentuk sinyal perdagangan dengan membandingkan indeks CCI ganda, dengan mempertimbangkan faktor-faktor seperti harga dan volume perdagangan untuk menilai sentimen pasar. Ini adalah strategi perdagangan kuantitatif yang khas dan praktis.


/*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 banyak