← Мақалаларға оралу
July 12, 2026
5 мин оқу

DCC-GARCH: Парлар мен портфель тәуекелі үшін динамикалық корреляциялар

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

Көптеген крипто дескілерден BTC мен ETH арасындағы корреляцияны сұрап көріңіз — сізге ешкім таңдағанын есіне алмайтын кейбір терезе бойынша есептелген жалғыз сан беріледі — 0.8, кейде 0.75. Бұл сан — өтірік, немесе кем дегенде қауіпті жеңілдету. Таңдамалы корреляция — нақты тәуелділік құрылымы үздіксіз қозғалып тұрған кезеңдегі орташа мән. Тыныш нарықтарда BTC мен ETH тартымды көрінетін нарық-нейтралды пар жасайтындай алшақтайды. Ликвидация каскадында олар бір-біріне және барлық нәрсеге жабысады, ал сіз ақшасын төлеген диверсификация дәл қажет болған сәтте буланып кетеді.

Бұл нәзік әсер емес. 2022 жылдың кез келген құлдырауын алыңыз — мамырдағы LUNA құлдырауы, маусымдағы 3AC тарқатылуы, қарашадағы FTX жарылысы — және топ 20 токен бойынша орташа жұптық корреляцияның бірнеше күн ішінде 0.4-0.6 диапазонынан 0.9+ мәніне қарай жылжитынын көресіз. Корреляция — кейде дұрыс емес бағаланатын тұрақты шама емес; ол өз динамикасы, өз кластерленуі және өз режимдері бар уақыттық қатар. Оны скаляр деп қарау — тұрақты волатильділікті болжаумен тең көпөлшемді қателік, оны біз осы серияның 1-бөлімінде бір актив үшін бұзған едік.

Бұл мақала — төрт бөлімнен тұратын волатильділік сериясының 3-бөлімі. 1-бөлім arch кітапханасымен бір айнымалы GARCH(1,1) құрып, волатильділіктің қалай кластерленетінін және орташа мәнге қайтатынын көрсетті. 2-бөлім левередж эффектісі мен қалың құйрықтарды ұстау үшін асимметрия (GJR-GARCH, EGARCH) және Стьюдент-t инновацияларын қосты. Мұнда біз көпөлшемдіге өтеміз: Энгельдің Динамикалық Шартты Корреляция (DCC) моделін пайдаланып, барлық шартты ковариация матрицасы HtH_t уақыт бойынша қалай эволюцияланатынын модельдейміз. Бұл бізге скаляр корреляция ешқашан бере алмайтын екі нәрсені береді — парлық сауда үшін динамикалық хедж қатынасы және тәуекел негізіндегі бөлу үшін адал, уақыт бойынша өзгеретін портфель дисперсиясы. 4-бөлім сериясын бір айнымалы және көпөлшемді болжамдарды позиция мөлшерлеу ережесіне байланыстыратын волатильділікке бағытталған бэктестпен аяқтайды.

Сіз 1 және 2-бөлімдерді оқыдыңыз деп есептейміз, сондықтан бір айнымалы GARCH-ты қайта шығармаймыз. Егер сізге бірлескен құйрық мінез-құлқы — екі активтің 1% квантилін бірге бұзу ықтималдығы — керек болса, бұл копула сұрағы, оны біз Бірлескен тәуекел үшін копула модельдері мақаласында қарастырамыз. DCC мен копулалар бір-бірін толықтырады: копула сізге статикалық бірақ икемді құйрық-тәуелділік құрылымын береді, ал DCC сізге бүкіл корреляция матрицасының басқарылатын уақыттық қатарын береді. Бұл мақала соңғысы туралы.

Крипто нарығында статикалық корреляция неге жұмыс істемейді

Механизмге көшпес бұрын, не істен шығатынын нақты айтайық. [tw,t][t-w, t] терезесі бойынша есептелген жалғыз таңдамалы корреляция ρ^\hat{\rho} мынаны бағалайды:

ρ^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}}

Бұл крипто үшін жалған үш жасырын болжамды қамтиды:

  1. Тәуелділіктің стационарлығы. Терезенің бір ғана шынайы ρ\rho бар. Шындығында тәуелділіктің режимдері бар — 0.5-ке жақын тыныш нарық режимі және 0.95-ке жақын стресс режимі — және ρ^\hat{\rho} оларды мағынасыз ортаға араластырады.
  2. Тұрақты шеткі волатильділік. Пирсон корреляциясы — нормаланған ковариация. Егер σi,t\sigma_{i,t} мен σj,t\sigma_{j,t} өздері қозғалып жатса (олай — бұл 1 және 2-бөлімнің бүкіл алғышарты), онда тұрақты ковариация да уақыт бойынша өзгеретін корреляция береді, және керісінше. Оларды астындағы волатильділік моделінсіз бөлу мүмкін емес.
  3. Нарық бағыты бойынша симметрия. Корреляция ралли кезіндегіден гөрі құлдырауда көбірек көтеріледі. Бұл левередж эффектісінің көпөлшемді туысы. Сырғымалы терезе оны таза шуылға айналмай тұрып білдіре алмайды.

Сырғымалы терезе түзетуі — соңғы 30 немесе 60 күн бойынша ρ^\hat{\rho} қайта есептеу — бір мәселені екіншісіне ауыстырады. Қысқа терезелер сезімтал бірақ шулы, нақты бұзылудан кешігеді; ұзын терезелер тұрақты бірақ ескірген. Одан да жаманы, dd актив бойынша сырғымалы корреляция матрицасы, оны қысқартып немесе жамай бастаған кезде, оң жартылай анықталған болып қалуы кепілдендірілмейді, бұл төмендегі кез келген оптимизаторды бұзады. Бізге (а) әр актив бойынша тиісті волатильділік үрдісімен басқарылатын, (б) құрылысы бойынша әр қадамда жарамды корреляция матрицасын беретін, және (в) параметрлерін терезе ұзындығын қалтадан таңдап алу арқылы емес, максималды ықтималдық арқылы бағалауға болатын модель керек. Бұл модель — DCC-GARCH.

Көпөлшемді мәселе: шартты ковариация матрицасы

