← Makalelere geri dön
July 12, 2026
5 dakikalık okuma

DCC-GARCH: Cift Islemleri ve Portfoy Riski Icin Dinamik Korelasyonlar

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

Cogu kripto masasina BTC ile ETH arasindaki korelasyonu sorun ve tek bir sayi alirsiniz — 0.8, belki 0.75 — kimsenin sectigini hatirlamadigi bir pencere uzerinden hesaplanmis. Bu sayi bir yalandir ya da en azindan tehlikeli bir basitlestirmedir. Ornek korelasyon, gercek bagimlilik yapisinin surekli hareket ettigi bir donem boyunca alinan bir ortalamadir. Sakin piyasalarda BTC ve ETH, piyasa-notr bir cifti cazip gosterecek kadar birbirinden uzaklasir. Bir tasfiye kaskadinda ise birbirlerine ve her seye kilitlenirler; odedigin cesitlendirme, tam da ona ihtiyac duydugun anda buharlasir.

Bu ince bir etki degildir. 2022'nin herhangi bir cokusunu ele alin — mayistaki LUNA cokusu, hazirandaki 3AC cozulmesi, kasimdaki FTX patlamasi — ve ilk 20 token genelinde ortalama ikili korelasyonun gunler icinde 0.4-0.6 araligindan 0.9+'a dogru yurudugunu goreceksiniz. Korelasyon, ara sira kotu tahmin edilen bir sabit degildir; kendi dinamiklerine, kendi kumelenmesine ve kendi rejimlerine sahip bir zaman serisidir. Onu bir skaler olarak ele almak, sabit volatilite varsaymanin cok degiskenli esdegeridir — bu seri boyunca bu serinin 1. Bolumunde tek bir varlik icin cozdugumuz bir hata.

Bu makale, dort bolumluk bir volatilite serisinin 3. Bolumudur. 1. Bolum, arch kutuphanesiyle tek degiskenli GARCH(1,1)'i kurdu ve volatilitenin nasil kumelendigini ve ortalamaya dondugunu gosterdi. 2. Bolum, kaldirac etkisini ve kalin kuyruklari yakalamak icin asimetri (GJR-GARCH, EGARCH) ve Student-t yeniliklerini ekledi. Burada cok degiskenli hale geliyoruz: Engle'in Dinamik Kosullu Korelasyon (DCC) modelini kullanarak, gelistigi haliyle tum kosullu kovaryans matrisi HtH_t'yi modelliyoruz. Bu bize, bir skaler korelasyonun asla veremeyecegi iki sey verir — cift islemleri icin dinamik bir hedge orani ve risk-tabanli tahsis icin durust, zamanla degisen bir portfoy varyansi. 4. Bolum, tek degiskenli ve cok degiskenli tahminleri bir pozisyon-boyutlandirma kuralinda birlestiren volatilite-hedefli bir geriye-donuk teste seriyi kapatir.

  1. ve 2. Bolumleri okudugunuzu varsayiyoruz, bu yuzden tek degiskenli GARCH'i yeniden turetmeyecegiz. Ortak kuyruk davranisini — iki varligin yuzde 1'lik nicelik dilimini birlikte asma olasiligini — istiyorsaniz, bu bir kopula sorusudur ve bunu Ortak Risk Icin Kopula Modelleri yazisinda ele aliyoruz. DCC ve kopulalar birbirini tamamlar niteliktedir: kopula size statik-ama-esnek bir kuyruk-bagimliligi yapisi verirken, DCC size tum korelasyon matrisinin islenebilir bir zaman serisini verir. Bu makale, ikincisi hakkindadir.

Kriptoda Statik Korelasyon Neden Coker

Makineye gecmeden once, neyin bozuldugu konusunda net olalim. Bir [tw,t][t-w, t] penceresi uzerindeki tek bir ornek korelasyon ρ^\hat{\rho}, sunu tahmin eder

ρ^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, kripto icin hepsi yanlis olan uc ortuk varsayim tasir:

  1. Bagimliligin duraganligi. Pencerenin tek bir gercek ρ\rho'su vardir. Gerceklikte bagimliligin rejimleri vardir — 0.5 civarinda sakin-piyasa rejimi ve 0.95 civarinda stres rejimi — ve ρ^\hat{\rho} bunlari anlamsiz bir ortaya harmanlar.
  2. Sabit marjinal volatilite. Pearson korelasyonu, normalize edilmis bir kovaryanstir. Eger σi,t\sigma_{i,t} ve σj,t\sigma_{j,t} kendileri hareket ediyorsa (ki ediyorlar — bu 1. ve 2. Bolumlerin tum onermesidir), o zaman sabit bir kovaryans bile zamanla degisen bir korelasyon uretir ve tersi de gecerlidir. Altta bir volatilite modeli olmadan ikisini ayiramazsiniz.
  3. Piyasa yonune gore simetri. Korelasyon, cokuslerde yukselislerdekinden daha fazla artar. Bu, kaldirac etkisinin cok degiskenli kuzenidir. Bir kayan pencere, saf gurultu olacak kadar kisa hale gelmeden bunu ifade edemez.

Kayan-pencere cozumu — ρ^\hat{\rho}'yu son 30 veya 60 gun uzerinden yeniden hesaplamak — bir sorunu bir baskasiyla takas eder. Kisa pencereler duyarlidir ama gurultuludur ve gercek kirilmanin gerisinde kalir; uzun pencereler kararlidir ama bayattir. Daha kotusu, dd varlik uzerinde bir kayan korelasyon matrisi, onu kuculttukten veya yamaladiktan sonra pozitif yari-tanimli kalacaginin garantisini vermez ki bu da her asagi-akis optimize ediciyi bozar. (a) varlik basina uygun bir volatilite sureci tarafindan yonlendirilen, (b) yapisi geregi her adimda gecerli bir korelasyon matrisi ureten ve (c) bir pencere uzunlugunu havadan secmek yerine maksimum olabilirlikle tahmin edebilecegimiz parametrelere sahip bir model istiyoruz. Bu model, DCC-GARCH'dir.

