← Maqolalarga qaytish
July 12, 2026
5 daqiqa o'qish

DCC-GARCH: Pair savdo va portfel riski uchun dinamik korrelatsiyalar

#volatility
#GARCH
#DCC
#correlation
#portfolio
#pairs-trading
#crypto

Ko'pchilik kripto deskidan BTC va ETH o'rtasidagi korrelatsiyani so'rasangiz, sizga bitta raqam beriladi — 0.8, balki 0.75 — allaqachon kim ham tanlaganini eslamaydigan qandaydir oyna bo'yicha hisoblangan. Bu raqam yolg'on, yoki hech bo'lmaganda xavfli soddalashtirish. Namunaviy korrelatsiya — bu haqiqiy bog'liqlik strukturasi doimiy ravishda o'zgarib turgan davr bo'yicha o'rtacha ko'rsatkich. Tinch bozorlarda BTC va ETH bir-biridan yetarlicha uzoqlashadiki, bozorga neytral pair jozibali ko'rinadi. Likvidatsiya kaskadida esa ular bir-biriga va hamma narsaga qulflanadi, va siz to'lagan diversifikatsiya aynan unga muhtoj bo'lgan lahzada bug'lanib ketadi.

Bu nozik effekt emas. 2022 yildagi istalgan tushishni oling — mayda LUNA qulashi, iyunda 3AC pozitsiyalarining yopilishi, noyabrda FTX inqirozi — va siz eng yirik 20 tokendagi o'rtacha juftlik korrelatsiyasi bir necha kun ichida 0.4-0.6 diapazonidan 0.9+ ga qarab ko'chib borishini ko'rasiz. Korrelatsiya ba'zan noto'g'ri baholanadigan doimiy son emas; u o'zining dinamikasi, o'z klasterlanishi va o'z rejimlariga ega vaqt qatoridir. Uni skalyar sifatida ko'rish — bitta aktiv uchun doimiy volatillikni faraz qilishning ko'pkomponentli analogidir, va bu xatoni biz ushbu seriyaning 1-qismida allaqachon barbod qilganmiz.

Ushbu maqola to'rt qismdan iborat volatillik seriyasining 3-qismidir. 1-qism arch kutubxonasi yordamida bir o'lchamli GARCH(1,1) qurdi va volatillik qanday klasterlanishi va o'rtachaga qaytishini ko'rsatdi. 2-qism leverage effektini va qalin dumlarni tutish uchun asimmetriyani (GJR-GARCH, EGARCH) va Student-t innovatsiyalarini qo'shdi. Bu yerda esa biz ko'pko'lamli sohaga o'tamiz: Engle'ning Dinamik Shartli Korrelatsiya (DCC) modelidan foydalanib, butun shartli kovariatsiya matritsasi HtH_t ni uning evolyutsiyasi bo'yicha modellashtiramiz. Bu bizga skalyar korrelatsiya hech qachon bermagan ikkita narsani beradi — pair savdo uchun dinamik hedge nisbati va riskka asoslangan taqsimlash uchun haqqoniy, vaqt bo'yicha o'zgaruvchan portfel dispersiyasi. 4-qism bir va ko'pko'lamli bashoratlarni pozitsiya hajmini belgilash qoidasiga bog'laydigan volatillikka yo'naltirilgan backtest bilan seriyani yakunlaydi.

Biz sizning 1 va 2-qismlarni o'qib chiqqaningizni faraz qilamiz, shuning uchun bir o'lchamli GARCH ni qayta chiqarmaymiz. Agar sizga qo'shma dum xatti-harakati kerak bo'lsa — ikki aktivning o'z 1% kvantilini birgalikda buzish ehtimoli — bu kopula savoli, va biz uni Qo'shma risk uchun kopula modellari maqolasida yoritganmiz. DCC va kopulalar bir-birini to'ldiradi: kopula sizga statik, ammo moslashuvchan dum-bog'liqlik strukturasini beradi, DCC esa butun korrelatsiya matritsasining boshqariladigan vaqt qatorini beradi. Ushbu maqola aynan ikkinchisiga bag'ishlangan.

Nima uchun kripto bozorida statik korrelatsiya ishlamaydi

Mexanizmga o'tishdan oldin, nima buzilishini aniq belgilaymiz. [tw,t][t-w, t] oynasi bo'yicha bitta namunaviy korrelatsiya ρ^\hat{\rho} quyidagini baholaydi:

ρ^ij=s(ri,srˉi)(rj,srˉj)s(ri,srˉi)2s(rj,srˉj)2\hat{\rho}_{ij} = \frac{\sum_{s} (r_{i,s} - \bar{r}_i)(r_{j,s} - \bar{r}_j)}{\sqrt{\sum_s (r_{i,s}-\bar{r}_i)^2}\sqrt{\sum_s (r_{j,s}-\bar{r}_j)^2}}

Bu uchta yashirin farazni o'z ichiga oladi, va ularning barchasi kripto uchun noto'g'ri:

  1. Bog'liqlikning statsionarligi. Oynada bitta haqiqiy ρ\rho bor deb hisoblanadi. Aslida bog'liqlikda rejimlar mavjud — 0.5 atrofidagi tinch bozor rejimi va 0.95 atrofidagi stress rejimi — va ρ^\hat{\rho} ularni ma'nosiz o'rta qiymatga aralashtirib yuboradi.
  2. Doimiy marginal volatillik. Pearson korrelatsiyasi — bu normallashtirilgan kovariatsiya. Agar σi,t\sigma_{i,t} va σj,t\sigma_{j,t} ning o'zi harakatlanayotgan bo'lsa (ular harakatlanadi — bu 1 va 2-qismlarning butun asosi), unda hatto doimiy kovariatsiya ham vaqt bo'yicha o'zgaruvchan korrelatsiya beradi, va aksincha. Ularni ostidagi volatillik modelisiz ajratib bo'lmaydi.
  3. Bozor yo'nalishi bo'yicha simmetriya. Korrelatsiya tushishlarda ko'tarilishlarga qaraganda ko'proq o'sadi. Bu leverage effektining ko'pko'lamli o'xshashi. Sirg'anuvchi oyna buni ifoda eta olmaydi, agar u sof shovqinga aylanib qolmasa.

Sirg'anuvchi oyna yechimi — ρ^\hat{\rho} ni oxirgi 30 yoki 60 kun bo'yicha qayta hisoblash — bir muammoni boshqasiga almashtiradi. Qisqa oynalar tez javob beradi, ammo shovqinli va haqiqiy sinishdan orqada qoladi; uzun oynalar barqaror, ammo eskirgan. Yomonroq tomoni shundaki, dd ta aktiv bo'yicha sirg'anuvchi korrelatsiya matritsasi, uni siqish yoki tuzatishni boshlagach, ijobiy yarim-aniqlangan bo'lib qolishi kafolatlanmaydi, bu esa har qanday keyingi optimallashtiruvchini buzadi. Bizga (a) har bir aktiv uchun to'g'ri volatillik jarayoni bilan boshqariladigan, (b) har bir qadamda tuzilishi bo'yicha to'g'ri korrelatsiya matritsasini ishlab chiqaradigan, va (c) oyna uzunligini shapkadan tanlash o'rniga eng katta ehtimollik bo'yicha baholanadigan parametrlarga ega model kerak. Bu model — DCC-GARCH.

Ko'pko'lamli muammo: shartli kovariatsiya matritsasi

rtRdr_t \in \mathbb{R}^d ni tt vaqtidagi dd ta aktiv uchun qaytimlar vektori, shartli o'rtacha μt\mu_t (ko'pincha faqat doimiy son yoki kichik AR had) va qoldiq ϵt=rtμt\epsilon_t = r_t - \mu_t deb olamiz. Biz quyidagini faraz qilamiz:

ϵtFt1D(0,Ht)\epsilon_t \mid \mathcal{F}_{t-1} \sim \mathcal{D}(0, H_t)

bu yerda HtH_tFt1\mathcal{F}_{t-1} axborot to'plami berilganda d×dd \times d o'lchamli shartli kovariatsiya matritsasi, va D\mathcal{D} — qandaydir shartli taqsimot (Gauss yoki, kripto uchun yaxshiroq, ko'pko'lamli Student-t). Ko'pko'lamli volatillik modellashtirishdagi hamma narsa bitta savolga turlicha javobdir: HtH_t dinamikasini har bir qadamda simmetrik ijobiy aniqlangan holda saqlab, parametrlar portlashisiz qanday parametrlash mumkin?