rtRdr_t \in \mathbb{R}^dtt уақыт мезетіндегі dd активтің табыстар векторы болсын, шартты орта мәні μt\mu_t (жиі тек тұрақты немесе кіші AR мүшесі) және қалдығы ϵt=rtμt\epsilon_t = r_t - \mu_t. Біз мынаны болжаймыз:

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

мұндағы HtH_tFt1\mathcal{F}_{t-1} ақпараттық жиынтығы берілген d×dd \times d шартты ковариация матрицасы, ал D\mathcal{D} — кейбір шартты үлестірім (Гаусстық немесе, крипто үшін жақсырақ, көпөлшемді Стьюдент-t). Көпөлшемді волатильділік модельдеуіндегі бәрі бір сұраққа әр түрлі жауап: HtH_t динамикасын параметрлеуді параметрлердің жарылысынсыз әр қадамда симметриялы оң анықталған болып қалатындай қалай жасауға болады?

Екі классикалық жауап мәселенің неге қиын екенін көрсетеді.

VECH

VECH моделі (Боллерслев, Энгл, Вулдридж, 1988) HtH_t жартылай векторизациясын өткен квадрат қалдықтар мен өткен ковариациялардың сызықтық функциясы ретінде жазады:

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})

мұндағы vech()\mathrm{vech}(\cdot) симметриялы матрицаның төменгі үшбұрышын d(d+1)/2d(d+1)/2 ұзындықтағы векторға жинақтайды. Бұл максималды жалпы — әрбір дисперсия мен ковариация өткен әрбір дисперсия мен ковариацияға тәуелді — және d=3d=3-тен асқанда максималды пайдасыз. dd актив үшін AA мен BB әрқайсысы d(d+1)2×d(d+1)2\frac{d(d+1)}{2} \times \frac{d(d+1)}{2} өлшемді. d=5d=5 болғанда бұл екі 15×1515\times 15 матрица, шамамен 450 параметр, оған қоса тіпті білдіру қиын оң анықталғандық шектеулері. Ықтималдық беті — батпақ.

BEKK

BEKK моделі (Энгл және Кронер, 1995) квадраттық форманы қолданып, оң анықталғандықты құрылысы бойынша кепілдендіреді:

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

мұндағы CC — жоғарғы үшбұрышты. Әр мүше квадраттық форма болғандықтан, CC0C'C \succ 0 болса, Ht0H_t \succ 0 автоматты түрде орындалады. BEKK VECH-тен үнемдірек, бірақ параметрлер саны әлі де O(d2)O(d^2) ретінде өседі — AA мен BB матрицалары әрқайсысы d×dd \times d. d=10d=10 үшін сіз шулы күнделікті крипто деректерінде MLE арқылы бірге 200+ параметрді бағалайсыз, оптимизатордың мағыналы нәрсеге жинақталатынына кепілдік жоқ. Іс жүзінде толық BEKK d4d \le 4 шамасымен шектеледі, тіпті сол кезде де адамдар кросс-динамиканың көп бөлігін тастайтын "диагональды" немесе "скалярлы" шектеулерді қолданады.

Бұл көпөлшемді GARCH үшін өлшемділік қарғысы: параметрлер саны квадраттық түрде өседі, ал деректердегі ақпарат мөлшері олай өспейді. Сіз алаңдайтын активтер таусылғанша дейін еркіндік дәрежелері таусылады. 10-30 токендік кез келген крипто кітап VECH немесе BEKK үшін мүлдем қолжетімсіз.

Энгл ұсынған шығу жолы — HtH_t-ті тікелей модельдеуден бас тартып, оны біз арзан бағалауды білетін бөліктерге фактор ету.

Энгельдің DCC-і (2002): екі қадамды декомпозиция

Боллерслевтің Тұрақты Шартты Корреляция (CCC) моделі (1990) бірінші үнемді факторизация болды. Ол мынаны жазады:

Ht=DtRDtH_t = D_t\, R\, D_t

мұндағы Dt=diag(σ1,t,,σd,t)D_t = \mathrm{diag}(\sigma_{1,t}, \ldots, \sigma_{d,t}) — шартты стандартты ауытқулардың диагональды матрицасы — әр актив үшін бір айнымалы GARCH — ал RRтұрақты корреляция матрицасы. Бұл үлкен жеңілдету: сіз dd тәуелсіз бір айнымалы GARCH моделін бейімдейсіз, содан кейін стандартталған қалдықтардың бір таңдамалы корреляция матрицасын бағалайсыз. Оң анықталғандық RR жарамды корреляция матрицасы болса және барлық σi,t>0\sigma_{i,t} > 0 болса, автоматты түрде орындалады.

CCC-тің мәселесі оның атауының өзінде — корреляция тұрақты, бұл мақаланы осы болжамды теріске шығарудан бастаған дәл сол болжам. Энгельдің Динамикалық Шартты Корреляциясы (2002) CCC-тің тамаша факторизациясын сақтай отырып, корреляция матрицасына тыныс алуға мүмкіндік береді:

Ht=DtRtDtH_t = D_t\, R_t\, D_t

Енді RtR_t уақыт бойынша өзгереді. Данышпандығы — волатильділіктер мен корреляциялар екі бөлек қадамда бағаланады, сондықтан біз ешқашан толық O(d2)O(d^2) бірлескен оптимизацияға тап болмаймыз.

1-қадам: Әр актив бойынша бір айнымалы GARCH

Әрбір ii активі үшін 1 және 2-бөлімдердегідей бір айнымалы GARCH моделін бейімдеңіз — GARCH(1,1), GJR-GARCH немесе Стьюдент-t инновациялары бар EGARCH, сол қатар үшін ең жақсы сәйкес келгені. Бұл шартты дисперсияларды σi,t2\sigma_{i,t}^2 береді, демек Dt=diag(σ1,t,,σd,t)D_t = \mathrm{diag}(\sigma_{1,t}, \ldots, \sigma_{d,t}).

Бейімделген модельдерден біз стандартталған қалдықтарды аламыз:

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

