← Kembali ke artikel
July 11, 2026
Bacaan 5 minit

GARCH Tak Simetri dan Ekor Tebal: EGARCH, GJR, dan Student-t

#volatility
#GARCH
#EGARCH
#risk
#VaR
#crypto
#algorithmic-trading

Dalam Bahagian 1 siri ini kita membina GARCH(1,1) dari asas: gerak hati pengelompokan volatiliti, rekursi varians bersyarat, anggaran kemungkinan maksimum (maximum likelihood), peramalan, dan diagnostik reja piawai standard dengan pustaka arch. Jika anda belum membacanya, mulakan di sana - siaran ini menganggap anda sudah boleh menyuaikan dan mentafsir GARCH(1,1) biasa dan tidak akan menurunkan semula asasnya.

GARCH(1,1) biasa ialah garis dasar yang baik tetapi jawapan akhir yang buruk. Ia mempunyai dua kecacatan struktur yang murah untuk diabaikan dalam backtest tetapi mahal untuk diabaikan dengan modal sebenar. Pertama, ia simetri: model bertindak balas terhadap hari +5%+5\% sama seperti ia bertindak balas terhadap hari 5%-5\%, kerana kejutan memasuki rekursi varians hanya melalui kuasa duanya, εt12\varepsilon_{t-1}^2. Mengkuasaduakan membuang tandanya. Kedua, ia menganggap inovasi Gaussian: walaupun selepas GARCH menyerap pengelompokan volatiliti, reja piawai BTC dan ETH jelas berekor tebal, dan kemungkinan Gaussian secara sistematik memberi harga terlalu rendah kepada ekor tersebut. VaR 99% GARCH(1,1)-Normal akan dilanggar jauh lebih kerap daripada 1% masa.

Siaran ini membetulkan kedua-dua kecacatan. Kita menambah ketaksimetrian dengan GJR-GARCH dan EGARCH, serta ekor tebal dengan inovasi Student-tt dan skew-tt Hansen. Kemudian kita melakukan perkara yang sebenarnya membayar sewa: menukar taburan bersyarat yang disuaikan menjadi ramalan Value-at-Risk dan Expected Shortfall satu langkah, dan mem-backtest ramalan itu secara jujur dengan ujian Kupiec dan Christoffersen. Model volatiliti yang anda tidak pernah uji risikonya hanyalah hiasan.

Kesan Leverage, dan Mengapa Kripto Lebih Kucar-Kacir

Dalam ekuiti ketaksimetrian mempunyai nama dan cerita. Kesan leverage (Black, 1976): apabila saham sesebuah firma jatuh, nisbah hutang-ke-ekuitinya meningkat, ekuiti menjadi lebih berisiko secara mekanikal, dan volatiliti meningkat. Berita buruk menaikkan volatiliti masa depan lebih daripada berita baik bersaiz sama. Secara empirik ini ialah salah satu fakta bergaya yang paling teguh dalam kesusasteraan volatiliti ekuiti.

Kripto tidak mempunyai ekuiti dan tiada leverage kunci kira-kira dalam erti korporat, namun ketaksimetrian seperti kesan leverage tetap muncul kebanyakan masa - dipacu oleh penyahleveraj paksa dan bukannya perakaunan. Apabila BTC jatuh mendadak, pinjaman lebih cagar dilikuidasi, longs niaga hadapan kekal ditutup paksa, funding berbalik, dan lata itu memberi makan kepada volatiliti. Jadi mekanismenya berbeza tetapi tandanya selalunya sepakat dengan ekuiti: pergerakan turun melonjakkan volatiliti lebih banyak.

Peringatan penting: kripto lebih kucar-kacir, dan anda harus melayan ketaksimetrian sebagai soalan empirik dan bukannya hukum. Pergerakan naik yang ganas - short squeeze, melt-up yang dipacu leverage, gap kelulusan ETF - juga boleh melonjakkan volatiliti terealisasi. Bergantung kepada aset dan tetingkap sampel, ketaksimetrian teranggar boleh menjadi kuat, lemah, atau kadangkala bertanda "salah". Disiplin yang siaran ini menegaskan: suaikan model tak simetri, lihat sama ada parameter ketaksimetrian signifikan secara statistik dan dalam arah yang dijangka, dan hanya kekalkan parameter tambahan jika ia mendapat tempatnya. Jangan anggap cerita ekuiti dipindahkan; ujilah.

Menguji Ketaksimetrian Sebelum Anda Memodelkannya

Ringkasan di atas berkata "layan ketaksimetrian sebagai empirik" - jadi sebelum menyuaikan model tak simetri, jalankan ujian formal yang murah untuk sama ada ketaksimetrian pun wujud. Ujian bias tanda Engle-Ng (1993) melakukan tepat ini. Suaikan GARCH(1,1) simetri dahulu, ambil reja piawai kuasa duanya zt2z_t^2, dan regreskannya terhadap penunjuk tanda dan saiz kejutan sebelumnya:

zt2=a0+a1St1+a2St1εt1+a3St1+εt1+utz_t^2 = a_0 + a_1 S_{t-1}^- + a_2 S_{t-1}^- \varepsilon_{t-1} + a_3 S_{t-1}^+ \varepsilon_{t-1} + u_t

di mana St1=1{εt1<0}S_{t-1}^- = \mathbf{1}\{\varepsilon_{t-1} < 0\} dan St1+=1St1S_{t-1}^+ = 1 - S_{t-1}^-. Logiknya: jika model simetri sudah menangkap segala-galanya, tanda dan saiz kejutan semalam tidak sepatutnya meramal reja kuasa dua hari ini, jadi a1=a2=a3=0a_1 = a_2 = a_3 = 0. Ujian tt individu ialah ujian bias tanda (a1a_1), bias saiz negatif (a2a_2), dan bias saiz positif (a3a_3); ujian FF bersama pada ketiga-tiganya ialah omnibus. a1a_1 atau a2a_2 yang signifikan menunjukkan kejutan negatif diberi harga salah secara sistematik oleh model simetri - petunjuk anda bahawa GJR atau EGARCH akan membantu.

import statsmodels.api as sm

def sign_bias_test(symmetric_res):
    """Engle-Ng sign-bias tests on a fitted symmetric GARCH result."""
    z = symmetric_res.std_resid.dropna()
    z2 = (z ** 2).values[1:]
    eps_lag = z.values[:-1]                      # standardized shock proxy
    neg = (eps_lag < 0).astype(float)
    X = np.column_stack([
        np.ones_like(eps_lag),                   # intercept
        neg,                                     # sign bias
        neg * eps_lag,                           # negative size bias
        (1 - neg) * eps_lag,                     # positive size bias
    ])
    ols = sm.OLS(z2, X).fit()
    names = ["const", "sign_bias", "neg_size_bias", "pos_size_bias"]
    for nm, coef, t, p in zip(names, ols.params, ols.tvalues, ols.pvalues):
        print(f"{nm:16s} coef={coef:+.4f}  t={t:+.2f}  p={p:.3f}")
    print(f"Joint F p-value: {ols.f_pvalue:.4f}")
    return ols

sign_bias_test(models["GARCH-N"])

Jika ujian FF bersama tidak signifikan, anda mempunyai lesen empirik untuk kekal simetri dan menjimatkan dua parameter. Jika ia signifikan - hasil biasa untuk BTC/ETH - teruskan ke GJR/EGARCH dengan hati nurani yang jelas, mengetahui bahawa anda memodelkan ciri sebenar dan bukan mengejar hingar. Inilah disiplin empirik yang dituntut oleh permulaan: jangan anggap cerita leverage ekuiti, ujilah ia.

GJR-GARCH: Ketaksimetrian melalui Terma Ambang

Model Glosten-Jagannathan-Runkle (1993) - kadangkala dipanggil TGARCH atau threshold GARCH - ialah suntingan terkecil yang mungkin kepada GARCH(1,1) yang membenarkan berita buruk dan berita baik mempunyai kesan berbeza. Ingat semula rekursi varians bersyarat simetri dari Bahagian 1:

σt2=ω+αεt12+βσt12\sigma_t^2 = \omega + \alpha\,\varepsilon_{t-1}^2 + \beta\,\sigma_{t-1}^2

GJR menambah satu terma ambang: dos varians tambahan yang dihidupkan hanya selepas kejutan negatif.