Ikki klassik javob muammoning qanchalik murakkabligini ko'rsatadi.

VECH

VECH modeli (Bollerslev, Engle, Wooldridge 1988) HtH_t ning yarim-vektorizatsiyasini o'tgan kvadrat qoldiqlar va o'tgan kovariatsiyalarning chiziqli funksiyasi sifatida yozadi:

vech(Ht)=c+Avech(ϵt1ϵt1)+Bvech(Ht1)\mathrm{vech}(H_t) = c + A\,\mathrm{vech}(\epsilon_{t-1}\epsilon_{t-1}') + B\,\mathrm{vech}(H_{t-1})

bu yerda vech()\mathrm{vech}(\cdot) simmetrik matritsaning quyi uchburchagini uzunligi d(d+1)/2d(d+1)/2 bo'lgan vektorga to'playdi. Bu maksimal darajada umumiy — har bir dispersiya va kovariatsiya har bir o'tgan dispersiya va kovariatsiyaga bog'liq — va d=3d=3 dan oshgach maksimal darajada foydasiz. dd ta aktiv uchun AA va BB har biri d(d+1)2×d(d+1)2\frac{d(d+1)}{2} \times \frac{d(d+1)}{2} o'lchamli. d=5d=5 da bu ikkita 15×1515\times 15 matritsa, taxminan 450 parametr, ustiga ifodalashi ham qiyin bo'lgan ijobiy-aniqlanganlik cheklovlari. Ehtimollik yuzasi botqoqqa aylanadi.

BEKK

BEKK modeli (Engle va Kroner 1995) kvadratik forma yordamida ijobiy aniqlanganlikni tuzilishi bo'yicha kafolatlaydi:

Ht=CC+Aϵt1ϵt1A+BHt1BH_t = C'C + A'\,\epsilon_{t-1}\epsilon_{t-1}'\,A + B'\,H_{t-1}\,B

bu yerda CC — yuqori uchburchak matritsa. Har bir had kvadratik forma bo'lgani uchun, CC0C'C \succ 0 bo'lguncha Ht0H_t \succ 0 avtomatik ravishda bajariladi. BEKK VECH ga qaraganda tejamliroq, ammo baribir O(d2)O(d^2) parametr sifatida o'sadi — AA va BB matritsalari har biri d×dd \times d. d=10d=10 da siz 200+ parametrni MLE orqali shovqinli kunlik kripto ma'lumotlar ustida birgalikda baholayapsiz, va optimallashtiruvchi biror mazmunli natijaga yaqinlashishiga hech qanday kafolat yo'q. Amalda to'liq BEKK d4d \le 4 bilan chegaralangan, va hatto shunda ham odamlar ko'pgina o'zaro dinamikani yo'q qiladigan "diagonal" yoki "skalyar" cheklovlardan foydalanadi.

Bu ko'pko'lamli GARCH uchun o'lchamlilik la'nati: parametrlar soni kvadratik o'sadi, ammo ma'lumotlardagi axborot miqdori bunday o'smaydi. Sizga muhim bo'lgan aktivlar tugashidan ancha oldin erkinlik darajalari tugaydi. 10-30 tokenli har qanday kripto portfeli VECH yoki BEKK uchun butunlay yetib bo'lmaydigan.

Engle topgan yechim — HtH_t ni to'g'ridan-to'g'ri modellashtirishga urinishni to'xtatib, uni allaqachon arzon baholay oladigan qismlarga faktorlashtirishdir.

Engle'ning DCC (2002): ikki bosqichli dekompozitsiya

Bollerslev'ning Doimiy Shartli Korrelatsiya (CCC) modeli (1990) birinchi tejamli faktorlashtirish bo'lgan. U quyidagicha yoziladi:

Ht=DtRDtH_t = D_t\, R\, D_t

bu yerda Dt=diag(σ1,t,,σd,t)D_t = \mathrm{diag}(\sigma_{1,t}, \ldots, \sigma_{d,t}) — shartli standart og'ishlarning diagonal matritsasi (har bir aktiv uchun bitta bir o'lchamli GARCH), va RRdoimiy korrelatsiya matritsasi. Bu katta soddalashtirish: siz dd ta mustaqil bir o'lchamli GARCH modellarini moslaydi, so'ng standartlashtirilgan qoldiqlarning yagona namunaviy korrelatsiya matritsasini baholaysiz. RR to'g'ri korrelatsiya matritsasi bo'lib, barcha σi,t>0\sigma_{i,t} > 0 bo'lsa, ijobiy aniqlanganlik avtomatik ravishda ta'minlanadi.

CCC ning muammosi aynan nomida — korrelatsiya doimiy, va bu aynan biz maqolani ochganda rad etgan farazdir. Engle'ning Dinamik Shartli Korrelatsiya (2002) modeli CCC ning go'zal faktorlashtirilishini saqlab, korrelatsiya matritsasiga nafas olish imkonini beradi:

Ht=DtRtDtH_t = D_t\, R_t\, D_t

Endi RtR_t vaqt bo'yicha o'zgaruvchan. Zukkolik shundaki, volatilliklar va korrelatsiyalar ikki alohida bosqichda baholanadi, shuning uchun biz hech qachon to'liq O(d2)O(d^2) qo'shma optimallashtirish bilan yuzma-yuz kelmaymiz.

1-bosqich: har bir aktiv uchun bir o'lchamli GARCH

Har bir ii aktivi uchun 1 va 2-qismlardagi kabi bir o'lchamli GARCH modelini moslang — GARCH(1,1), GJR-GARCH yoki Student-t innovatsiyali EGARCH, ushbu qator uchun eng yaxshi mos kelgani. Bu bizga shartli dispersiyalarni σi,t2\sigma_{i,t}^2 va shu bilan Dt=diag(σ1,t,,σd,t)D_t = \mathrm{diag}(\sigma_{1,t}, \ldots, \sigma_{d,t}) ni beradi.

Moslangan modellardan biz standartlashtirilgan qoldiqlarni chiqarib olamiz:

zi,t=ϵi,tσi,tz_{i,t} = \frac{\epsilon_{i,t}}{\sigma_{i,t}}

Tuzilishi bo'yicha har bir zi,tz_{i,t} (taxminan) birlik shartli dispersiyaga ega. Ularni zt=(z1,t,,zd,t)z_t = (z_{1,t}, \ldots, z_{d,t})' vektoriga to'playmiz. Ushbu standartlashtirilgan qoldiqlar korrelatsiya bosqichi uchun xom material bo'ladi — ulardan individual volatillik dinamikasi olib tashlangan, shuning uchun qolgan har qanday birgalikdagi harakat volatillik artefakti emas, sof bog'liqlikdir. (Bu kopula maqolasida marginallarni moslashdan oldin ishlatiladigan PIT uslubidagi mantiqning aynan o'zi; bu yerda biz to'liq bir tekis taqsimotgacha borish o'rniga standartlashtirishda to'xtaymiz.)

2-bosqich: DCC korrelatsiya rekursiyasi

Biz QtQ_t yordamchi jarayonini modellashtiramiz, bu d×dd \times d simmetrik ijobiy aniqlangan matritsa bo'lib, standartlashtirilgan qoldiqlarning tashqi ko'paytmalari bilan boshqariladigan GARCH-o'xshash rekursiyaga ega:

Qt=(1ab)Qˉ+azt1zt1+bQt1Q_t = (1 - a - b)\,\bar{Q} + a\, z_{t-1} z_{t-1}' + b\, Q_{t-1}

bu yerda:

  • Qˉ=1Tt=1Tztzt\bar{Q} = \frac{1}{T}\sum_{t=1}^{T} z_t z_t' — standartlashtirilgan qoldiqlarning shartsiz korrelatsiya matritsasi (bu korrelatsiya nishonlash deb ataladi — quyida batafsilroq),
  • a0a \ge 0 — bugungi shok zt1zt1z_{t-1}z_{t-1}' korrelatsiyani qanchalik kuchli tortishini boshqaradi,
  • b0b \ge 0 — davomiylikni boshqaradi — kechagi Qt1Q_{t-1} ning qanchasi keyingiga o'tadi,
  • va o'rtachaga qaytish cheklovi a+b<1a + b < 1 (bunda a,b>0a, b > 0), bu bir o'lchamli GARCH dagi α+β<1\alpha + \beta < 1 ga to'g'ridan-to'g'ri o'xshaydi.