Құрылысы бойынша әрбір zi,tz_{i,t} (шамамен) бірлік шартты дисперсияға ие. Оларды zt=(z1,t,,zd,t)z_t = (z_{1,t}, \ldots, z_{d,t})' векторына жинақтаңыз. Бұл стандартталған қалдықтар корреляция қадамының шикізаты — олардың жеке волатильділік динамикасы алынып тасталды, сондықтан қалған кез келген бірлескен қозғалыс — таза тәуелділік, волатильділік артефактісі емес. (Бұл маржиналдарды бейімдер алдында копула мақаласы пайдаланатын PIT-стильдегі логика; мұнда біз бірыңғайларға дейін бармай, стандарттаумен тоқтаймыз.)

2-қадам: DCC корреляция рекурсиясы

Біз стандартталған қалдықтардың сыртқы көбейтінділерімен басқарылатын GARCH тәрізді рекурсиясы бар d×dd \times d симметриялы оң анықталған матрица, QtQ_t көмекші үрдісін модельдейміз:

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

мұндағы:

  • Qˉ=1Tt=1Tztzt\bar{Q} = \frac{1}{T}\sum_{t=1}^{T} z_t z_t' — стандартталған қалдықтардың шартсыз корреляция матрицасы (бұл корреляция мақсаттауы — төменде толығырақ),
  • a0a \ge 0 бүгінгі шоктың zt1zt1z_{t-1}z_{t-1}' корреляцияны қаншалықты күшті тартатынын басқарады,
  • b0b \ge 0 тұрақтылықты басқарады — кешегі Qt1Q_{t-1}-тің қаншасы алға жалғасатынын,
  • ал орташаға қайту шектеуі — бір айнымалы GARCH-тағы α+β<1\alpha + \beta < 1 шартына тікелей ұқсас a+b<1a + b < 1 (мұндағы a,b>0a, b > 0).

Құрылым скаляр GARCH(1,1) рекурсиясымен бірдей екенін ескеріңіз, бірақ матрицалар бойынша: ұзақ мерзімді бекіткіш Qˉ\bar{Q}, шок мүшесі және тұрақтылық мүшесі. Ол оң жартылай анықталған матрицалардың дөңес комбинациясы болғандықтан (Qˉ\bar{Q}, дәреже-1 сыртқы көбейтінді, және алдыңғы Qt1Q_{t-1}), Qˉ0\bar{Q} \succ 0 болса және салмақтар теріс емес болса, QtQ_t оң анықталған болып қалады. Бұл бізге тегін кепілдендірілген жарамды ковариация матрицаларын береді.

QtQ_t шамамен корреляция матрицасы, бірақ дәл емес — оның диагоналі дәл 1 емес. Сондықтан біз оны нормалаймыз:

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}

Элементтер бойынша, ii мен jj активтері арасындағы шартты корреляция:

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

Бұл RtR_t — құрылысы бойынша әрбір уақыт қадамында тиісті корреляция матрицасы — бірлік диагональ, [1,1][-1,1] диапазонындағы диагональдан тыс элементтер, оң анықталған. Толық шартты ковариацияны қайта жинаңыз:

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}

Сол соңғы элементтер бойынша форма сіз үнемі пайдаланатын форма: екі активтің шартты ковариациясы — олардың динамикалық корреляциясы мен әрбір динамикалық волатильділіктерінің көбейтіндісі. Оң жақтағы әрбір ингредиент уақыт бойынша өзгереді және бағалауға болатын модельден келеді.

Бүкіл модельде d=2d = 2 немесе d=50d = 50 болса да, тек екі корреляция параметрі бар, aa және bb. Волатильділік жағы сызықтық түрде өседі (әр актив бойынша бір бір айнымалы GARCH, әрқайсысында ~4-5 параметр, барлығы тәуелсіз және оңай параллельделеді). Дәл осы себепті DCC BEKK мен VECH мүмкін болмайтын жерде масштабталады: өлшемділік қарғысы оптимизацияланбай, мақсатталған (таңдамалы бағалау ретінде қойылған) Qˉ\bar{Q}-мен шектелген.

Скаляр шектеу және оның құны

a,ba, b скалярлары әрбір актив жұбы бірдей корреляция динамикасын бөлісетінін білдіреді — бірдей бейімделу жылдамдығы мен бірдей тұрақтылық. BTC-ETH корреляциясы мен DOGE-SHIB корреляциясы, экономикасы өзгеше болса да, бірдей ырғақпен қозғалады. Бұл — басқарылатындықтың бағасы, және ол әдетте қолайлы баға. Жалпылаулар (матрицалы A,BA, B бар Жалпыланған DCC; Каппиелло-Энгл-Шеппард асимметриялы DCC) оны параметрлер мен бағалау тұрақтылығы есебінен босаңсытады. Төменде aDCC туралы айтамыз.

DCC квази-логарифмдік ықтималдығы

aa мен bb-ны бағалау үшін бізге ықтималдық керек. Энгельдің негізгі нәтижесі — Гаусстық логарифмдік ықтималдық волатильділік бөлігі мен корреляция бөлігіне бөлінеді, бұл екі қадамды бағалаушыны негіздейді. ϵtFt1N(0,Ht)\epsilon_t \mid \mathcal{F}_{t-1} \sim \mathcal{N}(0, H_t) деп болжай отырып, tt уақыт мезетіндегі логарифмдік ықтималдық үлесі:

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 қойыңыз. Онда Ht=Dt2Rt|H_t| = |D_t|^2 |R_t| және Ht1=Dt1Rt1Dt1H_t^{-1} = D_t^{-1} R_t^{-1} D_t^{-1}, және zt=Dt1ϵtz_t = D_t^{-1}\epsilon_t пайдаланып:

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)

Енді ztztz_t'z_t қосу және алу арқылы бөліңіз:

t=12(dlog(2π)+2logDt+ϵtDt2ϵt)волатильділік бөлігі   tV  12(logRt+ztRt1ztztzt)корреляция бөлігі   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{волатильділік бөлігі }\;\ell_t^{V}} \;\underbrace{-\frac{1}{2}\left( \log|R_t| + z_t' R_t^{-1} z_t - z_t' z_t \right)}_{\text{корреляция бөлігі }\;\ell_t^{C}}