Cok Degiskenli Problem: Kosullu Kovaryans Matrisi

rtRdr_t \in \mathbb{R}^d, tt zamaninda dd varlik icin getiri vektoru olsun; kosullu ortalama μt\mu_t (cogu zaman sadece bir sabit ya da kucuk bir AR terimi) ve artik ϵt=rtμt\epsilon_t = r_t - \mu_t ile. Su varsayimda bulunuyoruz

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

burada HtH_t, Ft1\mathcal{F}_{t-1} bilgi kumesi verildiginde d×dd \times d kosullu kovaryans matrisidir ve D\mathcal{D} bir kosullu dagilimdir (Gaussian ya da kripto icin daha iyisi, cok degiskenli Student-t). Cok degiskenli volatilite modellemesindeki her sey tek bir soruya verilen farkli bir cevaptir: HtH_t'nin dinamiklerini, parametre patlamasi olmadan her adimda simetrik pozitif tanimli kalacak sekilde nasil parametrelestirirsiniz?

Iki klasik cevap, problemin neden zor oldugunu gosterir.

VECH

VECH modeli (Bollerslev, Engle, Wooldridge 1988), HtH_t'nin yari-vektorlestirmesini gecmis kareli artiklarin ve gecmis kovaryanslarin dogrusal bir fonksiyonu olarak yazar:

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

burada vech()\mathrm{vech}(\cdot), simetrik bir matrisin alt ucgenini d(d+1)/2d(d+1)/2 uzunlugunda bir vektore istifler. Bu, azami olcude geneldir — her varyans ve kovaryans, her gecmis varyansa ve kovaryansa baglidir — ve d=3d=3'un otesinde azami olcude ise yaramazdir. dd varlik icin, AA ve BB her biri d(d+1)2×d(d+1)2\frac{d(d+1)}{2} \times \frac{d(d+1)}{2}'dir. d=5d=5'te bu, iki 15×1515\times 15 matris, kabaca 450 parametre, arti ifade edilmesi bile zahmetli olan pozitif-tanimlilik kisitlamalari demektir. Olabilirlik yuzeyi bir batakliktir.

BEKK

BEKK modeli (Engle & Kroner 1995), bir kuadratik form kullanarak pozitif tanimliligi yapisi geregi garanti eder:

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

burada CC ust ucgenseldir. Her terim bir kuadratik form oldugundan, CC0C'C \succ 0 oldugu surece Ht0H_t \succ 0 otomatik olarak saglanir. BEKK, VECH'ten daha tutumludur ama yine de O(d2)O(d^2) parametre olarak olceklenir — AA ve BB matrisleri her biri d×dd \times d'dir. d=10d=10 icin, gurultulu gunluk kripto verisi uzerinde MLE ile ortaklasa 200+ mertebesinde parametre tahmin ediyorsunuz ve optimize edicinin anlamli bir seye yakinsayacaginin garantisi yok. Pratikte tam BEKK d4d \le 4 ile sinirlidir ve o zaman bile insanlar capraz dinamiklerin cogunu atan "kosegen" veya "skaler" kisitlamalari kullanir.

Bu, cok degiskenli GARCH icin boyutsallik lanetidir: parametre sayisi kuadratik olarak artar ama verideki bilgi miktari artmaz. Onemsediginiz varliklar bitmeden cok once serbestlik dereceleriniz tukenir. 10-30 tokenlik herhangi bir kripto portfoyu, VECH veya BEKK icin tamamen erisilmezdir.

Cikis yolu, Engle sayesinde, HtH_t'yi dogrudan modellemeye calismayi birakip onun yerine onu zaten ucuza tahmin etmeyi bildigimiz parcalara carpanlarina ayirmaktir.

Engle'in DCC'si (2002): Iki-Adimli Ayristirma

Bollerslev'in Sabit Kosullu Korelasyon (CCC) modeli (1990), ilk tutumlu carpanlara ayirmaydi. Sunu yazar

Ht=DtRDtH_t = D_t\, R\, D_t

burada Dt=diag(σ1,t,,σd,t)D_t = \mathrm{diag}(\sigma_{1,t}, \ldots, \sigma_{d,t}) kosullu standart sapmalarin kosegen matrisidir — varlik basina bir tek degiskenli GARCH — ve RR bir sabit korelasyon matrisidir. Bu buyuk bir basitlestirmedir: dd bagimsiz tek degiskenli GARCH modeli uydurursunuz, sonra standartlastirilmis artiklarin tek bir ornek korelasyon matrisini tahmin edersiniz. RR gecerli bir korelasyon matrisi ve tum σi,t>0\sigma_{i,t} > 0 oldugu surece pozitif tanimlilik otomatiktir.

CCC'nin sorunu tam da adinda gizlidir — korelasyon sabittir, ki bu tam olarak bu makaleyi acarken reddettigimiz varsayimdir. Engle'in Dinamik Kosullu Korelasyon modeli (2002), CCC'nin guzel carpanlara ayirmasini korur ama korelasyon matrisinin nefes almasina izin verir:

Ht=DtRtDtH_t = D_t\, R_t\, D_t

Artik RtR_t zamanla degiskendir. Dahiyane olan sey, volatilitelerin ve korelasyonlarin iki ayri adimda tahmin edilmesidir, boylece tam O(d2)O(d^2) ortak optimizasyonla asla karsi karsiya kalmayiz.

Adim 1: Varlik basina tek degiskenli GARCH

Her varlik ii icin, 1. ve 2. Bolumlerdeki gibi tam olarak bir tek degiskenli GARCH modeli uydurun — o seri icin en iyi uyan neyse GARCH(1,1), GJR-GARCH ya da Student-t yenilikli EGARCH. Bu, kosullu varyanslari σi,t2\sigma_{i,t}^2 ve dolayisiyla Dt=diag(σ1,t,,σd,t)D_t = \mathrm{diag}(\sigma_{1,t}, \ldots, \sigma_{d,t})'yi verir.

Uydurulmus modellerden standartlastirilmis artiklari cikartiriz:

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