E'tibor bering, struktura xuddi skalyar GARCH(1,1) rekursiyasiga o'xshaydi, ammo matritsalar ustida: uzoq muddatli langar Qˉ\bar{Q}, shok hadi va davomiylik hadi. U ijobiy-yarim-aniqlangan matritsalarning (Qˉ\bar{Q}, rank-1 tashqi ko'paytma, va o'tgan Qt1Q_{t-1}) qavariq kombinatsiyasi bo'lgani uchun, Qˉ0\bar{Q} \succ 0 va vaznlar manfiy bo'lmasa, QtQ_t ijobiy aniqlangan bo'lib qoladi. Aynan shu narsa bizga bepul kafolatlangan to'g'ri kovariatsiya matritsalarini beradi.

QtQ_t deyarli korrelatsiya matritsasi, ammo unchalik emas — uning diagonali aniq 1 ga teng emas. Shuning uchun uni normallashtiramiz:

Rt=(diag(Qt))1/2Qt(diag(Qt))1/2R_t = \left(\mathrm{diag}(Q_t)\right)^{-1/2}\, Q_t\, \left(\mathrm{diag}(Q_t)\right)^{-1/2}

Elementlar bo'yicha, ii va jj aktivlari orasidagi shartli korrelatsiya:

ρij,t=qij,tqii,tqjj,t\rho_{ij,t} = \frac{q_{ij,t}}{\sqrt{q_{ii,t}\, q_{jj,t}}}

Ushbu RtR_t — har bir vaqt qadamida tuzilishi bo'yicha to'g'ri korrelatsiya matritsasi — birlik diagonal, diagonaldan tashqari elementlar [1,1][-1,1] oralig'ida, ijobiy aniqlangan. To'liq shartli kovariatsiyani qayta yig'amiz:

Ht=DtRtDt,hij,t=ρij,tσi,tσj,tH_t = D_t\, R_t\, D_t, \qquad h_{ij,t} = \rho_{ij,t}\,\sigma_{i,t}\,\sigma_{j,t}

Ushbu oxirgi elementlar bo'yicha forma siz doimo ishlatadigan narsa: ikki aktivning shartli kovariatsiyasi ularning dinamik korrelatsiyasi ko'paytirilgan har birining dinamik volatilligiga teng. O'ng tomondagi har bir ingredient vaqt bo'yicha o'zgaruvchan va siz baholay oladigan modeldan keladi.