Волатильділік бөлігі tV\ell_t^V тек бір айнымалы GARCH параметрлеріне тәуелді (DtD_t арқылы) — оны максималдау дәл біз 1-қадамда жасаған dd тәуелсіз бір айнымалы GARCH модельдерін бейімдеу. Корреляция бөлігі tC\ell_t^C aa мен bb-ға тәуелді (RtR_t арқылы), 1-қадамдағы стандартталған қалдықтар берілген жағдайда. Сондықтан 2-қадамда біз тек мынаны максималдаймыз:

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 мүшесі a,ba, b-ға тәуелді емес, сондықтан оны алып тастаймыз). Бұл қанша актив болса да екі параметрлі оптимизация — бүкіл мәні сонда. Оны квази-ықтималдық деп атайды, себебі екі қадамды бағалаушы тұрақты, бірақ толық тиімді емес; стандартты қателерге түзету қажет (Энгл мен Шеппард, 2001), бірақ сигнал генерациясы үшін нүктелік бағалаулар маңызды.

Крипто үшін Гаусстық инновациялар құйрық тәуекелін төмендетіп көрсетеді. Көпөлшемді Стьюдент-t ықтималдығына ауыстыру t\ell_t-ге дайын өзгеріс (Гаусс өзегін көпөлшемді-tt тығыздығымен ауыстырып, еркіндік дәрежесі параметрі ν\nu қосу). Біз анықтық үшін төмендегі бағалаушыда Гаусс квази-ықтималдығын сақтаймыз және ν\nu қайда кіретінін атап өтеміз — 1-2 бөлімдердегі стандарттау шеткі жерлерде t-инновацияларын қолданды, бұл құйрық пайдасының көп бөлігін қамтиды.

Python-мен жүзеге асыру

Дөрекі бірақ маңызды факт: arch кітапханасы көпөлшемді GARCH немесе DCC жасамайды. arch — тамаша бір айнымалы қозғалтқыш (біз дәл сол үшін оған сүйенеміз), бірақ онда dcc_model жоқ. Сіздің практикалық опцияларыңыз:

  1. arch үстінде өз DCC-іңізді жасауarch көмегімен бір айнымалы модельдерді бейімдеу, стандартталған қалдықтарды шығару, QQ-рекурсиясын және корреляция квази-ықтималдығын NumPy/SciPy-де жүзеге асыру, екі скалярды оптимизациялау. Біз төменде осыны жасаймыз. Бұл шамамен 60 жол және толығымен ашық.
  2. mgarch PyPI пакеті — жеңіл, таза Python DCC-GARCH жүзеге асыруы. Жылдам бейімдеу үшін ыңғайлы, GJR маржиналдарын немесе t-инновацияларын дәл байланыстырғыңыз келсе, аз икемді.
  3. R-дың rmgarch (Алексиос Галанос) — эталондық жүзеге асыру. dccspec / dccfit DCC, aDCC, GARCH-копула, Стьюдент-t, және тиісті стандартты қателерді қолдайды. Егер сіз көпөлшемді волатильділік бойынша нақты зерттеу жасап жатсаңыз, rmgarch (қажет болса Python-нан rpy2 арқылы шақырылған) — алтын стандарт.

Біз 1-опцияны құрамыз, себебі ол әрбір қозғалатын бөлікті айқын етеді және 1-2 бөлімдердегі бір айнымалы дағдыларды қайта пайдаланады.

1-қадам: arch көмегімен бір айнымалы GARCH маржиналдарын бейімдеу

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())

Стандартталған қалдықтарға жылдам сапалылық тексерісі маңызды. Кез келген бағанда стандартты ауытқу 1-ден алшақ болса, немесе оның квадратында ауыр қалдық автокорреляция болса (zi,t2z_{i,t}^2 бойынша Ljung-Box), бір айнымалы маржинал дұрыс емес спецификацияланған, ал DCC қадамы бұл қатені мұраланады. Алдымен маржиналды түзетіңіз — 2-бөлім дәл осы үшін болды.

2-қадам: DCC рекурсиясы және квази-логарифмдік ықтималдық

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)

Мұны бірнеше жылдық күнделікті деректер бойынша BTC/ETH/SOL/BNB кітабында іске қосу мынадай пішіндегі шығысты береді (төмендегі сандар иллюстративтік, нақты датталған эксперименттен емес — оны өз деректеріңізде іске қосыңыз):

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

Оны қалай оқу керек:

  • a=0.029a = 0.029 кіші — корреляция матрицасы бір күндік шоктан лоқсымайды. Әр күн RtR_t-ны zt1zt1z_{t-1}z_{t-1}' сыртқы көбейтіндісіне қарай тек ~3%-ға итереді.
  • b=0.940b = 0.940 үлкен — корреляциялар өте тұрақты. Кітап стресс оқиғасында бір рет байланысқаннан кейін, ол біраз уақыт байланысқан күйде қалады, Qˉ\bar{Q}-ге қарай баяу азаяды. Бұл крипто құлдырауларының нақты тәжірибесіне сәйкес келеді: бағалар тұрақтанғаннан кейін корреляциялар бірден қайтпайды.
  • a+b=0.969<1a + b = 0.969 < 1 орташаға қайтуды растайды. Корреляция үрдісінің шамамен log(0.5)/log(a+b)22\log(0.5)/\log(a+b) \approx 22 күндік жартылай ыдырау кезеңі бар стационарлы ұзақ мерзімді деңгейі (Qˉ\bar{Q}) бар, ол соған қайтады. Егер сіз қашан да a+ba + b дерлік 1-ге тең екенін бағаласаңыз, корреляция үрдісі интегралданған — оның ұзақ мерзімді бекіткіші жоқ, әдетте модель шексіз тұрақтылық ретінде сіңіріп жатқан үлгідегі құрылымдық бұзылу белгісі.

Дерлік бірлік тұрақтылық пен шамалы шок жүктемесі — актив кластары бойынша канондық DCC саусақ ізі, крипто мұнда ерекшелік емес. Дәл сол себепті 30 күндік сырғымалы корреляция соншалықты нашар алмастырғыш: сырғымалы терезе бұл ыдырау құрылымына мүлдем сәйкес келмейтін aa мен bb-ны жасырын түрде болжайды.