Yapisi geregi her zi,tz_{i,t}'nin (yaklasik olarak) birim kosullu varyansi vardir. Bunlari bir vektore istifleyin zt=(z1,t,,zd,t)z_t = (z_{1,t}, \ldots, z_{d,t})'. Bu standartlastirilmis artiklar, korelasyon adiminin ham malzemesidir — kendi bireysel volatilite dinamikleri soyulup atilmistir, dolayisiyla geriye kalan her ortak hareket bir volatilite eseri degil, saf bagimliliktir. (Bu, kopula makalesinin marjinalleri uydurmadan once kullandigi ayni PIT-tarzi mantiktir; burada, tamamen tekduzelere gitmek yerine standartlastirmada duruyoruz.)

Adim 2: DCC korelasyon rekursiyonu

Yardimci bir surec QtQ_t'yi modelliyoruz; d×dd \times d simetrik pozitif tanimli bir matris, standartlastirilmis artiklarin dis carpimlariyla yonlendirilen GARCH-benzeri bir rekursiyonla:

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

burada:

  • Qˉ=1Tt=1Tztzt\bar{Q} = \frac{1}{T}\sum_{t=1}^{T} z_t z_t', standartlastirilmis artiklarin kosulsuz korelasyon matrisidir (bu korelasyon hedeflemedir — asagida daha fazlasi),
  • a0a \ge 0, bugunun soku zt1zt1z_{t-1}z_{t-1}''nin korelasyonu ne kadar guclu cektigini yonetir,
  • b0b \ge 0 kaliciligi yonetir — dunun Qt1Q_{t-1}'inden ne kadarinin ileri tasindigini,
  • ve ortalamaya donme kisitlamasi a+b<1a + b < 1'dir (a,b>0a, b > 0 ile), tek degiskenli GARCH'taki α+β<1\alpha + \beta < 1 ile dogrudan benzesir.

Yapinin bir skaler GARCH(1,1) rekursiyonuyla ozdes oldugunu, ama matrisler uzerinde oldugunu unutmayin: bir uzun-vadeli capa Qˉ\bar{Q}, bir sok terimi ve bir kalicilik terimi. Pozitif yari-tanimli matrislerin (Qˉ\bar{Q}, rank-1 dis carpim ve onceki Qt1Q_{t-1}) bir konveks kombinasyonu oldugundan, Qˉ0\bar{Q} \succ 0 ve agirliklar negatif olmadigi surece QtQ_t pozitif tanimli kalir. Garantili gecerli kovaryans matrislerini bize bedavaya kazandiran budur.

QtQ_t, neredeyse bir korelasyon matrisidir ama tam degil — kosegeni tam olarak 1 degildir. Bu yuzden onu normalize ederiz:

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}

Eleman bazinda, ii ve jj varliklari arasindaki kosullu korelasyon sudur

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

Bu RtR_t, yapisi geregi her tek zaman adiminda uygun bir korelasyon matrisidir — birim kosegen, [1,1][-1,1] araligindaki kosegen-disi elemanlar, pozitif tanimli. Tam kosullu kovaryansi yeniden birlestirin:

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}

O son eleman-bazinda form, surekli kullanacaginiz olandir: iki varligin kosullu kovaryansi, dinamik korelasyonlari carpi her birinin dinamik volatiliteleridir. Sag taraftaki her bilesen zamanla degiskendir ve tahmin edebileceginiz bir modelden gelir.

Tum modelde d=2d = 2 ya da d=50d = 50 olmasindan bagimsiz olarak yalnizca iki korelasyon parametresi, aa ve bb vardir. Volatilite tarafi dogrusal olarak olceklenir (varlik basina bir tek degiskenli GARCH, her biri ~4-5 parametreyle, hepsi bagimsiz ve utandirici derecede paralel sekilde uydurulmus). BEKK ve VECH'in olceklenemedigi yerde DCC'nin olceklenmesinin nedeni budur: boyutsallik laneti, optimize edilmek yerine hedeflenen (bir ornek tahmini olarak takilan) Qˉ\bar{Q} ile sinirlidir.

Skaler kisitlama ve maliyeti

a,ba, b skalerleri, her varlik ciftinin ayni korelasyon dinamiklerini paylastigi anlamina gelir — ayni uyum hizi ve ayni kalicilik. BTC-ETH korelasyonu ile DOGE-SHIB korelasyonu, ekonomileri farkli olsa da ayni ritimde hareket eder. Bu, islenebilirligin bedelidir ve genellikle kabul edilebilir bir bedeldir. Genellestirmeler (matris A,BA, B ile Genellestirilmis DCC; Cappiello-Engle-Sheppard asimetrik DCC) bunu parametreler ve tahmin kararliligi pahasina gevsetir. aDCC'den asagida bahsediyoruz.

DCC Kuazi-Log-Olabilirligi

aa ve bb'yi tahmin etmek icin olabilirlige ihtiyacimiz var. Engle'in kilit sonucu, Gaussian log-olabilirliginin bir volatilite parcasina ve bir korelasyon parcasina ayrilmasidir ki bu da iki-adimli tahmin ediciyi hakli kilar. ϵtFt1N(0,Ht)\epsilon_t \mid \mathcal{F}_{t-1} \sim \mathcal{N}(0, H_t) varsayarak, tt zamanindaki log-olabilirlik katkisi sudur

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'yi yerine koyun. O zaman Ht=Dt2Rt|H_t| = |D_t|^2 |R_t| ve Ht1=Dt1Rt1Dt1H_t^{-1} = D_t^{-1} R_t^{-1} D_t^{-1}, ve zt=Dt1ϵtz_t = D_t^{-1}\epsilon_t kullanilarak:

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)

Simdi ztztz_t'z_t'yi ekleyip cikararak bolun:

t=12(dlog(2π)+2logDt+ϵtDt2ϵt)volatilite parcasi   tV  12(logRt+ztRt1ztztzt)korelasyon parcasi   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{volatilite parcasi }\;\ell_t^{V}} \;\underbrace{-\frac{1}{2}\left( \log|R_t| + z_t' R_t^{-1} z_t - z_t' z_t \right)}_{\text{korelasyon parcasi }\;\ell_t^{C}}

