← Макалаларга кайтуу
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) жана Student-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 актив боюнча жылма корреляция матрицасы аны кичирейте же оңдой баштаганда оң жарым-аныкталган боюнча калары кепилденбейт, бул ар бир кийинки оптимизаторду бузат. Бизге (a) ар бир актив үчүн туура волатилдүүлүк процесси менен башкарылган, (b) конструкциясы боюнча ар бир кадамда жарактуу корреляция матрицасын чыгарган жана (c) терезенин узундугун шляпадан тандоо менен эмес, максималдуу ыктымалдуулук менен баалай ала турган параметрлери бар модель керек. Бул модель — 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_t — маалымат топтому Ft1\mathcal{F}_{t-1} берилгендеги d×dd \times d шарттуу ковариация матрицасы, ал эми D\mathcal{D} — кайсы бир шарттуу таркалуу (Гаусс же крипто үчүн жакшыраак — көп өлчөмдүү Student-t). Көп өлчөмдүү волатилдүүлүк моделдөөдөгү бардык нерсе бир суроого ар кандай жооп: HtH_t динамикасын параметр жарылуусусуз ар бир кадамда симметриялуу оң аныкталган боюнча калгыдай кылып кантип параметрлештирүү керек?

Эки классикалык жооп маселенин эмне үчүн татаал экенин көрсөтөт.

VECH

VECH модели (Bollerslev, Engle, Wooldridge 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 модели (Engle & Kroner 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, же Student-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 корреляция рекурсиясы

Биз көмөкчү QtQ_t процессин — d×dd \times d симметриялуу оң аныкталган матрицаны — стандартташтырылган калдыктардын сырткы көбөйтүндүлөрү менен башкарылган GARCH сымал рекурсия менен моделдейбиз:

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}'дин канчасы алдыга өтөт,
  • жана орточо мааниге кайтуу чектөөсү a+b<1a + b < 1 (мында a,b>0a, b > 0), бир өлчөмдүү GARCH'тагы α+β<1\alpha + \beta < 1 менен түз аналогдуу.

Структура скалярдык 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; Cappiello-Engle-Sheppard асимметриялык 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 (DtD_t аркылуу) бир өлчөмдүү GARCH параметрлерине гана көз каранды — аны максималдаштыруу так 1-кадамда жасаган dd көз карандысыз бир өлчөмдүү GARCH модель тууралоо. Корреляция бөлүгү tC\ell_t^C 1-кадамдагы стандартташтырылган калдыктар берилгенде (RtR_t аркылуу) aa жана bb'га көз каранды. Ошентип 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'га көз каранды эмес, ошондуктан аны алып таштайбыз). Бул канча актив болбосун эки параметрдүү оптимизация — бүтүндөй маани ушунда. Ал квази-ыктымалдуулук деп аталат, анткени эки кадамдуу баалоочу ырааттуу бирок толук эффективдүү эмес; стандарттык каталар оңдоону талап кылат (Engle & Sheppard 2001), бирок сигнал жаратуу үчүн нукталык баалоолор маанилүү.

Крипто үчүн Гаусс инновациялары куйрук тобокелдигин кем баалайт. Көп өлчөмдүү Student-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 (Alexios Galanos) — эталондук ишке ашыруу. dccspec / dccfit DCC, aDCC, GARCH-копула, Student-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 орточо мааниге кайтууну ырастайт. Корреляция процессинин ал кайра келе турган стационардуу узак мөөнөттүү деңгээли (Qˉ\bar{Q}) бар, жарым ажыроо мезгили болжол менен log(0.5)/log(a+b)22\log(0.5)/\log(a+b) \approx 22 күн. Эгер сиз 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} толук үлгүнү колдонот, ошондуктан катуу алдыга жүрүштө сиз аны окутуу терезесинде гана кайра баалашыңыз керек (төмөндө караңыз).

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 китеп боюнча өссө, базар тобокелден-качуу режимине кирип жатат — идиосинкратикалык окуялар мааниси токтоп, бардыгы бир макро бета катары соодаланат. Бул кризисте корреляциялар 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}'ну болгону окутуу терезесинде кайра баалап, аны үлгүдөн тышкары бекитип кармашыңыз, же аны алдыга жылдырышыңыз керек. Бул бүтүндөй алдыга жүрүш оптимизациясы алкагы талап кылган дал ошол дисциплина, жана аны толук массив боюнча ыңгайлуу np.cov(Z) менен байкоосуз бузуу оңой — жогорудагы окутуу кодубуз кылгандай. Бир дагы P&L санына ишенээрден мурда аны оңдоңуз.

Кайра тууралоо ыргагы жана алдыга кароо дисциплинасы