Нақты жөндеу уақытын үнемдейтін бірнеше жүзеге асыру ескертпелері:

  • Инициализация. [0.03, 0.94]-тен бастау типтік крипто бағалауын көрсетеді: кіші aa (корреляциялар шоктарға жауап береді, бірақ қатты емес), үлкен bb (корреляциялар тұрақты). Егер оптимизаторыңыз a+b1a+b \to 1-ге қарай кетсе, корреляция үрдісі интегралданған — әдетте бұл үлгідегі құрылымдық бұзылудың белгісі (модель тұрақтылық ретінде бейімдеуге тырысатын режим өзгерісі).
  • Уақыттау конвенциясы. Циклдің ішінде біз RtR_t-ны ztz_t-ге қарсы бағалаймыз, содан кейін QQ-ны келесі қадам үшін ztztz_t z_t'-мен жаңартамыз. Бұл RtR_t-ны тек t1t-1-ге дейінгі ақпараттың функциясы етеді — алдын ала қарау жоқ. Мұны бір-бірден жаңылып алу — ең жиі кездесетін DCC қатесі, ол үлгі ішіндегі сәйкестікті үнсіз жоғарылатады.
  • Корреляция мақсаттауы. Біз Qˉ\bar{Q}-ны бағаламай, таңдамалы корреляция ретінде қоямыз. Дәл осы оптимизацияны екі өлшемді етеді. Құны — Qˉ\bar{Q} толық үлгіні қолданады, сондықтан қатаң walk-forward режимінде оны тек оқыту терезесінде қайта бағалау керек (төменде қараңыз).

3-қадам: Корреляция мен ковариация жолдарын қайта құру

a,ba, b бекітілгеннен кейін, рекурсияны тағы бір рет іске қосыңыз, бұл жолы төменгі стратегиялар пайдалана алатындай толық RtR_t (және HtH_t) жолын сақтап.

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 қатары — бүкіл жаттығудың жеміс беруі: бір санның орнына енді сізде графикке салуға, шектеу қоюға немесе стратегияға беруге болатын күнделікті корреляция бар. Нақты крипто деректерінде сіз әдетте оның тыныш кезеңдерде шамамен 0.5-тен стресс кезінде 0.9-нан жоғарыға дейін ауытқитынын көресіз — жалғыз таңдамалы корреляция орташалап жіберетін дәл сол диапазон.

Бір қадам алдағы болжам

Тірі сауда үшін сізге қазір қолжетімді ақпараттан алынған келесі кезеңдегі Ht+1H_{t+1} керек. Волатильділік жағы әрбір arch моделінің бір қадамдық болжамынан келеді; корреляция жағы рекурсияның тағы бір айналымы:

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)

Есіңізде болсын, барлығы масштабталған (×100) бірліктерде, себебі біз arch-ты series * 100 бойынша бейімдедік. Стратегияға беру алдында, шикі-табыс бірліктеріне қайту үшін волатильділіктерді 100-ге (және ковариацияларды 1002=10,000100^2 = 10{,}000-ге) бөліңіз. Масштабтауды дұрыс сақтау жалықтырады, бірақ жиі үнсіз қателердің көзі болады.

1-қолданба: Парлық сауда үшін динамикалық хедж қатынасы

Классикалық нарық-нейтралды пар — бір активте лонг, екіншісінде бета-салмақталған мөлшерде шорт — хедж қатынасы β\beta-ға тәуелді өмір сүреді немесе өледі. Оны оқыту терезесі бойынша статикалық OLS арқылы бағалаңыз, сонда сіз дәл осы мақала туралы болып отырған ескірген-корреляция мәселесін мұралайсыз: өткен тоқсанда нарықтық экспозицияны нейтралдандырған хедж бұл тоқсанда дұрыс емес.

DCC сізге хедж қатынасын уақыттық қатар ретінде береді. BTC арқылы ETH экспозициясының минималды-дисперсия хеджі — шартты регрессия коэффициенті:

β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}}

Оң жақтағы әрбір мүше — DCC шығысы. Хедж қатынасы екі түрлі себеп бойынша қозғалады, ал DCC оларды таза бөледі: корреляция ρt\rho_t өзгереді (активтер байланысады немесе ажырайды), және волатильділік қатынасы σETH,t/σBTC,t\sigma_{\text{ETH},t}/\sigma_{\text{BTC},t} өзгереді (бір актив салыстырмалы түрде волатильдірек болады). Сырғымалы-OLS бета екі әсерді кідіріспен араластырады; DCC оларды бөлек көрсетеді.

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-ты сіз жүргізіп жатқан кез келген парлық қозғалтқышқа беріңіз. Динамикалық хедж өзі бойынша артықшылық жасамайды — ол сіз сауда жасайтын спредті уақыт бойынша шынымен нарық-нейтралды етеді, сондықтан сіздің орташаға қайту сигналыңыз жылжымалы бағыттық экспозициямен ластанбайды. Егер сіз парлық стратегиялар құрсаңыз, бұл Криптодағы статистикалық арбитраж және парлық сауда мен парларға қашықтық тәсілі шеңберлеріне олардың бекітілген хедж қатынасын ауыстырып, тікелей орналасады. Корреляция қатарының өзі де кез келген сырғымалы терезеге қарағанда корреляцияға негізделген парлық сигнал үшін тазарақ кіріс болып табылады — сіз шулы терезеленген бағалаудың орнына тегістелген, моделге сәйкес ρt\rho_t аласыз.

βt\beta_t-ны тірі пайдалануға қатысты екі ескерту. Біріншіден, оны кідіртуβt1\beta_{t-1} бойынша сауда жасаңыз, ешқашан замандас βt\beta_t бойынша емес, әйтпесе сіз алдын ала қарайсыз. Екіншіден, күн сайын шайқалатын хедж қатынасы айналым мен комиссияларды тудырады; крипто нарығының 24/7 режимінде шорт аяғында қаржыландыру шығындарымен, шамадан тыс реактивті хедж түзейтін дрейфтен гөрі көбірек шығын әкелуі мүмкін. βt\beta_t-ны тегістеңіз (EWMA, немесе хеджды тек ол белгілі бір белдеуден өткенде теңестіру) және барлығын парасатты өлшеңіз — шулы сигнал бойынша позиция мөлшерлеу — Келли критерийі бойынша мөлшерлеу мақаласында қамтылған өз пәні.

2-қолданба: Уақыт бойынша өзгеретін портфель дисперсиясы