Volatilite parcasi tV\ell_t^V yalnizca tek degiskenli GARCH parametrelerine baglidir (DtD_t araciligiyla) — onu maksimize etmek tam olarak, Adim 1'de yaptigimiz dd bagimsiz tek degiskenli GARCH modelini uydurmaktir. Korelasyon parcasi tC\ell_t^C, Adim 1'deki standartlastirilmis artiklar verildiginde, aa ve bb'ye baglidir (RtR_t araciligiyla). Yani Adim 2'de yalnizca sunu maksimize ederiz

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 terimi a,ba, b'ye bagli degildir, bu yuzden onu atariz). Bu, kac varlik olursa olsun iki-parametreli bir optimizasyondur — butun mesele budur. Buna kuazi-olabilirlik denir cunku iki-adimli tahmin edici tutarlidir ama tam olarak verimli degildir; standart hatalarin bir duzeltmeye ihtiyaci vardir (Engle & Sheppard 2001), ama sinyal uretimi icin onemli olan nokta tahminleridir.

Kripto icin, Gaussian yenilikleri kuyruk riskini oldugundan az gosterir. Cok degiskenli Student-t olabilirligini yerine koymak, t\ell_t'ye takilip-cikan bir degisikliktir (Gaussian cekirdegini cok degiskenli-tt yogunlukla degistirin ve bir serbestlik derecesi parametresi ν\nu ekleyin). Netlik icin asagidaki tahmin edicide Gaussian kuazi-olabilirligini tutuyoruz ve ν\nu'nun nereye girdigini not ediyoruz — 1-2. Bolumlerdeki standartlastirma marjinallerde zaten t-yeniliklerini kullanmisti ki bu da kuyruk faydasinin cogunu yakalar.

Python Uygulamasi

Acik ama onemli bir gercek: arch kutuphanesi cok degiskenli GARCH ya da DCC yapmaz. arch mukemmel bir tek degiskenli motordur (tam olarak bunun icin ona yaslaniyoruz), ama icinde bir dcc_model yoktur. Pratik secenekleriniz sunlardir:

  1. arch uzerinde kendi DCC'nizi yazin — tek degiskenli modelleri arch ile uydurun, standartlastirilmis artiklari cikartin, QQ-rekursiyonunu ve korelasyon kuazi-olabilirligini NumPy/SciPy'de uygulayin ve iki skaleri optimize edin. Asagida yaptigimiz budur. Yaklasik 60 satirdir ve tamamen seffaftir.
  2. mgarch PyPI paketi — hafif, saf Python DCC-GARCH uygulamasi. Hizli bir uydurma icin uygundur, GJR marjinalleri veya t-yeniliklerini tam olarak baglamak istiyorsaniz daha az esnektir.
  3. R'nin rmgarch'i (Alexios Galanos) — referans uygulama. dccspec / dccfit, DCC, aDCC, GARCH-kopula, Student-t ve uygun standart hatalari destekler. Ciddi cok degiskenli volatilite arastirmasi yapiyorsaniz, rmgarch (mecbursaniz Python'dan rpy2 ile cagrilir) altin standarttir.

Secenek 1'i insa ediyoruz cunku her hareketli parcayi acikca ortaya koyar ve 1-2. Bolumlerdeki tek degiskenli becerileri yeniden kullanir.

Adim 1: arch ile tek degiskenli GARCH marjinallerini uydurun

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

Standartlastirilmis artiklar uzerinde hizli bir mantik kontrolu onemlidir. Herhangi bir sutunun standart sapmasi 1'den cok uzaksa ya da karesinde agir kalintili otokorelasyon varsa (zi,t2z_{i,t}^2 uzerinde Ljung-Box), tek degiskenli marjinal yanlis belirtilmistir ve DCC adimi bu hatayi devralir. Once marjinali duzeltin — 2. Bolum bunun icindi.

Adim 2: DCC rekursiyonu ve kuazi-log-olabilirligi

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)

Bunu birkac yillik gunluk veri uzerinde bir BTC/ETH/SOL/BNB portfoyunde calistirmak, asagidaki bicimde bir cikti uretir (asagidaki sayilar ornekleyicidir, belirli tarihli bir deneyden degildir — onu kendi verinizde calistirin):

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

Nasil okunur:

  • a=0.029a = 0.029 kuciktur — korelasyon matrisi tek bir gunun soku uzerine sarsilmaz. Her gun RtR_t'yi dis carpim zt1zt1z_{t-1}z_{t-1}''e dogru yalnizca ~yuzde 3 iter.
  • b=0.940b = 0.940 buyuktur — korelasyonlar oldukca kalicidir. Bir stres olayinda portfoy bir kez birlesince, bir sure birlesik kalir ve yavasca Qˉ\bar{Q}'ya dogru geri bozunur. Bu, kripto cokuslerinin yasanmis deneyimiyle ortusur: korelasyonlar fiyat stabilize olur olmaz geri kopmaz.
  • a+b=0.969<1a + b = 0.969 < 1 ortalamaya donmeyi dogrular. Korelasyon sureci, kabaca log(0.5)/log(a+b)22\log(0.5)/\log(a+b) \approx 22 gunluk bir yariomurle geri dondugu duragan bir uzun-vadeli seviyeye (Qˉ\bar{Q}) sahiptir. Eger a+ba + b'yi hic 1'e esasen esit tahmin ederseniz, korelasyon sureci butunlesiktir — uzun-vadeli capasi yoktur, genellikle modelin sonsuz kalicilik olarak emdigi orneginizin icindeki bir yapisal kirilmanin belirtisidir.

Birime-yakin kalicilik ve minicik sok yuklemesi, varlik siniflari genelinde kanonik DCC parmak izidir ve kripto bir istisna degildir. 30-gunluk bir kayan korelasyonun bu kadar zayif bir ikame olmasinin nedeni de budur: bir kayan pencere ortuk olarak bu bozunma yapisiyla hic ortusmeyen aa ve bb'ler varsayar.