Сизге a,ba, b'ны ар күнү кайра оптимизациялоонун кереги жок — алар туруктуу параметрлер. Акылга сыярлык өндүрүш ыргагы:

  • a,ba, b жана бир өлчөмдүү GARCH параметрлерин апталык же айлык кайра баалаңыз.
  • Фильтрди (жаңы QtQ_t, σi,t\sigma_{i,t}) ар мезгилде тоңдурулган параметрлер менен иштетип жаңы RtR_t жана HtH_t алыңыз. Фильтрлөө арзан; тууралоо арзан эмес.
  • Дайыма болжолдоңуз, эч качан тегиздебеңиз. tt'де соодалоо үчүн t1t-1'ге чейинки маалыматтан курулган RtR_t'ди колдонуңуз. Эки өтүүлүү структура (терезеде тууралоо, андан кийин алдыга фильтрлөө) — сизди чынчыл кармаган нерсе.

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

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

Бир өлчөмдүү леверидж эффекти (2-бөлүк) жаман кабар волатилдүүлүктү жакшы кабарга караганда көбүрөөк көтөргөндөй, корреляциялар кошмо оң шокторго караганда кошмо терс шокторлордон кийин көбүрөөк өсөт. Cappiello, Engle & Sheppard (2006) муну асимметриялык DCC менен кармашат, терс-бөлүк стандартташтырылган калдыктардын zt=min(zt,0)z_t^- = \min(z_t, 0) сырткы көбөйтүндүсү менен башкарылган мүчө кошуп:

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"); ztz_t^- мүчөсүн биздин NumPy баалоочуга кошуу — түз көнүгүү.

Салыштыруу: альтернативаларга каршы 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 таза алдыга жүрүштө 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 качуу үчүн долбоорлонгон параметр жарылуусун кайра киргизет.
  • Эки кадамдуу эффективдүүлүктүн жоготуусу. Квази-ыктымалдуулук баалоочусу ырааттуу бирок толук эффективдүү эмес, жана жөнөкөй стандарттык каталар туура эмес. Эгер сиз тыянак чыгарууну кааласаңыз, Engle-Sheppard оңдоосун колдонуңуз; сигнал жаратуу үчүн нукталык баалоолор жетиштүү.
  • Демейки боюнча Гаусс куйруктары. Жөнөкөй Гаусс квази-ыктымалдуулугу кошмо куйрук тобокелдигин кем баалайт. Student-t инновациялары жардам берет; чыныгы куйрук көз карандылыгы үчүн (бир убакта эстремалдык кыймылдардын ыктымалдыгы), DCC туура эмес курал жана копула модели туура. DCC сизге корреляциянын динамикалык денесин берет; копулалар статикалык куйрукту берет. Олуттуу соода бөлүмдөрү экөөнү тең колдонот.
  • Корреляция себеп эмес, багыт да эмес. Өсүп жаткан ρˉt\bar{\rho}_t диверсификация ишке жарабай жатканын эскертет; ал базар багыты жөнүндө эч нерсе айтпайт. Тобокелдик сигналын багыттуу күтүүлөр менен ашык жүктөбөңүз.
  • Маалымат ачарчылыгы. Жогорудагы бардыгы узун, таза, синхрондоштурулган тарыхтарды болжолдойт. Криптонун эң жаңы жана эң кызыктуу токендери үчөөнү тең бузат.

Корутунду

  • Криптодо статикалык корреляция — жалган. Корреляциялар кластерленет, туруктуу болуп, кулоолордо 1ге карай секирет — так диверсификация жардам бериши керек болгон учурда. Бир тандалма ρ^\hat{\rho} режим алмашуучу процессти маанисиз орточолукка орточолойт.
  • Толук көп өлчөмдүү GARCH (VECH, BEKK) масштабдалбайт. Параметрлердин саны O(d2)O(d^2) катары өсөт; экөө тең практикада бир нече активге чектелген.
  • DCC (Engle 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; жана тобокелден-качуу режим сигналы катары орточо жуптук корреляция.
  • Дисциплина — бардыгы. Корреляция таргеттөө толук-үлгүлүк орточону агызат, ошондуктан Qˉ\bar{Q}'ну болгону окутуу маалыматында кайра баалаңыз; ар бир хедж-коэффициентти кечиктириңиз; алдыга фильтрлеңиз, эч качан тегиздебеңиз. Алдыга жүрүш баалоосу — сүйлөшүлбөйт.
  • 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 соода аналитикасы, рынок талдоолору жана платформа жаңылыктары үчүн биздин жаңылыктар бюллетенине жазылыңыз.

Биз сиздин купуялыгыңызды урматтайбыз. Каалаган убакта жазылымдан чыга аласыз.