ww салмақ векторы бар портфель үшін шартты дисперсия:

σ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}

Статикалық ковариация матрицасымен — Марковиц әдепкісі — бұл сан сіз бір рет есептеп, әлі де шындық деп есептейтін тұрақты шама. Бұл олай емес. Портфель тәуекелі нарықпен бірге тыныс алады, және ол дәл корреляциялар секіргенде ең қатты тыныс алады, себебі құлдырауда σi,t\sigma_{i,t} мүшелері де, ρij,t\rho_{ij,t} мүшелері де бірге көтеріліп, көбейеді. Тыныш нарықтарда 40% жылдық волатильділікке ұқсаған портфель стресс аптасында 80%+-ды көрсетуі мүмкін, ал статикалық ковариация матрицасы ештеңе өзгермегенін айтады.

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())

Бұл уақыт бойынша өзгеретін σp,t\sigma_{p,t} — тәуекел негізіндегі бөлуге қажет адал кіріс. Статикалық таңдамалы ковариациямен орта-дисперсия оптимизациясы (Крипто үшін Марковиц теориясы) фантастикаға қарсы оптимизациялайды; оған HtH_t (немесе оның қысқа-горизонтты болжамын) беру тиімді шекараның өзін уақыт бойынша өзгертеді және оптимизаторды өспелі корреляция режимдеріне дейін тәуекелді азайтуға мәжбүрлейді, оларды кейін емес. Тәуекел-паритет пен иерархиялық тәсілдер — HRP + CVaR құбыры — ковариация кірісіне тіпті сезімтал, себебі бүкіл бөлу — тәуекел матрицасының функциясы. Ал егер сіз бөлушілерді бір-бірімен салыстырсаңыз, портфельді оптимизациялау алгоритмдерін салыстыру мақаласындағыдай, олардың статикалық немесе динамикалық ковариацияны тұтынуы алгоритм таңдауынан гөрі іске асқан тәуекелдің үлкенірек драйвері болып жиі шығады.

Тікелей қолданба — бүкіл портфельге волатильділікке бағыттау: мақсатты жылдық волатильділікті σ\sigma^{*} таңдап, дағдарыстарда ісіп кетудің орнына іске асқан тәуекел шамамен тұрақты болып қалатындай, брутто экспозицияны әр кезеңде σ/σp,t\sigma^{*} / \sigma_{p,t}-ге масштабтаңыз. Бұл дәл осы ережені құрып бэктестен өткізетін 4-бөліммен циклді жабады.

3-қолданба: Режим сигналы ретінде корреляция

Хеджирлеу мен мөлшерлеуден тыс, корреляция матрицасы макро сигнал алып жүреді. Сіз шығара алатын ең пайдалы жалғыз скаляр — орташа жұптық корреляция:

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

ρˉt\bar{\rho}_t бүкіл кітап бойынша көтерілгенде, нарық risk-off режиміне кіреді — идиосинкратикалық оқиғалар маңызды болудан қалады және бәрі бір макро бета ретінде сатылады. Бұл "дағдарыста корреляциялар 1-ге барады" деген сандық саусақ ізі. Ол құлдыраулардан бұрын немесе олармен қатар жүруге бейім, бұл оны кешіккен постмортемнен гөрі пайдалы режим индикаторы етеді.

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-ты дербес шектегіш ретінде пайдалана аласыз (брутто экспозицияны қысқарту, стоптарды кеңейту, бәрі бірге трендтеп жатқанда жаншылатын орташаға қайту стратегияларын тоқтату) немесе неғұрлым формалды режим моделінде белгі ретінде. Ол HMM арқылы режимді анықтау мақаласындағы жасырын Марков тәсілімен табиғи түрде жұптасады: орташа DCC корреляциясы HMM-ге бере алатын неғұрлым ақпаратты бақылау айнымалыларының бірі, себебі ол кейінге қалдырылған табыстардан айырмашылығы жүйелік стресс туралы алдын ала болжайды. Адал ескерту: көтерілетін корреляция сізге диверсификация сәтсіздікке ұшырап жатқанын айтады, бірақ нарық қай бағытта жүретінін айтпайды. Бұл — тәуекел сигналы, альфа сигналы емес, және сол ретінде мөлшерленуі керек — тәуекел режимін бағыттық бетке айналдырудың неге жаман аяқталатыны туралы шығындар мен пайданың асимметриясы мақаласын қараңыз.

Практикалық ойлар

Бағалау тұрақтылығы және активтер саны

DCC BEKK-ке қарағанда әлдеқайда жақсы масштабталады, бірақ "масштабталады" деген "тегін" дегенді білдірмейді. Корреляция-мақсаттау матрицасы Qˉ\bar{Q}d×dd \times d таңдамалы корреляция, ал таңдамалы корреляция матрицалары dd бақылаулар санына жақындаған сайын нашар шартталған болады. 4 активпен және 1000 күнмен бәрі жақсы. 60 активпен және 400 күнмен Qˉ\bar{Q} дерлік сингулярлы, оның кері мәні ықтималдықта жарылады, ал RtR_t сандық шуылдан оң анықталмаған болып адасуы мүмкін. Жиі қажет болу ретімен, шараттар:

  • Qˉ\bar{Q}-ны құрылымдалған мақсатқа қарай тарылту (Ledoit-Wolf, немесе бірлікке / тұрақты-корреляция матрицасына қарай) рекурсияны іске қосар алдында. Бұл үлкен кітаптар үшін ең жоғары пайдалы түзету.
  • Активтерді топтастыру бірнеше секторға (мажорлар, L1-дер, DeFi, мемдер), сектор деңгейінде ішінде және аралас модельдеу, немесе шикі активтер орнына негізгі компонент факторларында DCC іске қосу.
  • Көбірек активтерге қарағанда көбірек деректерді жөн көру. DCC-тің ұзақ, таза, замандас тарихқа деген шексіз тәбеті бар — бұл жас токендерде дәл жоқ нәрсе.

Шындығында, тікелей DCC-ті ең көбі бірнеше ондаған активпен шектеңіз. Үлкен әлем үшін фактор табыстары мен идиосинкратикалық қалдықтар бойынша DCC — стандартты айналып өту жолы.

Корреляция мақсаттауы — құны бар қысқа жол