Gercek hata ayiklama zamani kazandiran birkac uygulama notu:

  • Baslatma. [0.03, 0.94]'te baslamak tipik kripto tahminini yansitir: kucuk aa (korelasyonlar soklara tepki verir ama siddetle degil), buyuk bb (korelasyonlar kalicidir). Optimize ediciniz a+b1a+b \to 1'e dogru dolanirsa korelasyon sureci butunlesiktir — genellikle orneklem icinde bir yapisal kirilmanin isaretidir (modelin kalicilik olarak uydurmaya calistigi bir rejim degisikligi).
  • Zamanlama kurali. Dongu icinde RtR_t'yi ztz_t'ye karsi puanlar ve sonra bir sonraki adim icin QQ'yu ztztz_t z_t' ile guncelleriz. Bu, RtR_t'yi yalnizca t1t-1'e kadarki bilginin bir fonksiyonu olarak tutar — ileriye-bakis yok. Bu bir-eksik zamanlamayi yanlis yapmak, en yaygin DCC hatasidir ve orneklem-ici uyumu sessizce sisirir.
  • Korelasyon hedefleme. Qˉ\bar{Q}'yu tahmin etmek yerine ornek korelasyon olarak takiyoruz. Optimizasyonu iki boyutlu yapan budur. Maliyet, Qˉ\bar{Q}'nun tum orneklemi kullanmasidir, dolayisiyla sikbir ileri-yuruyus icinde onu yalnizca egitim penceresi uzerinde yeniden tahmin etmelisiniz (asagiya bakin).

Adim 3: Korelasyon ve kovaryans yollarini yeniden olusturun

a,ba, b sabitlendikten sonra, rekursiyonu bir kez daha calistirin, bu sefer tam RtR_t (ve HtH_t) yolunu depolayarak, boylece asagi-akis stratejileri onu kullanabilir.

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 serisi, tum bu calismanin getirisidir: tek bir sayi yerine artik cizebileceginiz, esikleyebileceginiz ya da bir stratejiye besleyebileceginiz gunluk bir korelasyona sahipsiniz. Gercek kripto verisinde tipik olarak onun sakin donemlerde kabaca 0.5'ten stres sirasinda 0.9'un uzerine kadar uzandigini goreceksiniz — tek bir ornek korelasyonun ortalamayla yok ettigi tam da o yayilim.

Bir-adim-ileri tahmin

Canli islem icin, simdi mevcut bilgiden bir sonraki-donem Ht+1H_{t+1}'e ihtiyaciniz var. Volatilite tarafi her arch modelinin bir-adim tahmininden gelir; korelasyon tarafi rekursiyonun bir tur daha donmesidir:

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)

arch'i series * 100 uzerinde uydurdugumuz icin her seyin olceklenmis (×100) birimlerde oldugunu unutmayin. Bir stratejiye beslemeden once ham-getiri birimlerine geri donmek icin volatiliteleri 100'e (ve kovaryanslari 1002=10,000100^2 = 10{,}000'e) bolun. Olceklemeyi duzgun tutmak sikici ama sik gorulen bir sessiz hata kaynagidir.

Uygulama 1: Cift Islemleri Icin Dinamik Bir Hedge Orani

Klasik piyasa-notr cift — bir varligi uzun, digerinin beta-agirlikli bir miktarini kisa — hedge orani β\beta uzerinde yasar ya da olur. Onu bir egitim penceresi uzerinde statik OLS ile tahmin edin ve tam da bu makalenin konusu olan bayat-korelasyon sorununu devralirsiniz: gecen ceyrek piyasa maruziyetini notralleyen hedge, bu ceyrek yanlistir.

DCC size hedge oranini bir zaman serisi olarak verir. BTC kullanarak ETH maruziyetinin minimum-varyans hedge'i, kosullu regresyon katsayisidir

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

Sagdaki her terim bir DCC ciktisidir. Hedge orani iki ayri nedenden hareket eder ve DCC bunlari temiz sekilde ayirir: korelasyon ρt\rho_t degisir (varliklar birlesir ya da ayrilir) ve volatilite orani σETH,t/σBTC,t\sigma_{\text{ETH},t}/\sigma_{\text{BTC},t} degisir (bir varlik goreceli olarak daha volatil hale gelir). Bir kayan-OLS betasi her iki etkiyi bir gecikmeyle birbirine bulastirir; DCC onlari atfeder.

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'i calistirdiginiz hangi cift motoruysa ona besleyin. Dinamik hedge kendi basina bir avantaj yaratmaz — islem yaptiginiz spread'i zaman icinde gercekten piyasa-notr yapar, boylece ortalamaya-donme sinyaliniz kayan yonlu maruziyetle kirlenmez. Cift stratejileri kuruyorsaniz, bu, Kriptoda Istatistiksel Arbitraj & Cift Islemleri ve ciftlere mesafe yaklasimi cerceveleriyle dogrudan yerine oturur ve onlarin sabit hedge oranini degistirir. Korelasyon serisinin kendisi de, herhangi bir kayan pencereden ziyade korelasyon-tabanli bir cift sinyaline daha temiz bir girdidir — gurultulu, pencerelenmis bir tahmin yerine yumusatilmis, modelle-tutarli bir ρt\rho_t elde edersiniz.

βt\beta_t'yi canli kullanmaya ozgu iki uyari. Birincisi, onu geciktirinβt1\beta_{t-1} uzerinde islem yapin, asla es-zamanli βt\beta_t uzerinde degil, yoksa gizlice bakiyorsunuz demektir. Ikincisi, her gun savrulan bir hedge orani islem hacmi ve ucret uretir; kripto'nun kisa bacakta fonlama maliyetli 7/24 piyasasinda, asiri-tepkili bir hedge duzelttigi kaymadan daha fazla kanatabilir. βt\beta_t'yi yumusatin (bir EWMA ya da hedge'i yalnizca bir banti astiginda yeniden dengeleyin) ve tum seyi mantikli boyutlandirin — gurultulu bir sinyalden pozisyon boyutlandirma kendi disiplinidir, Kelly kriteri boyutlandirma yazisinda ele alinmistir.

Uygulama 2: Zamanla Degisen Portfoy Varyansi