Butun model d=2d = 2 yoki d=50d = 50 bo'lishidan qat'i nazar faqat ikkita korrelatsiya parametriga ega — aa va bb. Volatillik tomoni chiziqli miqyoslanadi (har bir aktiv uchun bitta bir o'lchamli GARCH, har biri ~4-5 parametr bilan, barchasi mustaqil va oson parallellashtiriladigan tarzda moslashtiriladi). Aynan shuning uchun DCC BEKK va VECH imkoni bo'lmagan joyda miqyoslanadi: o'lchamlilik la'nati Qˉ\bar{Q} bilan chegaralangan, u optimallashtirilmaydi, balki (namunaviy baho sifatida qo'yilib) nishonlanadi.

Skalyar cheklov va uning narxi

a,ba, b skalyarlari shuni anglatadiki, har bir aktiv jufti bir xil korrelatsiya dinamikasiga ega — bir xil moslashish tezligi va bir xil davomiylik. BTC-ETH korrelatsiyasi va DOGE-SHIB korrelatsiyasi iqtisodiyoti farq qilsa ham bir xil ritmda harakatlanadi. Bu boshqariladiganlik uchun to'lanadigan narx, va odatda bu maqbul narx. Umumlashmalar (matritsali A,BA, B bilan Umumlashgan DCC; Cappiello-Engle-Sheppard asimmetrik DCC) buni parametrlar va baholash barqarorligi hisobiga yumshatadi. Biz quyida aDCC haqida gapiramiz.

DCC kvazi-log-ehtimollik

aa va bb ni baholash uchun bizga ehtimollik kerak. Engle'ning asosiy natijasi shundaki, Gauss log-ehtimolligi volatillik qismi va korrelatsiya qismiga ajraladi, va bu ikki bosqichli baholovchini asoslaydi. ϵtFt1N(0,Ht)\epsilon_t \mid \mathcal{F}_{t-1} \sim \mathcal{N}(0, H_t) deb faraz qilib, tt vaqtidagi log-ehtimollik hissasi:

t=12(dlog(2π)+logHt+ϵtHt1ϵt)\ell_t = -\frac{1}{2}\left( d\log(2\pi) + \log|H_t| + \epsilon_t' H_t^{-1} \epsilon_t \right)

Ht=DtRtDtH_t = D_t R_t D_t ni o'rniga qo'yamiz. U holda Ht=Dt2Rt|H_t| = |D_t|^2 |R_t| va Ht1=Dt1Rt1Dt1H_t^{-1} = D_t^{-1} R_t^{-1} D_t^{-1}, va zt=Dt1ϵtz_t = D_t^{-1}\epsilon_t dan foydalanib:

t=12(dlog(2π)+2logDt+logRt+ztRt1zt)\ell_t = -\frac{1}{2}\left( d\log(2\pi) + 2\log|D_t| + \log|R_t| + z_t' R_t^{-1} z_t \right)

Endi ztztz_t'z_t ni qo'shib va ayirib, uni bo'lamiz:

t=12(dlog(2π)+2logDt+ϵtDt2ϵt)volatillik qismi   tV  12(logRt+ztRt1ztztzt)korrelatsiya qismi   tC\ell_t = \underbrace{-\frac{1}{2}\left( d\log(2\pi) + 2\log|D_t| + \epsilon_t' D_t^{-2}\epsilon_t \right)}_{\text{volatillik qismi }\;\ell_t^{V}} \;\underbrace{-\frac{1}{2}\left( \log|R_t| + z_t' R_t^{-1} z_t - z_t' z_t \right)}_{\text{korrelatsiya qismi }\;\ell_t^{C}}

Volatillik qismi tV\ell_t^V faqat bir o'lchamli GARCH parametrlariga bog'liq (DtD_t orqali) — uni maksimallashtirish aynan dd ta mustaqil bir o'lchamli GARCH modelini moslash bo'lib, biz buni 1-bosqichda qildik. Korrelatsiya qismi tC\ell_t^C aa va bb ga bog'liq (RtR_t orqali), 1-bosqichdan olingan standartlashtirilgan qoldiqlar berilgan holda. Shuning uchun 2-bosqichda biz faqat quyidagini maksimallashtiramiz:

LC(a,b)=12t=1T(logRt+ztRt1zt)\mathcal{L}^C(a, b) = -\frac{1}{2}\sum_{t=1}^{T}\left( \log|R_t| + z_t' R_t^{-1} z_t \right)

(ztztz_t'z_t hadi a,ba, b ga bog'liq emas, shuning uchun uni tashlab yuboramiz). Bu aktivlar sonidan qat'i nazar ikki parametrli optimallashtirish — butun mohiyat shunda. Bu kvazi-ehtimollik deb ataladi, chunki ikki bosqichli baholovchi bir xil natijali (consistent), ammo to'liq samarali emas; standart xatolar tuzatishga muhtoj (Engle va Sheppard 2001), ammo signal generatsiyasi uchun nuqta baholari muhim.

Kripto uchun Gauss innovatsiyalari dum riskini kamsitib ko'rsatadi. Ko'pko'lamli Student-t ehtimollikni almashtirish t\ell_t ga oddiy o'zgarish (Gauss yadrosini ko'pko'lamli-tt zichligiga almashtirib va erkinlik darajalari parametri ν\nu ni qo'shish). Biz quyidagi baholovchida aniqlik uchun Gauss kvazi-ehtimollikni saqlaymiz va ν\nu qayerda kirishini eslatib o'tamiz — 1-2-qismlardagi standartlashtirish allaqachon marginallarda t-innovatsiyalarini ishlatgan, bu dum foydasining ko'pini qamrab oladi.

Python implementatsiyasi

Qattiq, ammo muhim fakt: arch kutubxonasi ko'pko'lamli GARCH yoki DCC ni bajarmaydi. arch — ajoyib bir o'lchamli dvigatel (biz aynan shuning uchun unga tayanamiz), ammo unda dcc_model yo'q. Sizning amaliy variantlaringiz:

  1. arch ustida o'z DCC ingizni yaratingarch bilan bir o'lchamli modellarni moslang, standartlashtirilgan qoldiqlarni chiqarib oling, QQ-rekursiyasi va korrelatsiya kvazi-ehtimolligini NumPy/SciPy da amalga oshiring, va ikkita skalyarni optimallashtiring. Quyida biz shuni qilamiz. Bu taxminan 60 qator va butunlay tushunarli.
  2. mgarch PyPI paketi — yengil sof-Python DCC-GARCH implementatsiyasi. Tez moslash uchun qulay, GJR marginallari yoki t-innovatsiyalarini aniq ulash istagida kamroq moslashuvchan.
  3. R ning rmgarch (Alexios Galanos) — mos yozuv implementatsiyasi. dccspec / dccfit DCC, aDCC, GARCH-kopula, Student-t va to'g'ri standart xatolarni qo'llab-quvvatlaydi. Agar siz jiddiy ko'pko'lamli volatillik tadqiqoti qilayotgan bo'lsangiz, rmgarch (majburiy bo'lsa Python dan rpy2 orqali chaqiriladigan) — oltin standart.

Biz 1-variantni quramiz, chunki u har bir harakatlanuvchi qismni ochiq qiladi va 1-2-qismlardagi bir o'lchamli ko'nikmalardan qayta foydalanadi.

1-bosqich: arch bilan bir o'lchamli GARCH marginallarni moslash

import numpy as np
import pandas as pd
from arch import arch_model
from scipy.optimize import minimize

def fetch_returns(symbols, start="2022-01-01", end="2025-12-31"):
    """
    Daily log returns for a list of crypto symbols.
    Replace with your data source (ccxt for 24/7 exchange data,
    yfinance for a quick sketch).
    """
    import yfinance as yf
    px = yf.download([f"{s}-USD" for s in symbols],
                     start=start, end=end)["Close"]
    px.columns = symbols
    rets = np.log(px / px.shift(1)).dropna()
    return rets

symbols = ["BTC", "ETH", "SOL", "BNB"]
returns = fetch_returns(symbols)

def fit_univariate(series, dist="t"):
    """
    Fit GJR-GARCH(1,1) with Student-t innovations (Part 2 model).
    Returns the fitted result and the *scaled* series it was fit on.
    We scale returns by 100 for the optimizer's numerical health,
    exactly as in Parts 1 and 2.
    """
    scaled = series * 100.0
    model = arch_model(scaled, mean="Constant",
                       vol="GARCH", p=1, o=1, q=1, dist=dist)
    res = model.fit(disp="off")
    return res

fits = {s: fit_univariate(returns[s]) for s in symbols}

Z = pd.DataFrame({s: fits[s].std_resid for s in symbols}).dropna()

Sigma = pd.DataFrame({s: fits[s].conditional_volatility
                      for s in symbols}).loc[Z.index]

print(Z.describe())

Standartlashtirilgan qoldiqlar bo'yicha tezkor mantiqiy tekshiruv muhim. Agar biror ustunning standart og'ishi 1 dan uzoq bo'lsa, yoki uning kvadratida qattiq avtokorrelyatsiya qolgan bo'lsa (zi,t2z_{i,t}^2 bo'yicha Ljung-Box), bir o'lchamli marginal noto'g'ri spetsifikatsiyalangan va DCC bosqichi ushbu xatoni meros qilib oladi. Avval marginalni tuzating — 2-qism aynan shu uchun edi.

2-bosqich: DCC rekursiyasi va kvazi-log-ehtimollik

def dcc_negloglik(params, Z):
    """
    Negative DCC quasi-log-likelihood (Gaussian) in (a, b).
    Z : (T, d) array of standardized residuals from Step 1.

    Implements:
        Q_t = (1-a-b) Qbar + a z_{t-1} z_{t-1}' + b Q_{t-1}
        R_t = diag(Q_t)^{-1/2} Q_t diag(Q_t)^{-1/2}
        LL  = -1/2 sum_t ( log|R_t| + z_t' R_t^{-1} z_t )
    with correlation targeting: Qbar = sample corr of Z.
    """
    a, b = params
    if a <= 0 or b <= 0 or a + b >= 1.0:
        return 1e10

    Z = np.asarray(Z)
    T, d = Z.shape
    Qbar = np.cov(Z, rowvar=False, bias=True)   # unconditional (targeted)
    dinv = np.diag(1.0 / np.sqrt(np.diag(Qbar)))
    Qbar = dinv @ Qbar @ dinv

    Q = Qbar.copy()          # initialize Q_1 at the target
    ll = 0.0
    for t in range(T):
        q_diag = np.sqrt(np.diag(Q))
        R = Q / np.outer(q_diag, q_diag)
        sign, logdet = np.linalg.slogdet(R)
        if sign <= 0:
            return 1e10
        z = Z[t]
        Rinv_z = np.linalg.solve(R, z)
        ll += -0.5 * (logdet + z @ Rinv_z)
        Q = (1 - a - b) * Qbar + a * np.outer(z, z) + b * Q
    return -ll

def fit_dcc(Z):
    """Estimate (a, b) by maximizing the DCC quasi-log-likelihood."""
    res = minimize(
        dcc_negloglik, x0=[0.03, 0.94], args=(np.asarray(Z),),
        method="L-BFGS-B",
        bounds=[(1e-6, 0.5), (1e-6, 0.999)],
    )
    a, b = res.x
    print(f"DCC estimates: a = {a:.4f}, b = {b:.4f}, a+b = {a+b:.4f}")
    print(f"log-likelihood: {-res.fun:.2f}")
    return a, b

a_hat, b_hat = fit_dcc(Z)

Buni BTC/ETH/SOL/BNB portfelida bir necha yillik kunlik ma'lumotlar bo'yicha ishga tushirish quyidagi shakldagi natijani beradi (quyidagi raqamlar illustrativ, aniq sanadagi tajribadan emas — buni o'z ma'lumotlaringizda ishga tushiring):

DCC estimates: a = 0.0287, b = 0.9401, a+b = 0.9688
log-likelihood: -3812.44

Buni qanday o'qish kerak:

  • a=0.029a = 0.029 kichik — korrelatsiya matritsasi bitta kunlik shokda tebranmaydi. Har bir kun RtR_t ni tashqi ko'paytma zt1zt1z_{t-1}z_{t-1}' tomon faqat ~3% ga suradi.
  • b=0.940b = 0.940 katta — korrelatsiyalar yuqori darajada davomli. Portfel bir marta stress hodisasida bog'langach, u bir muddat bog'langan holda qoladi, Qˉ\bar{Q} tomon sekin qaytadi. Bu kripto tushishlarining haqiqiy tajribasiga mos keladi: korrelatsiyalar narx barqarorlashishi bilan darhol qaytmaydi.
  • a+b=0.969<1a + b = 0.969 < 1 o'rtachaga qaytishni tasdiqlaydi. Korrelatsiya jarayoni u qaytadigan statsionar uzoq muddatli darajaga (Qˉ\bar{Q}) ega, yarim yashash muddati taxminan log(0.5)/log(a+b)22\log(0.5)/\log(a+b) \approx 22 kun. Agar siz qandaydir vaqt a+ba + b ni deyarli 1 ga teng deb baholasangiz, korrelatsiya jarayoni integrallangan — unda uzoq muddatli langar yo'q, odatda bu model cheksiz davomiylik sifatida singdirayotgan namunangiz ichidagi strukturaviy sinishning belgisi.

Deyarli birlik davomiylik va kichik shok yuklamasi barcha aktiv sinflarida kanonik DCC izi, va kripto ham bundan mustasno emas. Shuningdek, bu aynan nima uchun 30 kunlik sirg'anuvchi korrelatsiya shunday yomon o'rinbosar ekanligini ko'rsatadi: sirg'anuvchi oyna yashirin ravishda ushbu parchalanish strukturasiga umuman mos kelmaydigan aa va bb ni faraz qiladi.

Real vaqtni tejaydigan bir necha implementatsiya eslatmalari:

  • Boshlang'ich qiymat. [0.03, 0.94] dan boshlash odatiy kripto bahosini aks ettiradi: kichik aa (korrelatsiyalar shoklarga reaksiya bildiradi, ammo shiddatli emas), katta bb (korrelatsiyalar davomli). Agar sizning optimallashtiruvchingiz a+b1a+b \to 1 tomon adashib ketsa, korrelatsiya jarayoni integrallangan — bu odatda namunangizdagi strukturaviy sinish belgisidir (model davomiylik sifatida moslashtirishga urinayotgan rejim o'zgarishi).
  • Vaqtlash konvensiyasi. Sikl ichida biz RtR_t ni ztz_t ga qarshi baholaymiz va keyin QQ ni ztztz_t z_t' bilan keyingi qadam uchun yangilaymiz. Bu RtR_t ni faqat t1t-1 gacha bo'lgan axborotning funksiyasi qilib qoladi — oldinga qarash yo'q. Buni bir birlikka noto'g'ri qilish DCC ning eng keng tarqalgan xatosi bo'lib, u namunadagi mosligini sezilmasdan shishiradi.
  • Korrelatsiya nishonlash. Biz Qˉ\bar{Q} ni baholash o'rniga uni namunaviy korrelatsiya sifatida qo'yamiz. Aynan shu narsa optimallashtirishni ikki o'lchamli qiladi. Narxi shundaki, Qˉ\bar{Q} to'liq namunani ishlatadi, shuning uchun qat'iy walk-forward baholashda siz uni faqat o'quv oynasida qayta baholashingiz kerak (quyida ko'ring).

3-bosqich: korrelatsiya va kovariatsiya yo'llarini qayta tiklash

a,ba, b belgilangach, rekursiyani yana bir marta ishga tushiring, bu safar to'liq RtR_t (va HtH_t) yo'lini saqlab, shunda keyingi strategiyalar undan foydalana oladi.

def dcc_filter(Z, Sigma, a, b):
    """
    Run the DCC recursion with fixed (a,b) and return the full paths:
      R_path : (T, d, d) conditional correlation matrices
      H_path : (T, d, d) conditional covariance matrices (scaled units)
    Sigma : (T, d) conditional volatilities aligned with Z.
    """
    Z = np.asarray(Z); Sig = np.asarray(Sigma)
    T, d = Z.shape
    Qbar = np.cov(Z, rowvar=False, bias=True)
    dinv = np.diag(1.0 / np.sqrt(np.diag(Qbar)))
    Qbar = dinv @ Qbar @ dinv

    Q = Qbar.copy()
    R_path = np.empty((T, d, d))
    H_path = np.empty((T, d, d))
    for t in range(T):
        q_diag = np.sqrt(np.diag(Q))
        R = Q / np.outer(q_diag, q_diag)
        R_path[t] = R
        Dt = np.diag(Sig[t])          # D_t = diag(sigma_i,t)
        H_path[t] = Dt @ R @ Dt       # H_t = D_t R_t D_t
        z = Z[t]
        Q = (1 - a - b) * Qbar + a * np.outer(z, z) + b * Q
    return R_path, H_path

R_path, H_path = dcc_filter(Z, Sigma, a_hat, b_hat)

i, j = symbols.index("BTC"), symbols.index("ETH")
rho_btc_eth = pd.Series(R_path[:, i, j], index=Z.index, name="rho_BTC_ETH")
print(rho_btc_eth.describe())
print("min/max correlation:", rho_btc_eth.min().round(3),
      rho_btc_eth.max().round(3))

rho_btc_eth qatori butun mashqning natijasi: bitta raqam o'rniga, endi sizda chizishingiz, chegara qo'yishingiz yoki strategiyaga uzatishingiz mumkin bo'lgan kunlik korrelatsiya bor. Haqiqiy kripto ma'lumotlarida siz odatda uni tinch davrlarda taxminan 0.5 dan stress davrida 0.9 dan yuqoriga qadar cho'zilganini ko'rasiz — aynan bitta namunaviy korrelatsiya o'rtachalashtirib yashiradigan tarqoqlik.

Bir qadam oldinga bashorat

Jonli savdo uchun sizga hozirgi mavjud axborotdan keyingi davr Ht+1H_{t+1} kerak. Volatillik tomoni har bir arch modelining bir qadamli bashoratidan keladi; korrelatsiya tomoni esa rekursiyaning yana bir aylanishi:

def dcc_forecast_next(Z, a, b, fits, symbols):
    """One-step-ahead H_{t+1} using info through the last observation."""
    Z = np.asarray(Z); T, d = Z.shape
    Qbar = np.cov(Z, rowvar=False, bias=True)
    dinv = np.diag(1.0 / np.sqrt(np.diag(Qbar)))
    Qbar = dinv @ Qbar @ dinv

    Q = Qbar.copy()
    for t in range(T):
        z = Z[t]
        Q = (1 - a - b) * Qbar + a * np.outer(z, z) + b * Q
    q_diag = np.sqrt(np.diag(Q))
    R_next = Q / np.outer(q_diag, q_diag)

    sig_next = np.array([
        np.sqrt(fits[s].forecast(horizon=1, reindex=False)
                .variance.iloc[-1, 0])
        for s in symbols
    ])
    Dt = np.diag(sig_next)
    H_next = Dt @ R_next @ Dt
    return R_next, H_next, sig_next

R_next, H_next, sig_next = dcc_forecast_next(Z, a_hat, b_hat, fits, symbols)

Yodda tuting, hamma narsa masshtablangan (×100) birliklarda, chunki biz arch ni series * 100 da moslaganmiz. Volatilliklarni 100 ga (va kovariatsiyalarni 1002=10,000100^2 = 10{,}000 ga) bo'lib, strategiyaga uzatishdan oldin xom-qaytim birliklariga qaytaring. Masshtablashni to'g'ri saqlash zerikarli, ammo yashirin xatolarning tez-tez uchraydigan manbai.

1-qo'llanma: pair savdo uchun dinamik hedge nisbati

Klassik bozorga neytral pair — bitta aktivni uzun, ikkinchisini beta-vaznlangan miqdorda qisqa pozitsiyada ushlash — hedge nisbati β\beta bilan yashaydi va o'ladi. Uni o'quv oynasi bo'yicha statik OLS orqali baholang, va siz aynan ushbu maqola bag'ishlangan eskirgan-korrelatsiya muammosini meros qilib olasiz: o'tgan chorakda bozor ta'sirini neytrallashtirgan hedge bu chorakda noto'g'ri.

DCC sizga hedge nisbatini vaqt qatori sifatida beradi. ETH ta'sirini BTC yordamida minimal-dispersiya bilan hedjlash shartli regressiya koeffitsientidir:

βt=Covt(rETH,rBTC)Vart(rBTC)=hETH,BTC,tσBTC,t2=ρETH,BTC,tσETH,tσBTC,t\beta_t = \frac{\mathrm{Cov}_t(r_{\text{ETH}}, r_{\text{BTC}})}{\mathrm{Var}_t(r_{\text{BTC}})} = \frac{h_{\text{ETH,BTC},t}}{\sigma_{\text{BTC},t}^2} = \rho_{\text{ETH,BTC},t}\,\frac{\sigma_{\text{ETH},t}}{\sigma_{\text{BTC},t}}

O'ng tomondagi har bir had DCC natijasi. Hedge nisbati ikkita alohida sababga ko'ra harakatlanadi, va DCC ularni toza ajratadi: korrelatsiya ρt\rho_t o'zgaradi (aktivlar bog'lanadi yoki ajraladi), va volatillik nisbati σETH,t/σBTC,t\sigma_{\text{ETH},t}/\sigma_{\text{BTC},t} o'zgaradi (bitta aktiv nisbatan volatilroq bo'ladi). Sirg'anuvchi-OLS beta ikkala effektni kechikish bilan aralashtiradi; DCC ularni bog'laydi.

def dynamic_hedge_ratio(R_path, Sigma, base="BTC", target="ETH",
                        symbols=symbols, index=Z.index):
    """
    beta_t to hedge `target` exposure with `base`:
        beta_t = rho_t * sigma_target,t / sigma_base,t
    (Scaling cancels in the ratio, so scaled units are fine here.)
    """
    i = symbols.index(target)
    j = symbols.index(base)
    rho = R_path[:, i, j]
    sig = np.asarray(Sigma)
    beta = rho * sig[:, i] / sig[:, j]
    return pd.Series(beta, index=index, name=f"beta_{target}_{base}")

beta_t = dynamic_hedge_ratio(R_path, Sigma)
print(beta_t.describe())

spread = (returns["ETH"] - beta_t.shift(1) * returns["BTC"]).dropna()

spread ni siz ishlatayotgan har qanday pair mexanizmiga uzating. Dinamik hedge o'z-o'zidan yutuq yaratmaydi — u siz savdo qilayotgan spread ni vaqt bo'yicha haqiqatan ham bozorga neytral qiladi, shunda sizning o'rtachaga qaytish signalingiz siljib ketayotgan yo'nalishli ta'sir bilan ifloslanmaydi. Agar siz pair strategiyalarini qurayotgan bo'lsangiz, bu to'g'ridan-to'g'ri Kriptoda Statistik Arbitraj va Pair Savdosi va pair savdoga masofa yondashuvi freymworklariga ularning qattiq hedge nisbati o'rniga joylashadi. Korrelatsiya qatorining o'zi ham har qanday sirg'anuvchi oynaga qaraganda korrelatsiyaga asoslangan pair signali uchun toza input hisoblanadi — siz shovqinli oynali baho o'rniga silliqlashtirilgan, model bilan izchil ρt\rho_t olasiz.

βt\beta_t ni jonli ishlatishga oid ikkita ehtiyot chorasi. Birinchidan, uni kechiktiringβt1\beta_{t-1} da savdo qiling, hech qachon zamonaviy βt\beta_t da emas, aks holda siz oldinga qarayapsiz. Ikkinchidan, har kuni chayqaladigan hedge nisbati aylanma va komissiyalar yaratadi; kripto ning 24/7 bozorida qisqa oyoqdagi finansirlash xarajatlari bilan, haddan tashqari reaktiv hedge u tuzatayotgan siljishdan ko'ra ko'proq qon oqizishi mumkin. βt\beta_t ni silliqlang (EWMA, yoki hedge ni faqat u bir polosa chegaradan o'tganda qayta muvozanatlang) va bularning barchasini oqilona hajmda o'lchang — shovqinli signaldan pozitsiya hajmini belgilash o'zining fani, bu Kelly mezoni bo'yicha hajmlash da yoritilgan.

2-qo'llanma: vaqt bo'yicha o'zgaruvchan portfel dispersiyasi

Vazn vektori ww bo'lgan portfel uchun shartli dispersiya:

σp,t2=wHtw=ijwiwjρij,tσi,tσj,t\sigma_{p,t}^2 = w'\, H_t\, w = \sum_{i}\sum_{j} w_i w_j\, \rho_{ij,t}\,\sigma_{i,t}\,\sigma_{j,t}

Statik kovariatsiya matritsasi bilan — Markowitz standarti bo'yicha — bu raqam siz bir marta hisoblab, hali ham to'g'ri deb faraz qilayotgan doimiy sondir. Bu to'g'ri emas. Portfel riski bozor bilan birga nafas oladi, va u aynan korrelatsiyalar otilib chiqqanda eng kuchli nafas oladi, chunki tushishda σi,t\sigma_{i,t} hadlari ham, ρij,t\rho_{ij,t} hadlari ham birga ko'tarilib, ko'paytiriladi. Tinch bozorlarda 40% yillik volatillikka o'xshagan portfel stress haftasida 80%+ ishlashi mumkin, va statik kovariatsiya matritsasi sizga hech narsa o'zgarmagani haqida gapiradi.

def portfolio_vol_path(H_path, weights, index=Z.index, unscale=1e4):
    """
    Conditional portfolio volatility sigma_{p,t} = sqrt(w' H_t w).
    H_path is in scaled (x100) units, so covariances carry a 100^2
    factor: divide by unscale=1e4 to return to raw-return variance.
    """
    w = np.asarray(weights)
    var_t = np.einsum("i,tij,j->t", w, H_path, w) / unscale
    return pd.Series(np.sqrt(var_t), index=index, name="port_vol")

w = np.array([0.4, 0.3, 0.2, 0.1])   # BTC, ETH, SOL, BNB
pv = portfolio_vol_path(H_path, w)
pv_annual = pv * np.sqrt(365)
print(pv_annual.describe())

Ushbu vaqt bo'yicha o'zgaruvchan σp,t\sigma_{p,t} — riskka asoslangan taqsimlashga kerak bo'lgan haqqoniy input. Statik namunaviy kovariatsiya bilan o'rtacha-dispersiya optimallashtirish (Kripto uchun Markowitz) fantastikaga qarshi optimallashtirmoqda; unga HtH_t ni (yoki uning qisqa muddatli bashoratini) uzatish samarali chegarani o'zini vaqt bo'yicha o'zgaruvchan qiladi va optimallashtiruvchini o'sib borayotgan-korrelatsiya rejimlariga ulardan keyin emas, balki oldinga qarab riskni kamaytirishga majburlaydi. Risk-parity va ierarxik yondashuvlar — HRP + CVaR quvuri — kovariatsiya inputiga hatto ko'proq sezgir, chunki butun taqsimlash risk matritsasining funksiyasi hisoblanadi. Va agar siz taqsimlagichlarni yonma-yon solishtirayotgan bo'lsangiz, portfel optimallashtirish algoritmlari solishtiruvi dagi kabi, ular statik yoki dinamik kovariatsiyani iste'mol qilishi ko'pincha algoritm tanlovidan ko'ra amalga oshirilgan risk uchun kattaroq omil bo'ladi.

To'g'ridan-to'g'ri qo'llanma — butun portfelning volatillikka yo'naltirilishi: nishon yillik volatillik σ\sigma^{*} ni tanlang va har bir davrda umumiy ta'sirni σ/σp,t\sigma^{*} / \sigma_{p,t} ga o'lchang, shunda amalga oshirilgan risk inqirozlarda portlash o'rniga taxminan doimiy qoladi. Bu aynan shu qoidani quradigan va backtest qiladigan 4-qism bilan halqani yopadi.

3-qo'llanma: rejim signali sifatida korrelatsiya

Hedjlash va hajmlashdan tashqari, korrelatsiya matritsasi makro signalni o'z ichiga oladi. Chiqarib olishingiz mumkin bo'lgan eng foydali yagona skalyar — o'rtacha juftlik korrelatsiyasi:

ρˉt=2d(d1)i<jρij,t\bar{\rho}_t = \frac{2}{d(d-1)}\sum_{i < j} \rho_{ij,t}

Portfel bo'ylab ρˉt\bar{\rho}_t ko'tarilganda, bozor risk-off rejimiga kirmoqda — individual hikoyalar ahamiyatini yo'qotadi va hamma narsa bitta makro beta sifatida savdo qilinadi. Bu "inqirozda korrelatsiyalar 1 ga ketadi" degan ibora miqdoriy izidir. U tushishlarga yetakchilik qiladi yoki ular bilan bir vaqtda sodir bo'ladi, bu esa uni kechikuvchi postmortem emas, foydali rejim ko'rsatkichiga aylantiradi.

def avg_pairwise_corr(R_path, index=Z.index):
    T, d, _ = R_path.shape
    iu = np.triu_indices(d, k=1)          # upper-triangle off-diagonals
    avg = R_path[:, iu[0], iu[1]].mean(axis=1)
    return pd.Series(avg, index=index, name="avg_corr")

avg_corr = avg_pairwise_corr(R_path)

roll_q = avg_corr.rolling(365, min_periods=90).quantile(0.80)
risk_off = (avg_corr > roll_q)

risk_off ni mustaqil drossel sifatida (umumiy ta'sirni kamaytirish, stoplarni kengaytirish, hamma narsa birga trendlanganda bosib o'tiladigan o'rtachaga qaytish strategiyalarini to'xtatish) yoki yanada rasmiy rejim modelida xususiyat sifatida ishlatishingiz mumkin. Bu HMM lar bilan rejim aniqlash dagi yashirin-Markov yondashuvi bilan tabiiy bog'lanadi: o'rtacha DCC korrelatsiyasi HMM ga uzatishingiz mumkin bo'lgan eng ma'lumotli kuzatuv o'zgaruvchilaridan biri, chunki u kechikuvchi qaytimlar bermaydigan tarzda tizimli stressga nisbatan oldinga qaraydigan. Haqqoniy ogohlantirish: ko'tarilayotgan korrelatsiya sizga diversifikatsiya barbod bo'layotganini aytadi, bozor qaysi yo'nalishga borishi haqida emas. Bu alfa signali emas, risk signali, va shunday hajmlanishi kerak — nima uchun risk rejimini yo'nalishli garov sifatida ko'rish yomon tugashini yo'qotishlar va foydaning asimmetriyasi dan ko'ring.

Amaliy mulohazalar

Baholash barqarorligi va aktivlar soni

DCC BEKK ga qaraganda ancha yaxshi miqyoslanadi, ammo "miqyoslanadi" degani "bepul" degani emas. Korrelatsiya-nishonlash matritsasi Qˉ\bar{Q}d×dd \times d namunaviy korrelatsiya, va namunaviy korrelatsiya matritsalari dd kuzatuvlar soniga yaqinlashgani sari yomon shartlangan bo'lib qoladi. 4 ta aktiv va 1000 kun bilan hammasi yaxshi. 60 ta aktiv va 400 kun bilan Qˉ\bar{Q} deyarli degenerativ, ehtimollikdagi uning teskarisi portlaydi, va RtR_t sonli shovqindan PD bo'lmagan holatga adashib ketishi mumkin. Yumshatuvchi choralar, ularga qanchalik tez-tez muhtoj bo'lishingiz tartibida taxminan:

  • Qˉ\bar{Q} ni siqing rekursiyani ishga tushirishdan oldin strukturaviy nishon tomon (Ledoit-Wolf, yoki identity / doimiy-korrelatsiya matritsasi tomon). Bu katta portfellar uchun eng yuqori samarali tuzatish.
  • Aktivlarni guruhlang bir necha sektorlarga (majorlar, L1lar, DeFi, memlar), sektor darajasida ichida va o'zaro modellashtiring, yoki xom aktivlar o'rniga bosh komponent faktorlarida DCC ni ishga tushiring.
  • Ko'proq aktivlarga qaraganda ko'proq ma'lumotni afzal ko'ring. DCC uzun, toza, bir vaqtdagi tarixga to'yib bo'lmas ishtiyoq bilan qaraydi — bu aynan yosh tokenlarda mavjud bo'lmagan narsa.

Amalda, to'g'ridan-to'g'ri DCC ni ko'pi bilan bir necha o'nlab aktivlar bilan cheklang. Katta olam uchun faktor qaytimlari plyus idiosinkratik qoldiqlar bo'yicha DCC standart yechim.

Korrelatsiya nishonlash — narxi bor yorliq

Qˉ\bar{Q} ni nishonlash baholashni boshqariladigan qiladi, ammo to'liq namuna shartsiz korrelatsiyasini har bir RtR_t ga singdiradi. Qattiq backtest da bu oldinga qarash sizib chiqishi: sizning tt-kunlik korrelatsiya matritsangiz butun namunaning, kelajakni ham qo'shgan holda, o'rtacha korrelatsiyasini "biladi". Haqqoniy baholash uchun siz Qˉ\bar{Q} ni faqat o'quv oynasida qayta baholashingiz va uni namunadan tashqarida qat'iy ushlab turishingiz yoki uni oldinga siljitishingiz kerak. Bu butun walk-forward optimallashtirish freymvorki ta'minlaydigan aynan shu intizom, va yuqoridagi o'quv kodimiz qilganidek qulay np.cov(Z) bilan to'liq massiv bo'yicha uni tasodifan buzish oson. Bitta P&L raqamiga ishonishdan oldin buni tuzating.

Qayta moslash sur'ati va oldinga qarash intizomi

Sizga a,ba, b ni har kuni qayta optimallashtirish shart emas — ular barqaror parametrlar. Oqilona ishlab chiqarish sur'ati:

  • a,ba, b va bir o'lchamli GARCH parametrlarini qayta baholang haftalik yoki oylik.
  • Filtrni (QtQ_t, σi,t\sigma_{i,t} ni yangilash) har bir davrda ishga tushiring muzlatilgan parametrlar bilan yangi RtR_t va HtH_t olish uchun. Filtrlash arzon; moslash arzon emas.
  • Har doim bashorat qiling, hech qachon silliqlamang. tt da savdo qilish uchun t1t-1 gacha bo'lgan axborotdan qurilgan RtR_t dan foydalaning. Ikki o'tuvli struktura (oyna bo'yicha moslash, so'ng oldinga filtrlash) sizni halol saqlaydigan narsa.

DCC backtest va jonli ishlash o'rtasidagi bo'shliq deyarli har doim oldinga qarash sizib chiqishi — to'liq-namuna Qˉ\bar{Q}, zamonaviy βt\beta_t, yoki siz baholayotgan savdoni o'z ichiga olgan ma'lumotlarda qayta moslash. Backtest ni jonli sharoitlarga moslashtirish intizomi backtest-jonli parallelligi da o'zining mavzusi, va DCC bu yerda boshqa modellardan ko'ra beparvolikni ko'proq jazolaydigan model. Agar toza walk-forward baholashdan so'ng, dinamik korrelatsiya sizning strategiyangiz uchun oddiy sirg'anuvchi bahodan ustun hech narsa qo'shmasa, bu haqiqiy va nashr etsa bo'ladigan salbiy natija — halol salbiy natijalar dagi fikrlash to'g'ridan-to'g'ri qo'llaniladi.

Asimmetrik DCC (aDCC)

Xuddi bir o'lchamli leverage effekti (2-qism) yomon xabar yaxshi xabardan ko'ra volatillikni ko'proq ko'targanidek, korrelatsiyalar birgalikdagi manfiy shoklardan keyin birgalikdagi ijobiy shoklardan keyingiga qaraganda ko'proq ko'tariladi. Cappiello, Engle va Sheppard (2006) buni manfiy-qism standartlashtirilgan qoldiqlarning zt=min(zt,0)z_t^- = \min(z_t, 0) tashqi ko'paytmasi bilan boshqariladigan had qo'shib, asimmetrik DCC bilan tutadi:

Qt=(QˉaQˉbQˉgNˉ)+azt1zt1+gzt1zt1+bQt1Q_t = (\bar{Q} - a\bar{Q} - b\bar{Q} - g\bar{N}) + a\, z_{t-1} z_{t-1}' + g\, z_{t-1}^- z_{t-1}^{-\prime} + b\, Q_{t-1}

bu yerda Nˉ=1Ttztzt\bar{N} = \frac{1}{T}\sum_t z_t^- z_t^{-\prime} va g0g \ge 0 birgalikdagi pastga harakatlardan qo'shimcha korrelatsiya tepkisini o'lchaydi. Kripto uchun, qulash-korrelatsiyasi asosiy risk bo'lgan joyda, asimmetriya hadi odatda muhim va qo'shimcha bitta parametrga arziydi. rmgarch aDCC ni qutidan tashqarida moslaydi (model="aDCC"); bizning NumPy baholovchimizga ztz_t^- hadini qo'shish oddiy mashq.

Solishtiruv: DCC muqobillar bilan

Kripto portfeli uchun kovariatsiya matritsasini olish usullaridan qaysi biri qayerda joylashadi? Haqqoniy xulosa:

Yondashuv Parametrlar Miqyoslanadi Vaqt bo'yicha o'zgaruvchan ρ\rho? PD kafolatlanganmi? Dum bog'liqligi?
Namunaviy / sirg'anuvchi kovariatsiya 0 (oyna uzunligi) istalgan dd qo'pol (kechikkan, shovqinli) yo'q (tuzatish kerak) yo'q
EWMA (RiskMetrics) 1 (λ\lambda) istalgan dd ha (yagona parchalanish) ha yo'q
CCC-GARCH dd marginal + Qˉ\bar{Q} o'nlab yo'q (doimiy RR) ha yo'q
DCC-GARCH dd marginal + 2 o'nlab ha ha yo'q
aDCC-GARCH dd marginal + 3 o'nlab ha, asimmetrik ha qisman
BEKK O(d2)O(d^2) 4\le 4 ha (boy) ha yo'q
VECH O(d4)O(d^4) 3\le 3 ha (eng boy) qiyin yo'q
GARCH-kopula dd marginal + kopula o'nlab (vine) statik kopula ha ha

Ushbu jadvalning bir necha o'qilishi:

  • EWMA — DCC yordam berayotganini da'vo qilishdan oldin har kim yenga oladigan arzon asosiy chiziq. Bu ruhida bir-parametrli maxsus holat — kovariatsiyaga to'g'ridan-to'g'ri qo'llaniladigan yagona eksponensial parchalanish — va ko'pgina portfellar uchun namunadan tashqarida uni yaxshilash hayratlanarli darajada qiyin. Agar DCC toza walk-forward da EWMA dan ustun kelmasa, EWMA dan foydalaning.
  • CCC va DCC — ushbu maqolaning butun mohiyati: bir xil faktorlashtirish, ammo CCC RR ni muzlatadi va DCC unga harakatlanish imkonini beradi. Ikkita qo'shimcha parametr (a,ba, b) — butun farq, va kriptoda ular o'z narxini oqlaydi.
  • BEKK/VECH boyroq dinamika sotib oladi — har bir kovariatsiya har bir o'tgan shokka javob berishi mumkin — ammo parametr narxi ularni kichik portfellar bilan chegaralaydi. 4 aktivdan oshgach ular haqiqiy variant emas.
  • GARCH-kopula — dum bog'liqligi ostida "ha" ga ega yagona qator. Bu yana o'sha bir-birini to'ldiruvchanlik: DCC qo'shma taqsimotning dinamik markazini modellashtiradi, kopulalar uning statik dumlarini modellashtiradi. Agar sizning risk savolingiz "hamma narsa birga buzilganda nima bo'ladi" bo'lsa, kopula quvuri ga murojaat qiling; agar u "hozir mening hedge nisbatim / portfel dispersiyam qancha" bo'lsa, DCC ga murojaat qiling.

Tizimli kripto deski uchun amaliy standart: tanada hedge nisbatlari va dinamik kovariatsiya uchun DCC (yoki aDCC), dum riski va CVaR uchun kopula qatlami, va qo'shimcha mexanizm o'zini o'zi to'lashini tekshirib turadigan mantiqiy tekshiruv asosiy chizig'i sifatida EWMA.

Cheklovlar

  • Skalyar dinamika. Barcha juftlar uchun bitta aa va bitta bb — kuchli cheklov. BTC-ETH va ikkita noma'lum altkoin bir xil moslashish tezligini ulashadi. Umumlashgan DCC buni yumshatadi, ammo DCC yo'q qilish uchun mo'ljallangan parametr portlashini qayta kiritadi.
  • Ikki bosqichli samaradorlik yo'qotilishi. Kvazi-ehtimollik baholovchisi bir xil natijali, ammo to'liq samarali emas, va sodda standart xatolar noto'g'ri. Agar sizga xulosa muhim bo'lsa, Engle-Sheppard tuzatmasidan foydalaning; signal generatsiyasi uchun nuqta baholari yetarli.
  • Standart bo'yicha Gauss dumlari. Oddiy Gauss kvazi-ehtimolligi qo'shma dum riskini kamsitib ko'rsatadi. Student-t innovatsiyalari yordam beradi; haqiqiy dum bog'liqligi uchun (bir vaqtda ekstremal harakatlar ehtimoli), DCC noto'g'ri asbob, va kopula modeli to'g'risi. DCC sizga korrelatsiyaning dinamik tanasini beradi; kopulalar statik dumini beradi. Jiddiy deskilar ikkalasidan ham foydalanadi.
  • Korrelatsiya sabab-natija emas, va yo'nalish emas. Ko'tarilayotgan ρˉt\bar{\rho}_t diversifikatsiya barbod bo'layotganini ogohlantiradi; u bozor yo'nalishi haqida hech narsa aytmaydi. Risk signalini yo'nalishli kutishlar bilan ortiqcha yuklashmang.
  • Ma'lumot ochligi. Yuqoridagi hamma narsa uzun, toza, sinxronlashtirilgan tarixlarni faraz qiladi. Kriptoning eng yangi va eng qiziqarli tokenlari bularning uchalasini ham buzadi.

Xulosa

  • Statik korrelatsiya kriptoda yolg'on. Korrelatsiyalar klasterlanadi, davom etadi va tushishlarda 1 ga otilib chiqadi — aynan diversifikatsiya yordam berishi kerak bo'lgan lahzada. Bitta namunaviy ρ^\hat{\rho} rejim-almashinuvchi jarayonni ma'nosiz o'rtaga o'rtachalashtiradi.
  • To'liq ko'pko'lamli GARCH (VECH, BEKK) miqyoslanmaydi. Parametrlar soni O(d2)O(d^2) sifatida o'sadi; ikkalasi ham amalda bir hovuch aktiv bilan chegaralangan.
  • DCC (Engle 2002) muammoni faktorlashtiradi: Ht=DtRtDtH_t = D_t R_t D_t, mustaqil bir o'lchamli GARCH moslashlaridan (1-2-qismlardan qayta foydalaning) DtD_t va ikki-parametrli rekursiyadan RtR_t bilan. U o'nlab aktivlarga miqyoslanadi, chunki faqat a,ba, b optimallashtiriladi.
  • Rekursiya Qt=(1ab)Qˉ+azt1zt1+bQt1Q_t = (1-a-b)\bar{Q} + a\,z_{t-1}z_{t-1}' + b\,Q_{t-1}, RtR_t ga normallashtirilgan, har bir qadamda to'g'ri ijobiy-aniqlangan korrelatsiya matritsasini ishlab chiqaradi, a,b>0a,b>0, a+b<1a+b<1 bilan.
  • arch DCC ni bajarmaydi. Marginallarni arch bilan moslang, so'ng bu yerdagi ~60-qatorli NumPy/SciPy baholovchisini amalga oshiring, yoki mgarch (Python) yoki rmgarch (R, mos yozuv) dan foydalaning.
  • Uchta aniq natija: pair savdo uchun dinamik hedge nisbati βt=ρtσETH,t/σBTC,t\beta_t = \rho_t\,\sigma_{\text{ETH},t}/\sigma_{\text{BTC},t}; riskka asoslangan taqsimlash uchun haqqoniy vaqt bo'yicha o'zgaruvchan portfel dispersiyasi wHtww'H_t w; va risk-off rejim signali sifatida o'rtacha juftlik korrelatsiyasi.
  • Intizom hamma narsa. Korrelatsiya nishonlash to'liq-namuna o'rtachasini sizib chiqaradi, shuning uchun Qˉ\bar{Q} ni faqat o'quv ma'lumotlarida qayta baholang; har bir hedge nisbatini kechiktiring; oldinga filtrlang, hech qachon silliqlamang. Walk-forward baholash muhokama qilinmaydi.
  • aDCC pastga-asimmetriya hadini qo'shadi va odatda qulash-korrelatsiyasi hukmronlik qiladigan kriptoda arziydi.
  • 4-qism ushbu bashoratlardan foydalanib volatillikka yo'naltirilgan strategiya quradi va backtest qiladi.

Manbalar:

  • Engle, R. (2002). Dynamic Conditional Correlation: A Simple Class of Multivariate Generalized Autoregressive Conditional Heteroskedasticity Models. Journal of Business & Economic Statistics, 20(3), 339-350. DOI
  • Engle, R. & Sheppard, K. (2001). Theoretical and Empirical Properties of Dynamic Conditional Correlation Multivariate GARCH. NBER Working Paper 8554. DOI
  • Bollerslev, T. (1990). Modelling the Coherence in Short-Run Nominal Exchange Rates: A Multivariate Generalized ARCH Model. Review of Economics and Statistics, 72(3), 498-505. DOI
  • Cappiello, L., Engle, R., & Sheppard, K. (2006). Asymmetric Dynamics in the Correlations of Global Equity and Bond Returns. Journal of Financial Econometrics, 4(4), 537-572. DOI
  • Engle, R. & Kroner, K. (1995). Multivariate Simultaneous Generalized ARCH. Econometric Theory, 11(1), 122-150. DOI
  • Bollerslev, T., Engle, R., & Wooldridge, J. (1988). A Capital Asset Pricing Model with Time-Varying Covariances. Journal of Political Economy, 96(1), 116-131. DOI
  • Galanos, A. (2022). rmgarch: Multivariate GARCH Models. R package. CRAN.
blog.disclaimer

MarketMaker.cc Team

Miqdoriy tadqiqotlar va strategiya

Telegramda muhokama qilish
Newsletter

Bozordan bir qadam oldinda bo'ling

Sun'iy intellekt savdo tahlillari, bozor tahlili va platforma yangiliklari uchun bizning xabarnomaga obuna bo'ling.

Biz sizning maxfiyligingizni hurmat qilamiz. Istalgan vaqtda obunadan chiqishingiz mumkin.