Qˉ\bar{Q}-ны мақсаттау бағалауды басқарылатын етеді, бірақ толық-үлгі шартсыз корреляциясын әрбір RtR_t-ге сіңіреді. Қатаң бэктестте бұл алдын ала қарау ағуы: сіздің tt-күндік корреляция матрицаңыз болашақты қоса, бүкіл үлгінің орташа корреляциясын "біледі". Адал бағалау үшін Qˉ\bar{Q}-ны тек оқыту терезесінде қайта бағалап, оны үлгіден тыс бекітілген күйде ұстау керек, немесе оны алға жылжыту керек. Бұл дәл сол тәртіп бүкіл walk-forward оптимизациясы шеңберінің талап ететін тәртібі, және оны ыңғайлы np.cov(Z) толық массивте оңай байқаусыз бұзуға болады — жоғарыдағы біздің оқыту кодымыз дәл осылай жасайды. Кез келген жалғыз P&L санына сенер алдында оны түзетіңіз.

Қайта бейімдеу жиілігі және алдын ала қарау тәртібі

a,ba, b-ны күн сайын қайта оптимизациялаудың қажеті жоқ — олар тұрақты параметрлер. Парасатты өндірістік жиілік:

  • a,ba, b мен бір айнымалы GARCH параметрлерін қайта бағалау апта сайын немесе ай сайын.
  • Сүзгіні (Q_t, σi,t\sigma_{i,t}-ны жаңарту) әр кезеңде іске қосу мұздатылған параметрлермен, жаңа RtR_t мен HtH_t алу үшін. Сүзу арзан; бейімдеу арзан емес.
  • Әрдайым болжаңыз, ешқашан тегістемеңіз. tt-де сауда жасау үшін t1t-1-ге дейінгі ақпараттан құрылған RtR_t-ны пайдаланыңыз. Екі өтулі құрылым (терезеде бейімдеу, содан кейін алға сүзу) сізді адал ұстайды.

DCC бэктесі мен тірі өнімділік арасындағы алшақтық дерлік әрдайым алдын ала қарау ағуы — толық-үлгі Qˉ\bar{Q}, замандас βt\beta_t, немесе сіз бағалап жатқан саудасын қамтитын деректерде қайта бейімдеу. Бэктесті тірі жағдайларға сәйкестендіру тәртібі бэктест-тірі паритеті мақаласындағы өз тақырыбы, және DCC мұнда көбінесе абайсыздықты жазалайтын модель. Егер таза walk-forward бағалаудан кейін динамикалық корреляция сіздің стратегияңыз үшін қарапайым сырғымалы бағалаудан артық ештеңе қоспаса, бұл — нақты және жариялауға жарамды теріс нәтиже — адал теріс нәтижелер мақаласындағы ойлау тәсілі тікелей қолданылады.

Асимметриялы DCC (aDCC)

Дәл бір айнымалы левередж эффектісі (2-бөлім) жаман жаңалықтардың волатильділікті жақсы жаңалықтарға қарағанда көбірек көтеретінін білдіретіндей, корреляциялар бірлескен оң шоктардан кейінге қарағанда бірлескен теріс шоктардан кейін көбірек көтеріледі. Каппиелло, Энгл және Шеппард (2006) мұны теріс-бөлік стандартталған қалдықтардың zt=min(zt,0)z_t^- = \min(z_t, 0) сыртқы көбейтіндісімен басқарылатын мүше қосу арқылы асимметриялы DCC-мен ұстайды:

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}

мұндағы Nˉ=1Ttztzt\bar{N} = \frac{1}{T}\sum_t z_t^- z_t^{-\prime} және g0g \ge 0 бірлескен төмендегі қозғалыстардан қосымша корреляция серпінін өлшейді. Крипто үшін, мұнда құлдырау-корреляциясы басым тәуекел болатын жерде, асимметрия мүшесі әдетте маңызды және бір қосымша параметрге тұрарлық. rmgarch aDCC-ті қораптан тыс бейімдейді (model="aDCC"); біздің NumPy бағалаушымызға ztz_t^- мүшесін қосу — қарапайым жаттығу.

Салыстыру: DCC баламаларға қарсы

Крипто кітап үшін ковариация матрицасын алудың жолдары арасында DCC қайда орналасады? Адал қорытынды:

Тәсіл Параметрлер Масштабтала ма Уақыт бойынша ρ\rho өзгере ме? PD кепілдендіріле ме? Құйрық тәуелділігі?
Таңдамалы / сырғымалы ковариация 0 (терезе ұзындығы) кез келген dd шамамен (кідірген, шулы) жоқ (жамауды қажет етеді) жоқ
EWMA (RiskMetrics) 1 (λ\lambda) кез келген dd иә (жалғыз ыдырау) иә жоқ
CCC-GARCH dd маржинал + Qˉ\bar{Q} ондаған жоқ (тұрақты RR) иә жоқ
DCC-GARCH dd маржинал + 2 ондаған иә иә жоқ
aDCC-GARCH dd маржинал + 3 ондаған иә, асимметриялы иә ішінара
BEKK O(d2)O(d^2) 4\le 4 иә (бай) иә жоқ
VECH O(d4)O(d^4) 3\le 3 иә (ең байы) ауыр жоқ
GARCH-копула dd маржинал + копула ондаған (виндер) статикалық копула иә иә

Бұл кестенің бірнеше оқылымы:

  • EWMA — DCC көмектеседі деп мәлімдеу алдында бәрі жеңуі керек арзан базалық сызық. Ол рухы бойынша бір параметрлі жеке жағдай — тікелей ковариацияға қолданылатын жалғыз экспоненциалды ыдырау — және көптеген кітаптар үшін оны үлгіден тыс жақсарту таңғаларлық қиын. Егер DCC таза walk-forward режимінде EWMA-дан жоғары шықпаса, EWMA-ны қолданыңыз.
  • CCC vs DCC — осы мақаланың бүкіл мәні: бірдей факторизация, бірақ CCC RR-ды мұздатады, ал DCC оның қозғалуына мүмкіндік береді. Екі қосымша параметр (a,ba, b) — бүкіл айырмашылық, ал крипто нарығында олар өз бағасын ақтайды.
  • BEKK/VECH байырақ динамика сатып алады — әрбір ковариация әрбір өткен шокқа жауап бере алады — бірақ параметр құны оларды кіші кітаптармен шектейді. 4 активтен асқан кезде олар нақты опция емес.
  • GARCH-копула — құйрық тәуелділігі бағанында "иә" бар жалғыз жол. Бұл тағы да толықтырушылық: DCC бірлескен үлестірімнің динамикалық орталығын модельдейді, копулалар оның статикалық құйрықтарын модельдейді. Егер сіздің тәуекел сұрағыңыз "бәрі бірге бұзылса не болады" болса, копула құбырын алыңыз; егер бұл "менің хедж қатынасым / портфель дисперсиям қазір қандай" болса, DCC-ті алыңыз.