Agirlik vektoru ww olan bir portfoy icin, kosullu varyans sudur

σ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 bir kovaryans matrisiyle — Markowitz varsayilani — bu sayi bir kez hesapladiginiz ve hala dogru gibi davrandiginiz bir sabittir. Degildir. Portfoy riski piyasayla nefes alir ve en sert nefesi tam da korelasyonlarin sicradigi anda alir, cunku bir cokuste hem σi,t\sigma_{i,t} terimleri hem de ρij,t\rho_{ij,t} terimleri birlikte yukselir ve carpar. Sakin piyasalarda yuzde 40 yillik volatilite gibi gorunen bir portfoy, bir stres haftasinda yuzde 80+ kosuyor olabilir ve statik bir kovaryans matrisi size hicbir seyin degismedigini soyleyecektir.

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

Bu zamanla degisen σp,t\sigma_{p,t}, risk-tabanli tahsisin ihtiyac duydugu durust girdidir. Statik bir ornek kovaryansla ortalama-varyans optimizasyonu (kripto icin Markowitz) bir kurguya karsi optimize etmektir; ona HtH_t'yi (ya da onun kisa-ufuklu tahminini) beslemek, verimli sinirin kendisini zamanla degisen hale getirir ve optimize ediciyi yukselen-korelasyon rejimlerine, onlardan sonra degil, icine risk-azaltmaya zorlar. Risk-paritesi ve hiyerarsik yaklasimlar — HRP + CVaR hatti — kovaryans girdisine daha da duyarlidir, cunku tum tahsis, risk matrisinin bir fonksiyonu dur. Ve tahsis edicileri kafa kafaya karsilastiriyorsaniz, portfoy optimizasyon algoritmalari karsilastirmasi yazisindaki gibi, onlarin statik mi yoksa dinamik kovaryans mi tukettikleri, gerceklesen risk uzerinde cogu zaman algoritma seciminden daha buyuk bir belirleyicidir.

Dogrudan uygulama, tum portfoyu volatilite hedeflemedir: bir hedef yillik volatilite σ\sigma^{*} secin ve gerceklesen riskin krizlerde balon yapmak yerine kabaca sabit kalmasi icin her donem brut maruziyeti σ/σp,t\sigma^{*} / \sigma_{p,t} ile olceklendirin. Bu, tam olarak bu kurali kuran ve geriye-donuk test eden 4. Bolum ile donguyu kapatir.

Uygulama 3: Rejim Sinyali Olarak Korelasyon

Hedge etme ve boyutlandirmanin otesinde, korelasyon matrisi bir makro sinyal tasir. Cikartabileceginiz tek en yararli skaler, ortalama ikili korelasyondur:

ρˉ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 portfoy genelinde yukseldiginde, piyasa bir riskten-kacinma rejimine giriyor demektir — kendine-ozgu hikayeler onemli olmaktan cikar ve her sey tek bir makro beta olarak islem gorur. Bu, "krizde korelasyonlar 1'e gider"in nicel parmak izidir. Cokuslere onculuk etme ya da onlarla ayni zamanda gerceklesme egilimindedir ki bu da onu gecikmeli bir otopsiden ziyade kullanilabilir bir rejim gostergesi yapar.

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'u bagimsiz bir kisici olarak (brut maruziyeti kesin, stoplari genisletin, her sey birlikte trend olunca ezilen ortalamaya-donme stratejilerini durdurun) ya da daha resmi bir rejim modelinde bir ozellik olarak kullanabilirsiniz. HMM'lerle rejim tespiti yazisindaki gizli-Markov yaklasimiyla dogal olarak eslesir: ortalama DCC korelasyonu, bir HMM'ye verebileceginiz daha bilgilendirici gozlem degiskenlerinden biridir, cunku o, gecmis getirilerin olmadigi bir sekilde sistemik stres konusunda ileriye-bakislidir. Durust uyari: yukselen korelasyon size cesitlendirmenin basarisiz oldugunu soyler, piyasanin hangi yone gidecegini degil. Bu bir risk sinyalidir, bir alfa sinyali degil ve oyle boyutlandirilmalidir — bir risk rejimini yonlu bir bahis olarak ele almanin neden kotu bittigini gormek icin kayiplarin ve karlarin asimetrisi yazisina bakin.

Pratik Dusunceler

Tahmin kararliligi ve varlik sayisi