σt2=ω+αεt12+γIt1εt12+βσt12\sigma_t^2 = \omega + \alpha\,\varepsilon_{t-1}^2 + \gamma\,I_{t-1}\,\varepsilon_{t-1}^2 + \beta\,\sigma_{t-1}^2

di mana It1I_{t-1} ialah penunjuk

It1={1if εt1<00if εt10I_{t-1} = \begin{cases} 1 & \text{if } \varepsilon_{t-1} < 0 \\ 0 & \text{if } \varepsilon_{t-1} \geq 0 \end{cases}

Baca rekursi mengikut kes. Selepas kejutan positif (εt10\varepsilon_{t-1} \geq 0), penunjuk ialah sifar dan kesan kejutan kuasa dua terhadap varians tempoh seterusnya hanyalah α\alpha. Selepas kejutan negatif, penunjuk ialah satu dan kesannya ialah α+γ\alpha + \gamma. Parameter γ\gamma ialah keseluruhan cerita ketaksimetrian dalam satu nombor:

  • γ>0\gamma > 0: kejutan negatif menaikkan volatiliti lebih daripada kejutan positif bermagnitud sama. Ini ialah kesan leverage, dan inilah yang anda jangka temui dalam BTC/ETH kebanyakan masa.
  • γ=0\gamma = 0: model runtuh kembali kepada GARCH(1,1) simetri. Ujian nisbah kemungkinan atau ujian tt pada γ\gamma oleh itu ialah ujian langsung terhadap sama ada ketaksimetrian wujud langsung.
  • γ<0\gamma < 0: kejutan positif menaikkan volatiliti lebih banyak - rejim melt-up kripto yang sekali-sekala. Jarang berlaku, tetapi jangan ketepikannya secara apriori.

Kepositifan dan Kepegunan

Kerana σt2\sigma_t^2 masih dibina secara tambahan, kita memerlukan setiap terma kekal tak negatif. Syarat kepositifan yang mencukupi ialah

ω>0,α0,α+γ0,β0.\omega > 0, \quad \alpha \geq 0, \quad \alpha + \gamma \geq 0, \quad \beta \geq 0.

Perhatikan bahawa γ\gamma sendiri dibenarkan menjadi negatif selagi α+γ0\alpha + \gamma \geq 0, jadi kesan pasca-berita-buruk tidak pernah menjadi negatif.

Untuk kepegunan kovarians, andaikan inovasi zt=εt/σtz_t = \varepsilon_t/\sigma_t dipiawaikan dengan taburan simetri sekitar sifar, supaya P(εt1<0)=1/2P(\varepsilon_{t-1} < 0) = 1/2 dan penunjuk menyumbang γ/2\gamma/2 secara purata. Syarat kepegunan menjadi

α+β+12γ<1.\alpha + \beta + \tfrac{1}{2}\gamma < 1.

Varians tak bersyarat (jangka panjang) kemudiannya ialah

σˉ2=ω1αβ12γ.\bar{\sigma}^2 = \frac{\omega}{1 - \alpha - \beta - \tfrac{1}{2}\gamma}.

Ini ialah analog GJR bagi hasil Bahagian 1 σˉ2=ω/(1αβ)\bar{\sigma}^2 = \omega/(1-\alpha-\beta), dengan terma tambahan 12γ\tfrac{1}{2}\gamma mengambil kira sumbangan purata separuh hayat leverage. Jika taburan inovasi anda pencong (skew-tt Hansen, di bawah), 1/21/2 digantikan dengan kebarangkalian sebenar bahawa zt<0z_t < 0, tetapi 1/21/2 ialah rujukan standard yang digunakan untuk kegigihan yang dilaporkan.

EGARCH: Memodelkan log-Varians, Tiada Kekangan Kepositifan

GJR mengekang anda dalam baju sesak kepositifan varians: setiap kombinasi parameter perlu disemak terhadap kekangan ketaksamaan, yang menjengkelkan semasa pengoptimuman dan lebih teruk semasa penganggaran semula bergolek apabila tetingkap sekali-sekala merayau ke rantau tak boleh laksana. Exponential GARCH Nelson (1991) mengelak ini sepenuhnya dengan memodelkan logaritma varians bersyarat. Kerana logσt2\log \sigma_t^2 boleh menjadi sebarang nombor nyata, σt2=exp(logσt2)\sigma_t^2 = \exp(\log \sigma_t^2) secara automatik positif tidak kira apa parameternya. Tiada kekangan untuk dikenakan.

Tulis rekursi dari segi inovasi piawai zt1=εt1/σt1z_{t-1} = \varepsilon_{t-1}/\sigma_{t-1}:

logσt2=ω+βlogσt12+α(zt1Ezt1)+γzt1\log \sigma_t^2 = \omega + \beta \log \sigma_{t-1}^2 + \alpha\bigl(|z_{t-1}| - \mathbb{E}|z_{t-1}|\bigr) + \gamma\, z_{t-1}

Dua terma membawa kejutan, dan memisahkannya ialah keseluruhan ideanya:

  • Terma magnitud α(zt1Ezt1)\alpha(|z_{t-1}| - \mathbb{E}|z_{t-1}|) bertindak balas terhadap saiz kejutan, tanda dibuang. Menolak Ezt1\mathbb{E}|z_{t-1}| memusatkannya supaya kejutan bermagnitud purata tidak menyumbang apa-apa. Untuk normal piawai, Ez=2/π0.7979\mathbb{E}|z| = \sqrt{2/\pi} \approx 0.7979; untuk Student-tt piawai nilai mutlak jangkaan lebih kecil dan bergantung kepada ν\nu, tetapi arch mengendalikan ini secara dalaman.
  • Terma tanda γzt1\gamma\, z_{t-1} ialah ketaksimetrian. Ia linear dalam inovasi bertanda, jadi zt1z_{t-1} negatif menolak logσt2\log\sigma_t^2 ke arah bertentangan daripada yang positif.

Konvensyen tanda penting dan menyandung orang. Dalam parameterisasi ini kesan leverage (berita buruk menaikkan volatiliti) sepadan dengan γ<0\gamma < 0: kejutan negatif zt1<0z_{t-1} < 0 kemudiannya menjadikan γzt1>0\gamma z_{t-1} > 0, meningkatkan log-varians. Ini ialah tanda bertentangan daripada γ>0\gamma > 0 GJR. Sentiasa baca dokumentasi model sendiri untuk konvensyen dan bukannya mengandaikan; arch melaporkan EGARCH dengan tandanya sendiri, dan kita menyemaknya terhadap keluk kesan berita di bawah dan bukannya mempercayai ingatan kita.

Kerana segala-galanya bersifat tambahan dalam log, kegigihan EGARCH(1,1) ditadbir oleh satu pekali autoregresif β\beta pada logσt12\log\sigma_{t-1}^2; kepegunan hanya memerlukan β<1|\beta| < 1. Itu ialah syarat yang jauh lebih bersih daripada ketaksamaan GJR, dan ia ialah kelebihan praktikal sebenar apabila anda menyuai semula pada tetingkap bergolek.

Satu kehalusan yang berbaloi dinyatakan: sambutan EGARCH terhadap kejutan bersifat eksponen dalam inovasi (anda mengeksponenkan pada akhir), manakala GJR bersifat kuadratik. EGARCH oleh itu bertindak balas lebih ganas terhadap kejutan besar - satu ciri dalam kripto, di mana peristiwa ekor ialah yang penting, tetapi juga sebab EGARCH sekali-sekala boleh menghasilkan ramalan varians besar yang tak munasabah selepas hari terpencil. Tiada yang lebih baik secara universal; anda memilih mengikut kesuaian luar sampel dan mengikut backtest risiko, yang merupakan intipati keseluruhan siri ini.

Keluk Kesan Berita

Cara paling bersih untuk melihat perbezaan antara GARCH simetri, GJR, dan EGARCH ialah keluk kesan berita (Engle dan Ng, 1993): pegang σt1\sigma_{t-1} tetap pada aras jangka panjangnya dan plot varians bersyarat tempoh seterusnya σt2\sigma_t^2 sebagai fungsi kejutan terakhir εt1\varepsilon_{t-1}. Ia menjawab "diberi kejutan bersaiz dan bertanda ini, berapa banyak model menaikkan volatiliti esok?"

  • GARCH simetri menghasilkan parabola simetri berpusat pada sifar. Kejutan 5%-5\% dan +5%+5\% mendarat pada ketinggian yang sama. Inilah kecacatan yang tepat kita membetulkannya.
  • GJR menghasilkan parabola dengan kink pada sifar - lebih curam di sebelah kiri (kejutan negatif) daripada kanan apabila γ>0\gamma > 0. Kedua-dua separuh mempunyai kelengkungan α+γ\alpha+\gamma dan α\alpha masing-masing.
  • EGARCH menghasilkan bentuk-V eksponen tak simetri: kedua-dua lengan mempunyai kecerunan berbeza kerana terma γz\gamma z, dan keseluruhannya melengkung ke atas lebih cepat daripada parabola kerana pengeksponenan akhir.

Kita plot ketiga-tiganya daripada parameter yang disuaikan kemudian, dalam bahagian pelaksanaan - ia ialah diagnostik paling berguna tunggal untuk menyampaikan apa yang ketaksimetrian belikan untuk anda.

Ekor Tebal: Inovasi Student-t dan Skew-t

Ketaksimetrian membetulkan sambutan model terhadap tanda kejutan. Ia tidak melakukan apa-apa mengenai taburan kejutan itu sendiri. GARCH biasa menganggap ztN(0,1)z_t \sim \mathcal{N}(0,1), dan andaian itu hampir selalu salah untuk kripto. Walaupun selepas GARCH membuang pengelompokan volatiliti, reja piawai zt=εt/σtz_t = \varepsilon_t / \sigma_t mengekalkan kurtosis berlebihan - ia berekor tebal. Kemungkinan Gaussian, menyuaikan bahu taburan, memberi berat kurang kepada berapa kerap hari piawai 44-, 55-, atau 66-sigma sebenarnya berlaku.

Akibat untuk risiko adalah langsung. VaR 99% Gaussian menggunakan kuantil Φ1(0.01)2.326\Phi^{-1}(0.01) \approx -2.326, jadi ia meramal VaR0.992.326σt\text{VaR}_{0.99} \approx 2.326\,\sigma_t. Jika taburan piawai sebenar ialah Student-tt dengan, katakan, ν=5\nu = 5 darjah kebebasan, kuantil 1% sebenar hampir 3.36-3.36 - VaR Gaussian optimistik lebih kurang 44%44\% pada aras keyakinan itu. Anda akan melanggarnya jauh lebih kerap daripada 1% masa dan secara sistematik terkejut oleh hari "mustahil". Ini bukan keanehan kripto; Bollerslev (1987) memperkenalkan tt-GARCH tepat kerana reja ekuiti dan FX menunjukkan ekor tebal yang sama. Kripto hanyalah versi yang lebih melampau bagi masalah yang sama.

Student-t Piawai

Ketumpatan Student-tt mempunyai parameter darjah kebebasan ν>2\nu > 2 yang mengawal ketebalan ekor: ν\nu kecil bermaksud ekor tebal, dan apabila ν\nu \to \infty taburan tt menumpu kepada Gaussian. Halangannya ialah taburan tνt_\nu mentah mempunyai varians ν/(ν2)1\nu/(\nu-2) \neq 1, jadi kita mesti memiawaikannya kepada varians unit sebelum menggunakannya sebagai inovasi - jika tidak "σt\sigma_t" dalam rekursi GARCH tidak sebenarnya menjadi sisihan piawai bersyarat.

Inovasi Student-tt piawai dengan varians unit mempunyai ketumpatan

f(z;ν)=Γ ⁣(ν+12)π(ν2)  Γ ⁣(ν2)(1+z2ν2)ν+12,ν>2.f(z;\nu) = \frac{\Gamma\!\left(\frac{\nu+1}{2}\right)}{\sqrt{\pi(\nu-2)}\;\Gamma\!\left(\frac{\nu}{2}\right)}\left(1 + \frac{z^2}{\nu-2}\right)^{-\frac{\nu+1}{2}}, \qquad \nu > 2.

Perhatikan (ν2)(\nu-2) di dalam - itulah pemiawaian, penskalaan semula supaya Var(z)=1\mathrm{Var}(z)=1. Sumbangan log-kemungkinan bagi satu pemerhatian, diberi varians bersyarat GARCH σt2\sigma_t^2 dan zt=εt/σtz_t = \varepsilon_t/\sigma_t, ialah

t=logΓ ⁣(ν+12)logΓ ⁣(ν2)12log(π(ν2))12logσt2ν+12log ⁣(1+zt2ν2).\ell_t = \log\Gamma\!\left(\tfrac{\nu+1}{2}\right) - \log\Gamma\!\left(\tfrac{\nu}{2}\right) - \tfrac{1}{2}\log\bigl(\pi(\nu-2)\bigr) - \tfrac{1}{2}\log\sigma_t^2 - \frac{\nu+1}{2}\log\!\left(1 + \frac{z_t^2}{\nu-2}\right).

Terma 12logσt2-\tfrac{1}{2}\log\sigma_t^2 ialah Jacobian bagi transformasi daripada εt\varepsilon_t kepada ztz_t - terma sama yang anda lihat dalam kemungkinan GARCH Gaussian dalam Bahagian 1. Hanya bentuk yang berubah. Memaksimumkan tt\sum_t \ell_t secara bersama ke atas parameter GARCH dan ν\nu ialah tepat apa yang arch lakukan apabila anda menghantar dist='t'.

Anggaran ν\nu itu sendiri bermaklumat. Untuk pulangan harian BTC/ETH anda biasanya mendarat dalam julat ν36\nu \approx 3\text{–}6 - ekor tebal, tetapi dengan varians terhingga (yang memerlukan ν>2\nu > 2) dan biasanya kurtosis terhingga (yang memerlukan ν>4\nu > 4). Jika ν\nu suaian anda jatuh di bawah 4, sedarilah bahawa kurtosis sampel secara teknikal tak terhingga dalam model dan sesetengah penganggar menjadi tak stabil; ia ialah isyarat untuk melihat dengan teliti terhadap titik terpencil dan kualiti data.

Skew-t Hansen

Student-tt berekor tebal tetapi masih simetri - ekor kiri dan kanan sama beratnya. Reja pulangan kripto sering juga pencong: ekor kiri (kejatuhan) lebih berat daripada kanan. Skew-tt Hansen (1994) menyamaratakan tt piawai dengan parameter kepencongan λ(1,1)\lambda \in (-1, 1) bersama ν\nu:

f(z;ν,λ)={bc(1+1ν2(bz+a1λ)2)ν+12z<a/bbc(1+1ν2(bz+a1+λ)2)ν+12za/bf(z;\nu,\lambda) = \begin{cases} b\,c\left(1 + \dfrac{1}{\nu-2}\left(\dfrac{bz+a}{1-\lambda}\right)^2\right)^{-\frac{\nu+1}{2}} & z < -a/b \\[2mm] b\,c\left(1 + \dfrac{1}{\nu-2}\left(\dfrac{bz+a}{1+\lambda}\right)^2\right)^{-\frac{\nu+1}{2}} & z \geq -a/b \end{cases}

di mana pemalar a=4λcν2ν1a = 4\lambda c\,\frac{\nu-2}{\nu-1}, b2=1+3λ2a2b^2 = 1 + 3\lambda^2 - a^2, dan c=Γ(ν+12)π(ν2)Γ(ν2)c = \frac{\Gamma(\frac{\nu+1}{2})}{\sqrt{\pi(\nu-2)}\,\Gamma(\frac{\nu}{2})} dipilih supaya zz mempunyai min sifar dan varians unit untuk setiap (ν,λ)(\nu,\lambda) yang sah. Taburan berpecah pada z=a/bz = -a/b, menggunakan penskalaan berbeza dalam setiap keping untuk membengkokkan lebih banyak jisim ke satu ekor.

Tafsiran: λ<0\lambda < 0 memberikan taburan pencong kiri (sisi bawah lebih berat), yang merupakan penemuan biasa untuk kripto dan apa yang anda jangka berpasangan dengan kesan leverage. λ=0\lambda = 0 mendapatkan semula Student-tt simetri, jadi ujian λ=0\lambda = 0 memberitahu anda sama ada terma skew membeli apa-apa. Dalam arch ini ialah dist='skewt', yang menganggarkan kedua-dua ν\nu dan λ\lambda. Ganjarannya ialah VaR yang kuantil ekor kirinya secara jujur lebih berat daripada kuantil ekor kanannya - tepat apa yang anda mahu apabila kerugian yang anda cuba selamat daripadanya adalah tak simetri. Ini berkait langsung dengan ketaksimetrian kerugian berbanding keuntungan dalam hasil kedudukan: pengeluaran turun x%x\% memerlukan lebih daripada x%x\% untuk pulih, jadi memodelkan salah ekor kiri lebih mahal daripada memodelkan salah ekor kanan.

Pelaksanaan Python

Kita kini menyuaikan semua ini dengan pustaka arch. Persediaan mencerminkan Bahagian 1: tarik pulangan harian, skala dengan 100 untuk penyaman berangka (pengoptimum GARCH berkelakuan buruk apabila pulangan ialah O(0.01)O(0.01)), dan suaikan dengan min pemalar. Jika anda mahu intraday atau model min berbeza, jenteranya adalah serupa.

Persediaan dan Data

import numpy as np
import pandas as pd
from arch import arch_model
from arch.univariate import GARCH, EGARCH, ConstantMean, StudentsT, SkewStudent
from scipy import stats

def fetch_returns(symbol="BTC-USD", start="2019-01-01", end="2025-12-31"):
    """Daily log returns, in percent (scaled x100 for the optimizer)."""
    import yfinance as yf
    px = yf.download(symbol, start=start, end=end)["Close"].dropna()
    ret = 100.0 * np.log(px / px.shift(1)).dropna()
    ret.name = symbol
    return ret

r = fetch_returns("BTC-USD")
print(f"{len(r)} daily observations, "
      f"annualized vol ~ {r.std() * np.sqrt(365):.0f}%")

Kripto berdagang 24/7, jadi kita mentahunkan dengan 365, bukan 252 - punca kekeliruan kecil tetapi berulang apabila anda membandingkan Sharpe atau vol kripto terhadap nombor meja ekuiti.

Menyuaikan Empat Model

Corak dalam arch: vol='Garch' dengan p=1, q=1 ialah GARCH simetri; menambah o=1 menghidupkan terma ambang GJR; vol='EGARCH' beralih kepada model log-varians. Taburan inovasi ditetapkan dengan dist: 'normal', 't', 'skewt'.

def fit(returns, vol="Garch", p=1, o=0, q=1, dist="normal"):
    am = arch_model(returns, mean="Constant",
                    vol=vol, p=p, o=o, q=q, dist=dist)
    res = am.fit(disp="off")
    return res

models = {
    "GARCH-N":    fit(r, vol="Garch",  o=0, dist="normal"),  # Part 1 baseline
    "GJR-t":      fit(r, vol="Garch",  o=1, dist="t"),        # asymmetry + fat tails
    "EGARCH-t":   fit(r, vol="EGARCH", o=1, dist="t"),        # log-variance asymmetry
    "GJR-skewt":  fit(r, vol="Garch",  o=1, dist="skewt"),    # + skew
}

for name, res in models.items():
    print(f"\n===== {name} =====")
    print(res.summary().tables[1])   # parameter table

Untuk vol='EGARCH', argumen o mengawal terma tak simetri (γz\gamma z) dan p/q mengawal terma magnitud dan lag; o=1, p=1, q=1 ialah EGARCH(1,1) standard. Satu gotcha: nama parameter EGARCH dalam arch ialah huruf yang sama tetapi konvensyen tanda pada terma ketaksimetrian ialah konvensyen Nelson, jadi anggaran negatif ialah kesan leverage. Kita mengesahkan ini daripada keluk kesan berita dan bukannya daripada ingatan.

Membaca Suaian GJR

Jadual parameter GJR-tt kelihatan lebih kurang seperti ini (nilai ilustrasi, bukan eksperimen yang dilaporkan - suai semula pada data anda sendiri):

                  coef    std err       t      P>|t|
omega           0.0480     0.017     2.82     0.005
alpha[1]        0.0620     0.018     3.44     0.001
gamma[1]        0.0910     0.028     3.25     0.001
beta[1]         0.8850     0.021    42.1      0.000
nu              4.30       0.55      7.82     0.000

Cara membacanya:

  • gamma[1] = 0.091 dengan statistik tt melebihi 3 ialah kesan leverage yang signifikan secara statistik. Selepas kejutan negatif kesan kejutan kuasa dua ialah α+γ=0.062+0.091=0.153\alpha + \gamma = 0.062 + 0.091 = 0.153; selepas kejutan positif ia hanyalah α=0.062\alpha = 0.062. Berita buruk menggerakkan volatiliti model ini lebih kurang 2.5×2.5\times sebanyak berita baik bersaiz sama.
  • nu = 4.3 mengesahkan ekor tebal - jauh daripada Gaussian (ν\nu \to \infty), dan cukup rendah sehingga momen keempat hampir tidak terhingga. VaR Gaussian pada siri ini akan optimistik dengan teruk.
  • Kegigihan ialah α+β+12γ=0.062+0.885+0.04550.993\alpha + \beta + \tfrac{1}{2}\gamma = 0.062 + 0.885 + 0.0455 \approx 0.993 - sangat tinggi, seperti biasa untuk kripto harian: kejutan mereput perlahan dan volatiliti berkelompok kuat.

Baris tunggal paling penting untuk disemak ialah baris γ\gamma. Jika nilai-pp-nya besar, terma tak simetri tidak mendapat tempatnya pada aset dan tetingkap ini, dan anda harus lebih suka model simetri yang lebih ringkas. Ini ialah disiplin pemilihan model, bukan hiasan - lebih lanjut mengenainya di bawah.

Membandingkan Model mengikut Kriteria Maklumat

Log-kemungkinan sentiasa bertambah baik apabila anda menambah parameter, jadi anda tidak boleh memilih pada log-kemungkinan sahaja. Gunakan AIC/BIC, yang menghukum bilangan parameter (BIC lebih agresif):

def compare(models: dict) -> pd.DataFrame:
    rows = []
    for name, res in models.items():
        rows.append({
            "model": name,
            "n_params": len(res.params),
            "loglik": res.loglikelihood,
            "AIC": res.aic,
            "BIC": res.bic,
        })
    df = pd.DataFrame(rows).set_index("model")
    return df.sort_values("BIC")

print(compare(models))

Peraturan tafsiran ibu jari: peningkatan BIC lebih daripada ~6 berbanding garis dasar ialah bukti kukuh bahawa struktur tambahan itu nyata; perbezaan 1-2 ialah hingar. Jika GJR-t mengalahkan GARCH-N sebanyak 30+ mata BIC tetapi GJR-skewt mengalahkan GJR-t hanya sebanyak 1, kekalkan tt dan gugurkan skew - parameter skew tidak membayar untuk dirinya pada data ini. Jangan baca AIC/BIC sebagai pengganti pengesahan luar sampel; ia memberi ganjaran kepada suaian dalam sampel yang diselaraskan untuk kerumitan, yang perlu tetapi tidak mencukupi. Ujian sebenar ialah backtest VaR dan, akhirnya, penilaian walk-forward.

Memplot Keluk Kesan Berita

Ini ialah plot ganjaran - ia menjadikan ketaksimetrian kelihatan dan mengesahkan konvensyen tanda EGARCH.

import matplotlib.pyplot as plt

def news_impact_curve(res, shock_grid):
    """
    Next-period conditional variance as a function of the last shock,
    holding sigma_{t-1} at the model's unconditional level.
    Works for symmetric GARCH, GJR (o=1), and EGARCH.
    """
    p = res.params
    vol_name = res.model.volatility.__class__.__name__
    sigma2_bar = np.mean(res.conditional_volatility ** 2)

    omega = p["omega"]
    alpha = p.get("alpha[1]", 0.0)
    gamma = p.get("gamma[1]", 0.0)
    beta  = p.get("beta[1]", 0.0)

    if vol_name == "EGARCH":
        sig_prev = np.sqrt(sigma2_bar)
        z = shock_grid / sig_prev
        E_abs = np.sqrt(2 / np.pi)   # approx; arch uses the fitted dist's E|z|
        log_s2 = (omega + beta * np.log(sigma2_bar)
                  + alpha * (np.abs(z) - E_abs) + gamma * z)
        return np.exp(log_s2)
    else:
        ind = (shock_grid < 0).astype(float)
        return omega + (alpha + gamma * ind) * shock_grid**2 + beta * sigma2_bar

shocks = np.linspace(-8, 8, 401)   # daily % shocks
plt.figure(figsize=(8, 5))
for name in ["GARCH-N", "GJR-t", "EGARCH-t"]:
    nic = news_impact_curve(models[name], shocks)
    plt.plot(shocks, nic, label=name, lw=2)
plt.axvline(0, color="gray", lw=0.8, ls="--")
plt.xlabel("Last shock  $\\varepsilon_{t-1}$  (daily %)")
plt.ylabel("Next-period conditional variance  $\\sigma_t^2$")
plt.title("News impact curve: symmetric vs GJR vs EGARCH (BTC)")
plt.legend()
plt.tight_layout()

Apabila anda menjalankan ini, keluk GARCH-N simetri ialah parabola bersih berpusat pada sifar - kejutan 6%-6\% dan +6%+6\% memberikan varians yang sama. GJR-t ialah parabola dengan kink pada asalan, lebih tinggi pada lengan kiri. EGARCH-t ialah bentuk-V eksponen, dan jika lengan kirinya duduk di atas lengan kanannya anda telah mengesahkan kesan leverage dan konvensyen tanda dalam satu pandangan. Jika lengan kiri EGARCH duduk di bawah kanan, sama ada γ\gamma dianggarkan positif (rejim vol-naik) atau anda mempunyai tanda terbalik - plot memberitahu anda yang mana tanpa sebarang tekaan.

Perbandingan Bersebelahan Empat Model

Sebelum kita beralih kepada risiko, ia membantu untuk memegang empat model bersebelahan. Setiap baris ialah keputusan reka bentuk, dan lajur menunjukkan apa yang keputusan itu kos dan beli.

Ciri GARCH-N GJR-t EGARCH-t GJR-skewt
Ketaksimetrian (tanda kejutan) tiada ambang γIε2\gamma I\varepsilon^2 bertanda γz\gamma z ambang γIε2\gamma I\varepsilon^2
Bentuk ekor inovasi Gaussian Student-tt Student-tt skew-tt
Skew dalam inovasi tidak tidak tidak ya (λ\lambda)
Kekangan kepositifan ya ya (α+γ0\alpha+\gamma\ge0) tiada (bentuk log) ya
Syarat kepegunan α+β<1\alpha+\beta<1 α+β+12γ<1\alpha+\beta+\tfrac12\gamma<1 β<1\lvert\beta\rvert<1 α+β+P(z<0)γ<1\alpha+\beta+P(z<0)\gamma<1
Params tambahan vs garis dasar 0 γ,ν\gamma,\nu γ,ν\gamma,\nu γ,ν,λ\gamma,\nu,\lambda
Keputusan kripto biasa gagal backtest VaR kuat, teguh kuat, teguh marginal berbanding GJR-t

Corak untuk dihayati: lompatan dari lajur 1 ke lajur 2 - menambah kedua-dua ketaksimetrian dan ekor tebal sekaligus - ialah tempat hampir semua penambahbaikan penentukuran risiko berada. Penghalusan seterusnya (bentuk fungsi EGARCH, terma skew) adalah nyata tetapi peringkat kedua, dan pada banyak siri kripto ia berada dalam hingar. Belanjakan bajet pemodelan anda pada lompatan pertama dan bersikap skeptik terhadap yang selebihnya.

Aplikasi Risiko: VaR dan Expected Shortfall

Menyuaikan model volatiliti yang lebih mewah hanya berbaloi jika ia menambah baik keputusan. Keputusan paling bersih untuk ditambah baik ialah ramalan risiko-ekor satu langkah: berapa buruk keadaan esok? Kita menghasilkan Value-at-Risk dan Expected Shortfall satu-hari-ke-hadapan (a.k.a. Conditional VaR, yang saluran paip portfolio HRP/CVaR gunakan sebagai objektifnya) terus daripada ramalan GARCH-tt/skew-tt yang disuaikan.

Daripada Taburan Bersyarat kepada VaR

Jentera GARCH memberikan ramalan satu langkah bagi min bersyarat μt+1\mu_{t+1} dan sisihan piawai bersyarat σt+1\sigma_{t+1}. Pulangan dimodelkan sebagai rt+1=μt+1+σt+1zt+1r_{t+1} = \mu_{t+1} + \sigma_{t+1} z_{t+1} dengan zt+1z_{t+1} diambil daripada taburan piawai yang disuaikan (Gaussian, tt, atau skew-tt). Jadi kuantil-α\alpha bagi pulangan hanyalah transformasi afin bagi kuantil-α\alpha bagi taburan piawai:

VaRα(t+1)=(μt+1+σt+1Fz1(1α))\text{VaR}_{\alpha}(t+1) = -\Bigl(\mu_{t+1} + \sigma_{t+1}\, F_z^{-1}(1-\alpha)\Bigr)

di mana Fz1F_z^{-1} ialah kuantil (CDF songsang) bagi inovasi piawai dan tanda tolak pendahulu mengikut konvensyen bahawa VaR ialah nombor kerugian positif. Untuk VaR 99%, α=0.99\alpha = 0.99 dan anda memasukkan Fz1(0.01)F_z^{-1}(0.01). Keseluruhan manfaat tt/skew-tt muncul di sini: Fz1(0.01)F_z^{-1}(0.01) lebih negatif daripada Gaussian 2.326-2.326, jadi VaR secara jujur lebih besar.

Expected Shortfall

VaR memberitahu anda ambang; ia tidak berkata apa-apa mengenai betapa buruknya pelanggaran apabila ia berlaku. Expected Shortfall - purata kerugian bersyarat pada melebihi VaR - memberitahu, dan ia koheren (subaditif), yang merupakan sebab ia ialah ukuran risiko di sebalik pengoptimuman CVaR dan mengapa Basel beralih kepadanya. Untuk model lokasi-skala,

ESα(t+1)=(μt+1+σt+1E ⁣[zzFz1(1α)]).\text{ES}_{\alpha}(t+1) = -\Bigl(\mu_{t+1} + \sigma_{t+1}\, \mathbb{E}\!\left[z \mid z \leq F_z^{-1}(1-\alpha)\right]\Bigr).

Terma jangkaan ekor bersyarat E[zzq]\mathbb{E}[z \mid z \le q] mempunyai bentuk tertutup untuk taburan standard. Untuk Gaussian, dengan q=Φ1(1α)q = \Phi^{-1}(1-\alpha),

E[zzq]=ϕ(q)1α,\mathbb{E}[z \mid z \le q] = -\frac{\phi(q)}{1-\alpha},

di mana ϕ\phi ialah pdf normal piawai. Untuk Student-tt piawai dengan ν\nu darjah kebebasan dan q=tν1(1α)q = t_\nu^{-1}(1-\alpha) (pada skala piawai), jangkaan ekor ialah

E[zzq]=ν+q2ν1gν(q)1α,\mathbb{E}[z \mid z \le q] = -\frac{\nu + q^2}{\nu - 1}\cdot\frac{g_\nu(q)}{1-\alpha},

di mana gνg_\nu ialah pdf tt piawai. Expected Shortfall tt melebihi Gaussian lebih daripada VaR melebihinya, kerana ekor tt bukan sahaja lebih jauh keluar - ia lebih tebal, jadi purata kerugian melangkaui ambang tidak seimbang besarnya. Gap tambahan itu ialah nombor yang model Gaussian sembunyikan daripada anda.

Mengira VaR dan ES daripada Model arch yang Disuaikan

Taburan arch mendedahkan kaedah ppf (kuantil), jadi kita boleh mendapatkan kuantil piawai secara langsung dan mengelak menurunkan semula apa-apa. Untuk ES kita menyepadu secara berangka, yang teguh dan berfungsi secara seragam merentasi normal/t/skewt.

from scipy import integrate

def var_es_forecast(res, alpha=0.99):
    """
    One-step-ahead VaR and ES at level alpha, on the same (x100) scale
    as the returns fed to the model. Divide by 100 for fractional units.
    """
    fc = res.forecast(horizon=1, reindex=False)
    mu = fc.mean.iloc[-1, 0]
    sigma = np.sqrt(fc.variance.iloc[-1, 0])

    dist = res.model.distribution          # StudentsT / SkewStudent / Normal
    dp = [res.params[k] for k in res.params.index
          if k in ("nu", "eta", "lambda", "lam")]

    z_q = dist.ppf(1 - alpha, dp) if dp else dist.ppf(1 - alpha)
    z_q = float(np.atleast_1d(z_q)[0])

    def pdf(z):
        arr = np.atleast_1d(z).astype(float)
        lp = dist.loglikelihood(dp, arr, np.ones_like(arr), individual=True) \
             if dp else dist.loglikelihood([], arr, np.ones_like(arr),
                                           individual=True)
        return np.exp(lp)

    num, _ = integrate.quad(lambda z: z * pdf(z), -30, z_q, limit=200)
    es_z = num / (1 - alpha)               # E[z | z <= z_q]

    var = -(mu + sigma * z_q)
    es  = -(mu + sigma * es_z)
    return {"mu": mu, "sigma": sigma, "z_q": z_q,
            "VaR": var, "ES": es}

for name in ["GARCH-N", "GJR-t", "GJR-skewt"]:
    out = var_es_forecast(models[name], alpha=0.99)
    print(f"{name:11s}  sigma={out['sigma']:.2f}%  "
          f"z_q={out['z_q']:+.2f}  "
          f"VaR99={out['VaR']:.2f}%  ES99={out['ES']:.2f}%")

Lajur z_q ialah keseluruhan cerita dalam satu nombor. Model Gaussian menggunakan zq2.33z_q \approx -2.33; tt dengan ν4.3\nu \approx 4.3 menggunakan sesuatu berhampiran 3.3-3.3; skew-tt menolak kuantil kiri lebih jauh lagi sambil menarik yang kanan masuk. σt+1\sigma_{t+1} yang sama, VaR yang jauh lebih besar. Jika anda telah menjalankan VaR Gaussian pada kripto, inilah gap yang anda telah menyerap secara senyap.

Satu Langkah vs Berbilang Langkah: Satu Peringatan

Segala-galanya di atas ialah ramalan satu-hari-ke-hadapan, dan itulah tempat VaR GARCH paling bersih. Dua perkara merumitkan ufuk yang lebih panjang dan anda harus mengetahuinya sebelum menganggarkan.

Pertama, ramalan varians min-berbalik. Varians bersyarat hh-langkah-ke-hadapan daripada GARCH pegun menumpu ke arah aras tak bersyarat σˉ2\bar\sigma^2 apabila hh bertambah, dan varians hh-hari terkumpul ialah jumlah ramalan setiap langkah - ia bukan h×σt+12h\times\sigma_{t+1}^2 melainkan volatiliti berada pada min jangka panjangnya. Penskalaan "punca-kuasa-dua-masa" naif VaR(h)=hVaR(1)\text{VaR}(h) = \sqrt{h}\,\text{VaR}(1) mengabaikan min-balik ini dan salah tepat selepas kejutan, apabila anda paling memerlukan nombor tersebut. Gunakan laluan varians berbilang langkah model itu sendiri.

Kedua, taburan pulangan berbilang hari bukanlah bentuk yang sama seperti inovasi satu hari. Menjumlahkan beberapa kejutan harian bertaburan tt (melalui rekursi GARCH tak linear) tidak memberikan taburan tt pada ufuk hh-hari; tiada bentuk tertutup yang bersih. Untuk VaR berbilang hari laluan jujur ialah simulasi: ambil laluan inovasi daripada taburan piawai yang disuaikan, jalankannya melalui rekursi GARCH untuk mendapatkan laluan pulangan tersimulasi, agregatkan kepada pulangan hh-hari, dan baca kuantil empirik. Itu juga secara semula jadi mengendalikan kes skew-tt, di mana tiada kuantil berbilang ufuk analitik wujud langsung. Formula analitik satu langkah dalam siaran ini adalah tepat; layan sebarang jalan pintas berbilang langkah sebagai anggaran untuk disahkan.

Mem-backtest VaR: Kupiec dan Christoffersen

Ramalan VaR ialah dakwaan probabilistik: "kerugian akan melebihi ambang ini pada hanya (1α)(1-\alpha) hari." Anda mengujinya dengan mengira pelanggaran (hari apabila kerugian terealisasi melebihi VaR ramalan) sepanjang penilaian walk-forward dan menyemak dua perkara. Pertama, adakah kadar pelanggaran betul? Kedua, adakah pelanggaran bebas, atau adakah ia berkelompok (yang bermaksud model gagal tepat apabila ia penting, semasa lonjakan volatiliti)?

Biar It=1{losst>VaRt}I_t = \mathbf{1}\{\text{loss}_t > \text{VaR}_t\} ialah jujukan pelanggaran, N=ItN = \sum I_t bilangan pelanggaran sepanjang TT hari, dan π^=N/T\hat{\pi} = N/T kadar tercerap. Kadar sasaran p=1αp = 1-\alpha.

Ujian liputan tak bersyarat Kupiec (1995) menyemak π^p\hat\pi \approx p melalui nisbah kemungkinan:

LRuc=2log ⁣[pN(1p)TNπ^N(1π^)TN]    χ12.LR_{uc} = -2\log\!\left[\frac{p^{N}(1-p)^{T-N}}{\hat\pi^{N}(1-\hat\pi)^{T-N}}\right] \;\sim\; \chi^2_1.

Ujian kebebasan Christoffersen (1998) menyemak bahawa pelanggaran hari ini tidak diramal oleh pelanggaran semalam. Biar nijn_{ij} mengira peralihan daripada keadaan ii ke keadaan jj dalam jujukan pelanggaran, π01=n01/(n00+n01)\pi_{01} = n_{01}/(n_{00}+n_{01}), π11=n11/(n10+n11)\pi_{11} = n_{11}/(n_{10}+n_{11}), dan π=(n01+n11)/T\pi = (n_{01}+n_{11})/T. Maka

LRind=2log ⁣[(1π)n00+n10πn01+n11(1π01)n00π01n01(1π11)n10π11n11]    χ12.LR_{ind} = -2\log\!\left[\frac{(1-\pi)^{n_{00}+n_{10}}\,\pi^{\,n_{01}+n_{11}}}{(1-\pi_{01})^{n_{00}}\pi_{01}^{n_{01}}(1-\pi_{11})^{n_{10}}\pi_{11}^{n_{11}}}\right] \;\sim\; \chi^2_1.

Kedua-duanya bergabung menjadi ujian liputan bersyarat LRcc=LRuc+LRindχ22LR_{cc} = LR_{uc} + LR_{ind} \sim \chi^2_2, yang secara serentak menyemak kadar betul dan kebebasan. Sesuatu model boleh lulus Kupiec (bilangan pelanggaran yang betul) namun gagal Christoffersen (kesemuanya berhimpun dalam satu minggu kejatuhan) - itulah mod kegagalan yang paling anda mahu tangkap, kerana pelanggaran berkelompok ialah yang meletupkan akaun.

from scipy.stats import chi2

def var_backtest(losses, var, p):
    """
    losses, var: 1D arrays, same length; loss>0 is a loss, var>0 threshold.
    p = 1 - alpha (target violation rate, e.g. 0.01 for 99% VaR).
    Returns Kupiec, Christoffersen-independence, and conditional-coverage LR.
    """
    losses = np.asarray(losses)
    var = np.asarray(var)
    I = (losses > var).astype(int)          # violation indicators
    T = len(I)
    N = int(I.sum())
    pi_hat = N / T

    eps = 1e-12
    ll_null = N * np.log(p + eps) + (T - N) * np.log(1 - p + eps)
    ll_alt  = N * np.log(pi_hat + eps) + (T - N) * np.log(1 - pi_hat + eps)
    LR_uc = -2 * (ll_null - ll_alt)
    p_uc = 1 - chi2.cdf(LR_uc, df=1)

    n00 = np.sum((I[:-1] == 0) & (I[1:] == 0))
    n01 = np.sum((I[:-1] == 0) & (I[1:] == 1))
    n10 = np.sum((I[:-1] == 1) & (I[1:] == 0))
    n11 = np.sum((I[:-1] == 1) & (I[1:] == 1))
    pi01 = n01 / (n00 + n01) if (n00 + n01) else 0.0
    pi11 = n11 / (n10 + n11) if (n10 + n11) else 0.0
    pi   = (n01 + n11) / (n00 + n01 + n10 + n11)

    def _ll(pi01, pi11, pi_pooled, use_pooled):
        if use_pooled:
            a = (n00 + n10) * np.log(1 - pi_pooled + eps)
            b = (n01 + n11) * np.log(pi_pooled + eps)
            return a + b
        return (n00 * np.log(1 - pi01 + eps) + n01 * np.log(pi01 + eps)
                + n10 * np.log(1 - pi11 + eps) + n11 * np.log(pi11 + eps))

    LR_ind = -2 * (_ll(pi01, pi11, pi, True) - _ll(pi01, pi11, pi, False))
    p_ind = 1 - chi2.cdf(LR_ind, df=1)

    LR_cc = LR_uc + LR_ind
    p_cc = 1 - chi2.cdf(LR_cc, df=2)

    return {
        "T": T, "violations": N,
        "obs_rate": pi_hat, "target_rate": p,
        "LR_uc": LR_uc, "p_uc": p_uc,
        "LR_ind": LR_ind, "p_ind": p_ind,
        "LR_cc": LR_cc, "p_cc": p_cc,
    }

Untuk menjana input losses/var secara jujur, anda menyuai semula (atau sekurang-kurangnya meramal semula) pada tetingkap mengembang atau bergolek dan merekod VaR satu-langkah-ke-hadapan untuk setiap hari luar sampel, kemudian membandingkannya dengan kerugian terealisasi untuk hari itu. Jangan sekali-kali mem-backtest VaR dalam sampel - model yang disuaikan pada kejatuhan yang sama yang ia diminta untuk meramal akan kelihatan jauh lebih baik daripada sepatutnya. Ini ialah disiplin yang sama dengan pariti backtest-langsung: penilaian mesti hanya menggunakan maklumat yang tersedia pada masa keputusan.

def walk_forward_var(returns, alpha=0.99, start=750, refit_every=25,
                     vol="Garch", o=1, dist="t"):
    """
    Expanding-window one-step VaR. Refit every `refit_every` days
    (refitting daily is correct but slow; every ~25 days is a common
    compromise -- validate the shortcut on your data).
    """
    losses, vars_ = [], []
    res = None
    for t in range(start, len(returns)):
        if res is None or (t - start) % refit_every == 0:
            am = arch_model(returns.iloc[:t], mean="Constant",
                            vol=vol, p=1, o=o, q=1, dist=dist)
            res = am.fit(disp="off")
        fc = res.forecast(horizon=1, reindex=False)
        mu = fc.mean.iloc[-1, 0]
        sig = np.sqrt(fc.variance.iloc[-1, 0])
        dp = [res.params[k] for k in res.params.index
              if k in ("nu", "eta", "lambda", "lam")]
        z_q = float(np.atleast_1d(
            res.model.distribution.ppf(1 - alpha, dp) if dp
            else res.model.distribution.ppf(1 - alpha))[0])
        var_t = -(mu + sig * z_q)
        vars_.append(var_t)
        losses.append(-returns.iloc[t])     # realized loss for that day
    return np.array(losses), np.array(vars_)

losses, vars_ = walk_forward_var(r, alpha=0.99, dist="t")
print(var_backtest(losses, vars_, p=0.01))

Bacaannya: VaR 99% yang tertentukur baik menunjukkan kadar tercerap berhampiran 1%, Kupiec tak signifikan (p_uc besar), dan Christoffersen tak signifikan (p_ind besar) - tiada pengelompokan. Dalam amalan, hasil jujur pada kripto ialah GARCH-Normal gagal Kupiec (terlalu banyak pelanggaran, p_uc sangat kecil) manakala GJR-tt atau EGARCH-tt lulus atau hampir. Kontras itu ialah keseluruhan hujah siaran ini dijelmakan sebagai ujian hipotesis. Jika model tt pun menunjukkan pelanggaran berkelompok (p_ind kecil), dinamik volatiliti anda masih tersalah tentu - selalunya tanda anda memerlukan ingatan lebih panjang (component/FIGARCH) atau lapisan rejim, yang berkait dengan pengesanan rejim dengan HMM.

Meletakkan Model mengikut Kerugian Ekor, Bukan Sekadar Lulus/Gagal

Kupiec dan Christoffersen memberikan anda keputusan binari - model ditolak atau tidak ditolak. Itu perlu tetapi kasar: dua model boleh kedua-duanya "lulus" sedangkan satu jauh lebih tajam. Untuk meletakkan ramalan VaR yang bersaing, skorkannya dengan fungsi kerugian yang konsisten sepenuhnya untuk kuantil, kerugian pinball (kuantil):

Lτ(r,q)=(τ1{r<q})(rq),τ=1α,L_\tau(r, q) = \bigl(\tau - \mathbf{1}\{r < q\}\bigr)\,(r - q), \qquad \tau = 1-\alpha,

di mana qq ialah kuantil VaR (bertanda) dan rr pulangan terealisasi. Dipuratakan sepanjang hari luar sampel, kerugian pinball min yang lebih rendah bermaksud kuantil yang lebih tertentukur dan lebih tajam; kerana kerugian itu konsisten untuk kuantil-τ\tau, meminimumkannya tidak memberi ganjaran kepada model kerana malas melebar. Untuk membandingkan dua model secara formal, suapkan perbezaan kerugian setiap hari mereka kepada ujian Diebold-Mariano.

def pinball_loss(returns, var, alpha=0.99):
    tau = 1 - alpha
    q = -np.asarray(var)               # VaR is a positive loss; quantile is negative
    r = np.asarray(returns)
    hit = (r < q).astype(float)
    return np.mean((tau - hit) * (r - q))

Untuk Expected Shortfall secara khusus, perhatikan bahawa ES tidak boleh dielisit dengan sendirinya (tiada fungsi kerugian yang peminimumnya ialah ES sahaja), yang merupakan kerumitan teori tulen: anda menilai ES secara bersama dengan VaR menggunakan peraturan pemarkahan Fissler-Ziggel, atau anda kembali kepada amalan lebih ringkas menyemak bahawa magnitud pelanggaran purata sepadan dengan ES yang diramal model. Semakan ES kasar tetapi berguna: antara hari pelanggaran VaR, bandingkan min kerugian terealisasi dengan min ES ramalan pada hari-hari itu - ia sepatutnya hampir.

Rangka pengawalseliaan ialah pendekatan lampu isyarat Basel: sepanjang 250 hari dagangan, 0-4 pelanggaran VaR 99% ialah "hijau" (boleh diterima), 5-9 ialah "kuning" (penelitian), 10+ ialah "merah" (model ditolak dan pengganda modal meningkat). Ia ialah sepupu Kupiec yang lebih kasar, tetapi ia ialah bahasa yang jawatankuasa risiko sebenarnya bertutur, dan ia berbaloi dilaporkan bersama statistik LR.

Pertimbangan Praktikal

Apabila Parameter Tambahan Tidak Berbaloi

Lalai yang jujur ialah keraguan terhadap kerumitan. Setiap parameter yang anda tambah ialah tombol yang pengoptimum boleh terlebih suai, dan GARCH ekor tebal tak simetri mempunyai beberapa. Panduan konkrit:

  • Sampel tak cair atau pendek. Dengan beberapa ratus pemerhatian harian, ralat piawai pada γ\gamma dan λ\lambda akan besar, dan anda akan "mengesan" ketaksimetrian yang sebenarnya hingar persampelan. Pada altcoin baru atau nipis, GARCH-tt simetri sering ialah model paling kompleks yang data boleh sokong. Menyuaikan EGARCH skew-tt kepada 200 hari ialah menipu diri sendiri.
  • Terma skew kerap tidak melepasi kosnya. Dalam amalan, beralih Normal → tt ialah penambahbaikan yang besar dan boleh dipercayai (ekor tebal adalah nyata dan kuat). Beralih tt → skew-tt sering marginal - keuntungan BIC 1 atau 2, kadangkala negatif. Tambah skew hanya apabila data jelas memintanya.
  • EGARCH vs GJR biasanya seri pada data harian. Ia mengekod cerita kualitatif yang sama dengan bentuk fungsi yang berbeza. Pilih mengikut backtest VaR luar sampel, bukan mengikut yang mempunyai log-kemungkinan lebih baik dalam sampel.
  • Frekuensi lebih tinggi mengubah jawapan. Pada bar setiap jam atau minit, kemusiman intraday dan struktur mikro mendominasi, dan GARCH bergaya harian biasa tersalah tentu tanpa mengira ketaksimetrian. Masalah berbeza, peralatan berbeza.

Ini ialah pengajaran yang sama dengan penilaian jujur tanpa kelebihan teguh: model yang lebih kompleks yang tidak bertahan ujian luar sampel adalah lebih buruk daripada model ringkas yang digantikannya, kerana ia membawa ilusi ketepatan. Laporkan keputusan negatif - "skew tidak membantu pada ETH" - sebagai penemuan sebenar, dan gunakan pengoptimuman walk-forward sebagai penimbang tara, bukan AIC dalam sampel.

Inilah Marginal yang Semua Orang Lain Bina Di Atasnya

Model di sini bukan titik akhir; ia ialah blok binaan univariat untuk jentera risiko-bersama. Siaran model copula untuk risiko kripto bersama menggunakan EGARCH/GJR-tt tepat sebagai marginal GARCH-EVT sebelum menyuaikan vine copula - anda suaikan GARCH ekor tebal tak simetri setiap aset, ekstrak reja piawai, dan hanya kemudian memodelkan pergantungan silang aset. Jika marginal anda ialah GARCH Gaussian simetri, copula mewarisi ralat ekornya tidak kira sebaik mana model pergantungannya. Marginal sampah, VaR bersama sampah.

Untuk masalah volatiliti multivariat - korelasi berubah masa dan bukannya varians setiap aset - lihat Bahagian 3, DCC-GARCH, yang melapiskan model korelasi dinamik di atas suaian univariat ini. Dan untuk menukar ramalan volatiliti menjadi penetapan saiz kedudukan dan backtest dagangan, Bahagian 4 mengenai penyasaran volatiliti menggunakan ramalan σt+1\sigma_{t+1} daripada model yang tepat ini untuk menskala pendedahan secara songsang kepada risiko yang diramal.

Alternatif Bebas Taburan

Segala-galanya dalam bahagian risiko bergantung pada andaian parametrik: bahawa reja piawai mengikut tt atau skew-tt. Andaian itu boleh diuji dan biasanya munasabah, tetapi ia boleh gagal. Jika anda lebih suka tidak komited kepada sebarang bentuk ekor, ramalan konformal memberikan selang ramalan bebas taburan dengan jaminan liputan sampel terhingga - falsafah yang benar-benar berbeza yang tidak membuat sebarang dakwaan mengenai taburan inovasi. Kedua-dua pendekatan saling melengkapi: GARCH-tt parametrik memberikan anda ketumpatan bersyarat penuh (dan dengan itu ES, yang selang konformal tidak sediakan secara langsung), manakala konformal memberikan liputan yang bertahan walaupun apabila ketumpatan anda salah. Dalam pengeluaran, menggunakan kedua-duanya sebagai semakan silang ialah insurans yang murah.

Kebersihan Berangka dan Aliran Kerja

  • Skala pulangan dengan 100. Pengoptimum GARCH menumpu jauh lebih boleh dipercayai pada pulangan peratus daripada pada pulangan pecahan mentah. Ingat untuk menyahskala VaR/ES jika anda melaporkan dalam unit pecahan.
  • Perhatikan kegigihan. Jika α+β+12γ\alpha + \beta + \tfrac12\gamma menganggarkan di atas ~0.999, model hampir bersepadu (seperti IGARCH); ramalan min-berbalik sangat perlahan dan ramalan varians ufuk panjang menjadi tak boleh dipercayai. Tidak semestinya salah, tetapi bendera ia.
  • Kegagalan penumpuan pada tetingkap bergolek. Bentuk log EGARCH mengelak kekangan kepositifan tetapi masih boleh gagal menumpu pada tetingkap patologi. Balut fit() dalam try/except dan kembali kepada parameter tetingkap sebelumnya dan bukannya meranapkan backtest langsung.
  • Model min. Kita menggunakan min pemalar sepanjang. Untuk kebanyakan kripto harian min bersyarat hampir sifar dan ditenggelami oleh volatiliti; jangan belanjakan kerumitan model cuba meramalnya melainkan anda mempunyai sebab sebenar.

Ringkasan

  • GARCH(1,1) biasa mempunyai dua kecacatan struktur: ia simetri (bertindak balas terhadap +x%+x\% dan x%-x\% secara serupa kerana kejutan masuk sebagai ε2\varepsilon^2) dan ia menganggap inovasi Gaussian (memberi harga terlalu rendah ekor tebal kripto). Kedua-duanya membebankan wang sebenar melalui VaR optimistik.
  • GJR-GARCH menambah terma ambang γI(εt1<0)εt12\gamma\,I(\varepsilon_{t-1}<0)\,\varepsilon_{t-1}^2. γ>0\gamma > 0 yang signifikan ialah kesan leverage: berita buruk menaikkan volatiliti lebih banyak. Kepositifan memerlukan α+γ0\alpha+\gamma\ge0; kegigihan ialah α+β+12γ\alpha+\beta+\tfrac12\gamma.
  • EGARCH memodelkan logσt2\log\sigma_t^2, jadi tiada kekangan kepositifan dan kepegunan hanyalah β<1|\beta|<1. Ketaksimetrian masuk melalui terma bertanda γzt1\gamma z_{t-1} (leverage ialah γ<0\gamma<0 dalam konvensyen ini) dipisahkan daripada terma magnitud zt1|z_{t-1}|.
  • Keluk kesan berita - varians tempoh seterusnya vs kejutan terakhir - menjadikan ketaksimetrian kelihatan dan mengesahkan konvensyen tanda EGARCH dalam sekali pandang.
  • Inovasi Student-tt (dist='t') membetulkan ekor melalui darjah kebebasan ν\nu (biasanya 3-6 untuk kripto); skew-tt Hansen (dist='skewt') menambah kepencongan λ\lambda untuk ekor kiri yang lebih berat. Beralih Normal → tt ialah keuntungan besar yang boleh dipercayai; tt → skew-tt sering marginal.
  • VaR dan ES mengikut daripada taburan bersyarat yang disuaikan: VaRα=(μt+1+σt+1Fz1(1α))\text{VaR}_\alpha = -(\mu_{t+1} + \sigma_{t+1}F_z^{-1}(1-\alpha)), dengan kuantil ekor tebal menjadikan risiko secara jujur lebih besar daripada Gaussian. ES (koheren, \approx CVaR) menangkap purata kerugian melangkaui VaR.
  • Backtest dengan Kupiec dan Christoffersen. Kupiec menyemak kadar pelanggaran; Christoffersen menyemak bahawa pelanggaran tidak berkelompok. Sesuatu model boleh lulus satu dan gagal yang lain - pelanggaran berkelompok ialah mod kegagalan berbahaya. Backtest secara ketat luar sampel.
  • Disiplin melebihi kerumitan. Tambah ketaksimetrian/skew hanya apabila ia bertahan BIC dan backtest VaR luar sampel. Pada siri pendek atau tak cair, model lebih ringkas biasanya menang.

References:

  • Nelson, D. B. (1991). Conditional heteroskedasticity in asset returns: A new approach. Econometrica, 59(2), 347-370. DOI
  • Glosten, L. R., Jagannathan, R., & Runkle, D. E. (1993). On the relation between the expected value and the volatility of the nominal excess return on stocks. Journal of Finance, 48(5), 1779-1801. DOI
  • Bollerslev, T. (1987). A conditionally heteroskedastic time series model for speculative prices and rates of return. Review of Economics and Statistics, 69(3), 542-547. DOI
  • Hansen, B. E. (1994). Autoregressive conditional density estimation. International Economic Review, 35(3), 705-730. DOI
  • Engle, R. F., & Ng, V. K. (1993). Measuring and testing the impact of news on volatility. Journal of Finance, 48(5), 1749-1778. DOI
  • Christoffersen, P. F. (1998). Evaluating interval forecasts. International Economic Review, 39(4), 841-862. DOI
  • Kupiec, P. H. (1995). Techniques for verifying the accuracy of risk measurement models. Journal of Derivatives, 3(2), 73-84. DOI
  • Black, F. (1976). Studies of stock price volatility changes. Proceedings of the American Statistical Association, Business and Economic Statistics Section, 177-181.
  • McNeil, A. J., Frey, R., & Embrechts, P. (2015). Quantitative Risk Management: Concepts, Techniques and Tools (2nd ed.). Princeton University Press.
  • Sheppard, K. (2023). arch: Autoregressive conditional heteroskedasticity models in Python. GitHub.
Penafian: Maklumat yang disediakan dalam artikel ini adalah untuk tujuan pendidikan dan maklumat sahaja dan bukan merupakan nasihat kewangan, pelaburan, atau dagangan. Dagangan mata wang kripto melibatkan risiko kerugian yang ketara.

MarketMaker.cc Team

Penyelidikan & Strategi Kuantitatif

Bincang di Telegram
Newsletter

Kekal Mendahului Pasaran

Langgan surat berita kami untuk pandangan dagangan AI eksklusif, analisis pasaran, dan kemas kini platform.

Kami menghormati privasi anda. Berhenti melanggan pada bila-bila masa.