Жүйелі крипто дескі үшін практикалық әдепкі: денеде хедж қатынастары мен динамикалық ковариация үшін DCC (немесе aDCC), құйрық-тәуекелі мен CVaR үшін копула жабыны, және қосымша механизм өзін ақтап жатқанын білу үшін сізді адал ұстайтын EWMA сапалылық-тексеру базалық сызығы ретінде.

Шектеулер

  • Скаляр динамика. Барлық жұптар үшін бір aa және бір bb — күшті шектеу. BTC-ETH мен екі белгісіз альт бірдей бейімделу жылдамдығын бөліседі. Жалпыланған DCC мұны босаңсытады, бірақ DCC болдырмауға арналған параметр жарылысын қайта енгізеді.
  • Екі қадамды тиімділік жоғалуы. Квази-ықтималдық бағалаушы тұрақты, бірақ толық тиімді емес, ал аңғал стандартты қателер дұрыс емес. Егер сіз қорытынды үшін алаңдасаңыз, Энгл-Шеппард түзетуін пайдаланыңыз; сигнал генерациясы үшін нүктелік бағалаулар жеткілікті.
  • Әдепкі бойынша Гаусс құйрықтары. Қарапайым Гаусс квази-ықтималдығы бірлескен құйрық тәуекелін төмендетіп көрсетеді. Стьюдент-t инновациялары көмектеседі; шынайы құйрық тәуелділігі үшін (бір мезгілдегі экстремалды қозғалыстар ықтималдығы), DCC — дұрыс емес құрал, ал копула моделі — дұрысы. DCC сізге корреляцияның динамикалық денесін береді; копулалар статикалық құйрықты береді. Байыпты дескілер екеуін де пайдаланады.
  • Корреляция себептілік емес, және бағыт емес. Көтерілетін ρˉt\bar{\rho}_t диверсификация сәтсіздікке ұшырап жатқанын ескертеді; ол нарық бағыты туралы ештеңе айтпайды. Тәуекел сигналын бағыттық күтулермен шамадан тыс жүктемеңіз.
  • Деректерге тәбет. Жоғарыдағының бәрі ұзақ, таза, синхрондалған тарихты болжайды. Криптоның ең жаңа және қызықты токендері үшеуін де бұзады.

Қорытынды

  • Крипто нарығында статикалық корреляция — өтірік. Корреляциялар кластерленеді, тұрақты болады және диверсификация көмектесуі керек кезде — құлдырауда дәл 1-ге қарай секіреді. Жалғыз таңдамалы ρ^\hat{\rho} режим-ауыстыратын үрдісті мағынасыз ортаға орташалайды.
  • Толық көпөлшемді GARCH (VECH, BEKK) масштабталмайды. Параметрлер саны O(d2)O(d^2) ретінде өседі; екеуі де іс жүзінде бірнеше активпен шектеледі.
  • DCC (Энгл, 2002) мәселені факторлайды: Ht=DtRtDtH_t = D_t R_t D_t, DtD_t тәуелсіз бір айнымалы GARCH бейімдеулерінен (1-2 бөлімдерді қайта пайдаланады), ал RtR_t екі-параметрлі рекурсиядан. Ол ондаған активке масштабталады, себебі тек a,ba, b оптимизацияланады.
  • Рекурсия Qt=(1ab)Qˉ+azt1zt1+bQt1Q_t = (1-a-b)\bar{Q} + a\,z_{t-1}z_{t-1}' + b\,Q_{t-1}, RtR_t-ге нормаланған, a,b>0a,b>0, a+b<1a+b<1 болғанда әрбір қадамда жарамды оң анықталған корреляция матрицасын өндіреді.
  • arch DCC жасамайды. Маржиналдарды arch-пен бейімдеп, содан кейін мұндағы шамамен 60-жолды NumPy/SciPy бағалаушысын жүзеге асырыңыз, немесе mgarch (Python) немесе rmgarch (R, эталон) қолданыңыз.
  • Үш нақты пайда: парлық сауда үшін динамикалық хедж қатынасы βt=ρtσETH,t/σBTC,t\beta_t = \rho_t\,\sigma_{\text{ETH},t}/\sigma_{\text{BTC},t}; тәуекел негізіндегі бөлу үшін адал уақыт бойынша өзгеретін портфель дисперсиясы wHtww'H_t w; және risk-off режим сигналы ретінде орташа жұптық корреляция.
  • Тәртіп — бәрі. Корреляция мақсаттауы толық-үлгі орташасын ағызады, сондықтан Qˉ\bar{Q}-ны тек оқыту деректерінде қайта бағалаңыз; әрбір хедж қатынасын кідіртіңіз; алға сүзіңіз, ешқашан тегістемеңіз. Walk-forward бағалауы міндетті.
  • aDCC төмен-жақты асимметрия мүшесін қосады, және крипто нарығында, мұнда құлдырау-корреляциясы басым болатын жерде, әдетте құнды.
  • 4-бөлім осы болжамдарды волатильділікке бағытталған стратегия құру және бэктестен өткізу үшін пайдаланады.

Дереккөздер:

  • 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

Сандық зерттеулер және стратегия

Telegram-да талқылау
Newsletter

Нарықтан бір қадам алда болыңыз

AI сауда талдаулары, нарық аналитикасы және платформа жаңалықтары үшін біздің ақпараттық бюллетеньге жазылыңыз.

Біз сіздің жекелігіңізді құрметтейміз. Кез келген уақытта жазылымнан шығуға болады.