DCC, BEKK'ten cok daha iyi olceklenir ama "olceklenir" "bedava" degildir. Korelasyon-hedefleme matrisi Qˉ\bar{Q}, bir d×dd \times d ornek korelasyondur ve ornek korelasyon matrisleri, dd gozlem sayisina yaklastikca kotu-kosullu hale gelir. 4 varlik ve 1000 gunle iyisiniz. 60 varlik ve 400 gunle, Qˉ\bar{Q} neredeyse tekildir, olabilirlikteki tersi patlar ve RtR_t sayisal gurultuden PD-olmayana dolanabilir. Kabaca ne siklikta ihtiyac duyacaginiz siraya gore hafifletmeler:

  • Rekursiyonu calistirmadan once Qˉ\bar{Q}'yu yapisal bir hedefe (Ledoit-Wolf ya da birim / sabit-korelasyon matrisine) dogru kucultun. Bu, buyuk portfoyler icin tek en yuksek-kaldiracli duzeltmedir.
  • Varliklari bir avuc sektore gruplayin (buyukler, L1'ler, DeFi, memeler), sektor seviyesinde ic-ic ve capraz modelleyin, ya da ham varliklar yerine ana-bilesen faktorleri uzerinde DCC calistirin.
  • Daha fazla varlik yerine daha fazla veriyi tercih edin. DCC'nin uzun, temiz, es-zamanli bir gecmise doymak bilmez bir istahi vardir — ki bu tam olarak genc tokenlerin sahip olmadigi seydir.

Gercekci olmak gerekirse, dogrudan DCC'yi en fazla birkac duzine varlikla sinirli tutun. Buyuk bir evren icin, faktor getirileri uzerinde DCC arti kendine-ozgu artiklar standart cozumdur.

Korelasyon hedefleme, maliyetli bir kestirmedir

Qˉ\bar{Q}'yu hedeflemek tahmini islenebilir yapar ama tam-orneklem kosulsuz korelasyonu her RtR_t'ye pisirir. Sikbir geriye-donuk testte bu bir ileriye-bakis sizintisidir: tt-gunu korelasyon matrisiniz, gelecek dahil tum orneklemın ortalama korelasyonunu "bilir". Durust degerlendirme icin Qˉ\bar{Q}'yu yalnizca egitim penceresi uzerinde yeniden tahmin etmeli ve onu orneklem-disinda sabit tutmali ya da onu ileri yuvarlamalisiniz. Bu, tum ileri-yuruyus optimizasyonu cercevesinin dayattigi ayni disiplindir ve tum dizi uzerinde uygun bir np.cov(Z) ile — yukaridaki ogretim kodumuzun yaptigi gibi — kazayla ihlal etmek kolaydir. Tek bir K/Z sayisina guvenmeden once onu duzeltin.

Yeniden-uydurma sikligi ve ileriye-bakis disiplini

a,ba, b'yi her gun yeniden optimize etmeniz gerekmez — onlar kararli parametrelerdir. Mantikli bir uretim sikligi:

  • a,ba, b'yi ve tek degiskenli GARCH parametrelerini haftalik ya da aylik yeniden tahmin edin.
  • Taze RtR_t ve HtH_t elde etmek icin dondurulmus parametrelerle filtreyi (her donem QtQ_t, σi,t\sigma_{i,t} guncelleyerek) calistirin. Filtreleme ucuzdur; uydurma degil.
  • Her zaman tahmin edin, asla yumusatmayin. tt'de islem yapmak icin t1t-1'e kadarki bilgiden insa edilen RtR_t'yi kullanin. Iki-gecisli yapi (bir pencere uzerinde uydur, sonra ileri filtrele), sizi durust tutan seydir.

Bir DCC geriye-donuk testi ile canli performans arasindaki bosluk neredeyse her zaman bir ileriye-bakis sizintisidir — tam-orneklem Qˉ\bar{Q}, es-zamanli βt\beta_t ya da degerlendirdiginiz islemi iceren veri uzerinde yeniden uydurma. Geriye-donuk testi canli kosullara eslestirme disiplini, geriye-donuk-test-canli paritesi yazisinda kendi konusudur ve DCC, burada ozensizligi cogundan daha fazla cezalandiran bir modeldir. Eger temiz bir ileri-yuruyus degerlendirmesinden sonra dinamik korelasyon sizin stratejiniz icin basit bir kayan tahmine hicbir sey katmiyorsa, bu gercek ve yayinlanabilir bir negatif sonuctur — durust negatif sonuclar yazisindaki zihniyet dogrudan gecerlidir.

Asimetrik DCC (aDCC)

Tıpki tek degiskenli kaldirac etkisinin (2. Bolum) kotu haberin volatiliteyi iyi haberden daha fazla artirmasi anlamina gelmesi gibi, korelasyonlar ortak pozitif soklardan sonra oldugundan, ortak negatif soklardan sonra daha fazla yukselir. Cappiello, Engle & Sheppard (2006), negatif-parca standartlastirilmis artiklarin zt=min(zt,0)z_t^- = \min(z_t, 0) dis carpimiyla yonlendirilen bir terim ekleyerek bunu asimetrik DCC ile yakalar:

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}

burada Nˉ=1Ttztzt\bar{N} = \frac{1}{T}\sum_t z_t^- z_t^{-\prime} ve g0g \ge 0, ortak asagi-yon hareketlerinden gelen ekstra korelasyon tekmesini olcer. Kripto icin, coku-korelasyonunun baskin risk oldugu yerde, asimetri terimi genellikle anlamlidir ve bir ekstra parametreye deger. rmgarch, aDCC'yi kutudan cikar cikmaz uydurur (model="aDCC"); NumPy tahmin edicimize ztz_t^- terimini eklemek dolambacsiz bir alistirmadir.

Karsilastirma: Alternatiflere Karsi DCC

Bir kripto portfoyu icin bir kovaryans matrisi elde etmenin yollari arasinda DCC nerede durur? Durust ozet:

Yaklasim Parametreler Su kadara olceklenir Zamanla degisen ρ\rho? PD garantili mi? Kuyruk bagimliligi?
Ornek / kayan kovaryans 0 (pencere uzunlugu) herhangi dd kabaca (gecikmeli, gurultulu) hayir (yamalama gerekir) hayir
EWMA (RiskMetrics) 1 (λ\lambda) herhangi dd evet (tek bozunma) evet hayir
CCC-GARCH dd marjinal + Qˉ\bar{Q} duzineler hayir (sabit RR) evet hayir
DCC-GARCH dd marjinal + 2 duzineler evet evet hayir
aDCC-GARCH dd marjinal + 3 duzineler evet, asimetrik evet kismen
BEKK O(d2)O(d^2) 4\le 4 evet (zengin) evet hayir
VECH O(d4)O(d^4) 3\le 3 evet (en zengin) zahmetli hayir
GARCH-kopula dd marjinal + kopula duzineler (asma) statik kopula evet evet

Bu tablodan birkac okuma:

  • EWMA, DCC'nin yardimci oldugunu iddia etmeden once herkesin yenmesi gereken ucuz taban cizgisidir. Ozunde tek-parametreli bir ozel durumdur — dogrudan kovaryansa uygulanan tek bir ustel bozunma — ve bircok portfoy icin orneklem-disinda onu iyilestirmek sasirtici derecede zordur. DCC, temiz ileri-yuruyuste EWMA'yi yenmiyorsa, EWMA kullanin.
  • CCC'ye karsi DCC, bu makalenin butun meselesidir: ayni carpanlara ayirma, ama CCC RR'yi dondurur ve DCC hareket etmesine izin verir. Iki ekstra parametre (a,ba, b) butun farktir ve kriptoda hakkini verirler.
  • BEKK/VECH, daha zengin dinamikler satin alir — her kovaryans her gecmis soka tepki verebilir — ama parametre maliyeti onlari minicik portfoylere hapseder. 4 varligin otesinde herhangi bir sey icin gercek bir secenek degillerdir.
  • GARCH-kopula, kuyruk bagimliligi altinda "evet" olan tek satirdir. Bu, yine tamamlayicilik: DCC ortak dagilimin dinamik merkezini modeller, kopulalar onun statik kuyruklarini modeller. Risk sorunuz "her sey ayni anda bozuldugunda ne olur" ise, kopula hattina uzanin; "su anda hedge oranim / portfoy varyansim nedir" ise, DCC'ye uzanin.

Sistematik bir kripto masasi icin pratik varsayilan: govdede hedge oranlari ve dinamik kovaryans icin DCC (ya da aDCC), kuyruk-riski ve CVaR icin bir kopula ortu ve ekstra makinenin kendini amorti edip etmedigi konusunda sizi durust tutan mantik-kontrolu taban cizgisi olarak EWMA.

Kisitlamalar

  • Skaler dinamikler. Tum ciftler icin tek bir aa ve tek bir bb, guclu bir kisitlamadir. BTC-ETH ile iki mechul alt-coin ayni uyum hizini paylasir. Genellestirilmis DCC bunu gevsetir ama DCC'nin kacinmak icin tasarlandigi parametre patlamasini yeniden getirir.
  • Iki-adimli verimlilik kaybi. Kuazi-olabilirlik tahmin edicisi tutarlidir ama tam olarak verimli degildir ve naif standart hatalar yanlistir. Cikarim onemsiyorsaniz Engle-Sheppard duzeltmesini kullanin; sinyal uretimi icin nokta tahminleri yeter.
  • Varsayilan olarak Gaussian kuyruklar. Duz Gaussian kuazi-olabilirlik, ortak kuyruk riskini oldugundan az gosterir. Student-t yenilikleri yardimci olur; hakiki kuyruk bagimliligi icin (es-zamanli asiri hareket olasiligi), DCC yanlis aractir ve bir kopula modeli dogru olandir. DCC size korelasyonun dinamik govdesini verir; kopulalar statik kuyrugu verir. Ciddi masalar her ikisini de kullanir.
  • Korelasyon nedensellik degildir ve yon degildir. Yukselen ρˉt\bar{\rho}_t, cesitlendirmenin basarisiz oldugu konusunda uyarir; piyasa yonu hakkinda hicbir sey soylemez. Bir risk sinyalini yonlu beklentilerle asiri yuklemeyin.
  • Veri acligi. Yukaridaki her sey uzun, temiz, senkronize gecmisler varsayar. Kripto'nun en yeni ve en ilginc tokenleri, ucunu de ihlal eder.

Ozet

  • Kriptoda statik korelasyon bir yalandir. Korelasyonlar kumelenir, kalir ve cokuslerde 1'e dogru sicrar — tam da cesitlendirmenin yardimci olmasi gereken zamanda. Tek bir ornek ρ^\hat{\rho}, rejim-degistiren bir sureci anlamsiz bir ortaya ortalar.
  • Tam cok degiskenli GARCH (VECH, BEKK) olceklenmez. Parametre sayisi O(d2)O(d^2) olarak buyur; ikisi de pratikte bir avuc varlikla sinirlidir.
  • DCC (Engle 2002) problemi carpanlarina ayirir: Ht=DtRtDtH_t = D_t R_t D_t, DtD_t bagimsiz tek degiskenli GARCH uyumlarindan (1-2. Bolumleri yeniden kullanin) ve RtR_t iki-parametreli bir rekursiyondan. Yalnizca a,ba, b optimize edildigi icin duzinelerce varliga olceklenir.
  • Rekursiyon Qt=(1ab)Qˉ+azt1zt1+bQt1Q_t = (1-a-b)\bar{Q} + a\,z_{t-1}z_{t-1}' + b\,Q_{t-1}, RtR_t'ye normalize edilerek, a,b>0a,b>0, a+b<1a+b<1 ile her adimda gecerli bir pozitif-tanimli korelasyon matrisi uretir.
  • arch, DCC yapmaz. Marjinalleri arch ile uydurun, sonra buradaki ~60-satirlik NumPy/SciPy tahmin edicisini uygulayin ya da mgarch (Python) veya rmgarch (R, referans) kullanin.
  • Uc somut getiri: cift islemleri icin dinamik bir hedge orani βt=ρtσETH,t/σBTC,t\beta_t = \rho_t\,\sigma_{\text{ETH},t}/\sigma_{\text{BTC},t}; risk-tabanli tahsis icin durust, zamanla degisen bir portfoy varyansi wHtww'H_t w; ve riskten-kacinma rejim sinyali olarak ortalama ikili korelasyon.
  • Her sey disiplindir. Korelasyon hedefleme tam-orneklem ortalamasini sizdirir, bu yuzden Qˉ\bar{Q}'yu yalnizca egitim verisi uzerinde yeniden tahmin edin; her hedge oranini geciktirin; ileri filtreleyin, asla yumusatmayin. Ileri-yuruyus degerlendirmesi pazarlik konusu degildir.
  • aDCC, bir asagi-yon-asimetri terimi ekler ve coku-korelasyonunun baskin oldugu kriptoda genellikle buna deger.
  • 4. Bolum, bir volatilite-hedefli strateji kurmak ve geriye-donuk test etmek icin bu tahminleri kullanir.

Referanslar:

  • 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.
Sorumluluk Reddi: Bu makalede sağlanan bilgiler yalnızca eğitim ve bilgilendirme amaçlıdır ve finansal, yatırım veya ticaret tavsiyesi niteliği taşımaz. Kripto para ticareti önemli bir kayıp riski içerir.

MarketMaker.cc Team

Kantitatif Araştırma & Strateji

Telegram'da tartışın
Newsletter

Piyasanın Önünde Olun

Özel yapay zeka ticaret içgörüleri, piyasa analizi ve platform güncellemeleri için bültenimize abone olun.

Gizliliğinize saygı duyuyoruz. İstediğiniz zaman abonelikten çıkabilirsiniz.