← 기사 목록으로
July 10, 2026
5분 소요

GARCH(1,1): 크립토 변동성 예측하기

#volatility
#GARCH
#risk
#forecasting
#crypto
#algorithmic-trading

BTC 일간 수익률 차트를 열어보면, 랜덤워크 교과서가 결코 준비시켜주지 않았던 것을 발견하게 된다. 고요함과 혼돈은 군집을 이루어 나타난다는 사실이다. 6% 하락일은 혼자 오는 경우가 거의 없다. 그것은 4-8%씩 흔들리는 한 주 안에 자리 잡고, 그 후 시장은 숨을 고르며 다음 폭풍이 오기 전까지 1%대의 나른한 한 달을 보낸다. 수익률 자체는 거의 예측 불가능해 보인다 — 내일이 상승일지 하락일지는 신뢰성 있게 말할 수 없다 — 하지만 그 크기는 깊이 예측 가능하다. 오늘의 격변은 내일의 격변에 대해 많은 것을 말해준다.

트레이더가 사용하는 거의 모든 리스크 도구는 조용히 이것이 사실이 아니라고 가정한다. Black-Scholes는 단일 상수 σ\sigma로 옵션 가격을 매긴다. 정적인 Value-at-Risk 수치는 하나의 변동성 추정치에 정규분포 분위수를 곱한다. 고정된 3% 손절은 죽은 듯 횡보하는 화요일과 FOMC 발표나 대형 거래소 디페깅 전후의 시간을 동일한 리스크로 취급한다. 이들 각각은 정확히 같은 방식으로 무너진다 — 시간에 따라 변하는 양을 하나의 상수로 뭉개버리고, 그 상수가 실제로 움직인다는 사실에 놀란다.

이 글은 크립토 변동성 모델링에 관한 4부작 시리즈의 1부다. 여기서는 기초를 다진다 — GARCH(1,1) 모델, 이 모델이 크립토 수익률에 왜 그렇게 잘 맞는지, arch 라이브러리로 최대우도법을 이용해 정직하게 추정하는 방법, 그리고 조건부 분산 예측을 즉시 유용한 두 가지로 전환하는 방법 — 시장과 함께 호흡하는 포지션 크기와 손절 폭이다. 2부는 비대칭성과 두꺼운 꼬리를 추가하고, 3부는 다변량으로 확장되며, 4부는 완전한 변동성 타겟팅 백테스트를 구성한다. 여기서는 응용 부분을 의도적으로 단순하게 유지한다. 정직하게 walk-forward로 검증된 전략은 4부의 주제다.

크립토 수익률의 정형화된 사실들

무언가를 모델링하기 전에, 우리가 재현하려는 것이 정확히 무엇인지 짚고 넘어갈 가치가 있다. 실증 금융 수익률 — 특히 주식, 외환, 크립토 — 은 수십 년간 문서화되어 온 소수의 견고한 통계적 규칙성을 공유한다. 이것들은 보통 *정형화된 사실(stylized facts)*이라 불리며, 그중 세 가지가 이후 모든 내용을 이끈다.

1. 변동성 군집화. 큰 움직임은 (부호와 무관하게) 큰 움직임을 뒤따르는 경향이 있고, 작은 움직임은 작은 움직임을 뒤따르는 경향이 있다. Mandelbrot는 1963년 목화 가격에서 이를 발견했다. 형식적으로, 수익률 rtr_t는 계열 상관이 거의 없지만, 제곱 수익률 rt2r_t^2(실현 분산의 대용치)는 강하고 서서히 감쇠하는 양의 자기상관을 보인다.

2. 두꺼운 꼬리(첨도 초과, leptokurtosis). 수익률의 무조건부 분포는 정규분포보다 극단값에 훨씬 더 많은 확률질량을 갖는다. 정규분포의 첨도가 3인 반면, BTC 일간 로그수익률은 일상적으로 8-10 이상을 기록하며, 더 고빈도의 크립토 수익률은 더 심할 수 있다. 정규분포 모델에서는 대략 백만 년에 한 번 일어나야 할 6-시그마 사건이, 10년에 몇 번씩 나타난다.

3. 수익률에는 선형 자기상관이 없지만 제곱 수익률에는 강한 자기상관이 있음. 이것이 진짜 변동성 과정과 사소한 추세를 구분하는 지문이다. rtr_t를 그 자신의 시차값에 회귀시키면 활용할 수 있는 것이 없다. rt2r_t^2를 그 시차값에 회귀시키면, 명확하고 지속적인 신호를 발견한다. 이것이 바로 분산 모델이 포착해야 할 구조이며, 상수-σ\sigma 모델이 버리는 것이다.

이 세 가지 모두 몇 줄의 코드로 확인할 수 있다. 특별한 데이터 소스가 필요하지 않다. 프로덕션에서는 ccxt를 사용하되, 재현 가능한 예시로는 yfinance로 충분하다.

import numpy as np
import pandas as pd
import yfinance as yf
from statsmodels.graphics.tsaplots import plot_acf
from statsmodels.stats.diagnostic import acorr_ljungbox
from scipy import stats

px = yf.download("BTC-USD", start="2021-01-01", end="2025-12-31")["Close"]
ret = np.log(px / px.shift(1)).dropna()          # log returns
ret = ret.rename("btc")

print(f"Observations:     {len(ret)}")
print(f"Ann. volatility:  {ret.std() * np.sqrt(365):.2%}")
print(f"Skewness:         {stats.skew(ret):.2f}")
print(f"Excess kurtosis:  {stats.kurtosis(ret):.2f}")   # 0 == Gaussian

lb_ret  = acorr_ljungbox(ret,        lags=[10], return_df=True)
lb_ret2 = acorr_ljungbox(ret ** 2,   lags=[10], return_df=True)
print("\nLjung-Box p-value, returns   (lag 10):", float(lb_ret["lb_pvalue"].iloc[0]))
print("Ljung-Box p-value, squared   (lag 10):", float(lb_ret2["lb_pvalue"].iloc[0]))

전형적인 결과는 (예시일 뿐이며 실제 기간에 따라 다르다): 3을 훨씬 웃도는 첨도 초과값, 원본 수익률에 대해서는 "자기상관 없음"을 기각하지 못하는 Ljung-Box p-값, 그리고 제곱 수익률에 대해서는 사실상 0인 p-값이다. 이 마지막 대조가 이 게임의 전부다. 일간 지평선에서 수익률의 부호에는 거래할 만한 것이 없지만, 그 분산에는 상당한 구조가 있고, 그 구조는 예측 가능하다.

크립토의 24/7 특성에 대한 참고사항. 주식과 달리 오버나이트 갭도 주말 휴장도 없으므로, "하루"는 깔끔한 24시간 봉이고 연율화 계수는 252\sqrt{252}가 아닌 365\sqrt{365}다. 변동성 군집화는 인트라데이 규모에서도 살아남으며, 이는 시간봉에서 GARCH를 돌린다면 중요한 문제다 — 펀딩비율 반전과 청산 캐스케이드가 일간 모델이 평활화해버리는 날카롭고 군집된 분산 폭발을 주입하기 때문이다.

ARCH에서 GARCH로

문제는 이제 명확히 제시되었다 — 상수가 아니라 최근 과거에 의존하는 분산을 모델링하는 것이다. 이를 제대로 해낸 첫 모델은 Engle의 ARCH(Autoregressive Conditional Heteroskedasticity, 1982)였으며, 이 업적으로 그는 2003년 노벨상을 수상했다.

수익률을 조건부 평균과 충격의 합으로 쓰면:

rt=μt+εt,εt=σtzt,zti.i.d. (0,1)r_t = \mu_t + \varepsilon_t, \qquad \varepsilon_t = \sigma_t z_t, \qquad z_t \sim \text{i.i.d. } (0, 1)

여기서 σt2\sigma_t^2조건부 분산이다 — 시점 t1t-1까지 알려진 모든 정보가 주어졌을 때의 rtr_t의 분산이다 — 그리고 ztz_t는 표준화된 혁신(가장 단순한 경우 표준정규분포)이다. "조건부"라는 단어가 모든 것을 설명한다. 무조건부 분산은 상수일 수 있지만, 어제를 조건으로 하면 움직인다.

Engle의 ARCH(qq)는 오늘의 분산을 지난 qq개의 제곱 충격들의 가중합으로 만든다.

σt2=ω+i=1qαiεti2\sigma_t^2 = \omega + \sum_{i=1}^{q} \alpha_i \, \varepsilon_{t-i}^2

여기서 분산을 양수로 유지하기 위해 ω>0\omega > 0이고 αi0\alpha_i \ge 0이다. 이는 군집화를 직접 포착한다 — 큰 충격 εt12\varepsilon_{t-1}^2σt2\sigma_t^2을 밀어올리고, 이는 또 다른 큰 충격의 가능성을 높이며, 분산을 계속 높은 상태로 유지시킨다. 문제는 실증적인 감쇠 속도다. 실제 시장에서 변동성 지속성은 많은 시차에 걸쳐 늘어지므로, 이를 적합시키려면 ARCH 모델은 큰 qq가 필요하다 — 흔히 8, 10, 또는 그 이상이다 — 그리고 이는 과적합되기 쉬운 길고 불안정한 αi\alpha_i 벡터를 추정해야 함을 의미한다.

Bollerslev의 1986년 통찰은 그 모든 지속성을 단일 파라미터로 흡수하는 항을 추가하는 것이었다. GARCH(1,1) — Generalized ARCH — 재귀식은 다음과 같다.

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

세 개의 파라미터, 세 가지 명확한 해석:

  • ω>0\omega > 0기저값 또는 바닥값. 분산의 장기 수준을 고정하는 상수다. 분산은 ω\omega가 지탱하는 수준 아래로 결코 감쇠하지 않는다.
  • α0\alpha \ge 0 — 뉴스에 대한 반응. 어제의 놀람 εt12\varepsilon_{t-1}^2에 분산이 얼마나 격렬하게 반응하는지를 나타낸다. 큰 α\alpha는 조건부 분산이 변덕스럽고 충격에 민감함을 의미한다.
  • β0\beta \ge 0지속성 또는 기억력. 어제의 분산 중 얼마나 많은 부분이 오늘로 이어지는지를 나타낸다. 큰 β\beta는 변동성이 매끄럽고 서서히 사라짐을 의미한다 — 고요함은 고요하게, 폭풍은 폭풍스럽게 유지된다.

우아함은 재귀식 자체에 있다. σt12\sigma_{t-1}^2 자체가 βσt22\beta \sigma_{t-2}^2 항을 포함하고 있으므로, 이를 뒤로 전개하면 GARCH(1,1)이 과거 제곱 충격에 기하급수적으로 감쇠하는 가중치 αβk\alpha \beta^{k}를 갖는 ARCH(\infty)임을 보여준다.

σt2=ω1β+αk=0βkεt1k2\sigma_t^2 = \frac{\omega}{1-\beta} + \alpha \sum_{k=0}^{\infty} \beta^{k}\, \varepsilon_{t-1-k}^2

따라서 단 하나의 β\beta가 과거 충격에 대한 무한하고 지수가중된 기억을 사준다. 이것이 겨우 세 개의 파라미터를 가진 GARCH(1,1)이 열 개를 가진 ARCH 모델을 일상적으로 능가하고, 응용 변동성 모델링의 주력 모델이 된 이유다. 실제로 이는 RiskMetrics EWMA 분산 추정치의 가까운 사촌이다. RiskMetrics는 ω=0\omega = 0, α+β=1\alpha + \beta = 1이고 β\beta가 0.94로 고정된 특수 사례다. GARCH는 데이터가 α\alpha, β\beta, 그리고 진정한 평균회귀 수준을 스스로 선택하도록 하여 이를 일반화한다.

성질: 정상성, 장기 분산, 그리고 반감기

GARCH(1,1) 재귀식에는 유도해볼 가치가 있는 몇 가지 성질이 있다. 이를 알면 모델을 맹목적으로 적합시키는 것을 넘어 모델에 대해 추론할 수 있기 때문이다.

무조건부(장기) 분산. 과정이 공분산 정상적이어서 무조건부 분산 σˉ2=E[εt2]=E[σt2]\bar{\sigma}^2 = \mathbb{E}[\varepsilon_t^2] = \mathbb{E}[\sigma_t^2]가 존재하고 시간에 걸쳐 일정하다고 가정하자. 재귀식 양변의 기댓값을 취한다. E[εt12]=E[σt12]=σˉ2\mathbb{E}[\varepsilon_{t-1}^2] = \mathbb{E}[\sigma_{t-1}^2] = \bar{\sigma}^2이므로:

σˉ2=ω+ασˉ2+βσˉ2        σˉ2=ω1αβ\bar{\sigma}^2 = \omega + \alpha\, \bar{\sigma}^2 + \beta\, \bar{\sigma}^2 \;\;\Longrightarrow\;\; \bar{\sigma}^2 = \frac{\omega}{1 - \alpha - \beta}

이것이 변동성이 평균회귀하는 수준이다. 이는 α+β<1\alpha + \beta < 1일 때에만 존재하며 양수가 된다.

정상성 조건. 바로 그 부등식,

α+β<1,\alpha + \beta < 1,

이 GARCH(1,1)의 공분산 정상성 조건이다. α+β\alpha + \beta라는 양은 분산 과정의 **지속성(persistence)**이다 — 이는 분산 충격이 σˉ2\bar{\sigma}^2로 다시 감쇠하는 속도를 지배하는 AR(1) 계수다. 만약 α+β1\alpha + \beta \ge 1이면, 무조건부 분산은 무한하거나(또는 정의되지 않고), 충격이 결코 완전히 사라지지 않는다.

평균회귀를 명시적으로 확인할 수 있다. 분산 편차 σt2σˉ2\sigma_t^2 - \bar{\sigma}^2를 정의하자. 재귀식에 약간의 대수 조작((ω=σˉ2(1αβ)\omega = \bar{\sigma}^2(1 - \alpha - \beta))를 대입)을 가하면, 기댓값 형태로:

Et[σt+k2]σˉ2=(α+β)k(σt+12σˉ2)\mathbb{E}_t[\sigma_{t+k}^2] - \bar{\sigma}^2 = (\alpha + \beta)^{k}\,\bigl(\sigma_{t+1}^2 - \bar{\sigma}^2\bigr)

현재 분산과 장기 수준 사이의 간격은 매 단계마다 (α+β)(\alpha + \beta) 배씩 줄어든다. 이것이 바로 나중에 사용할 다단계 예측이다.

변동성 반감기. 분산 충격이 정상 수준으로 절반 감쇠하는 데 걸리는 시간은 얼마인가? (α+β)h=1/2(\alpha+\beta)^{h} = 1/2로 놓고 풀면:

h1/2=ln0.5ln(α+β)h_{1/2} = \frac{\ln 0.5}{\ln(\alpha + \beta)}

α+β=0.95\alpha + \beta = 0.95일 때 반감기는 약 13.5일이고, 0.980.98일 때는 약 34일, 0.990.99일 때는 약 69일이다. 이 하나의 숫자는 종종 원시 파라미터보다 더 직관적이다 — 이는 여러분의 봉 단위로, 변동성이 얼마나 끈적끈적한지를 알려준다.

크립토의 near-IGARCH 문제. 여기서 크립토 특유의 문제가 등장한다. BTC나 ETH 수익률에 GARCH(1,1)을 적합시키면 거의 항상 α+β\alpha + \beta가 1에 매우 가까운 값을 발견하게 된다 — 0.98, 0.99, 때로는 0.995 같은 값이 흔하다. 이것이 near-IGARCH(Integrated GARCH) 영역이다. 여기에는 실질적인 결과가 따른다.

  • 반감기가 엄청나게 커져서(수 주에서 수 개월), 모델은 변동성을 매우 지속적이고 평균회귀가 거의 일어나지 않는 것으로 취급한다.
  • σˉ2=ω/(1αβ)\bar{\sigma}^2 = \omega/(1-\alpha-\beta)의 추정치는 극도로 민감해진다 — α+β\alpha+\beta가 0.99에서 0.995로 작게만 변해도 내재된 장기 분산이 두 배가 된다. 이 영역에서는 신뢰구간 없이 장기 변동성의 점추정치를 결코 신뢰하지 마라.
  • 다단계 예측은 너무 느리게 평균회귀하기 때문에, 몇 주 미만의 실용적 지평선에서는 GARCH가 (EWMA가 가정하는) 분산의 랜덤워크와 거의 비슷하게 동작한다.

near-integration이 진짜인지, 아니면 구조적 단절의 부산물(변동성 수준의 영구적인 이동을 모델이 하나의 길고 지속적인 에피소드로 읽어낸 것)인지는 진짜 논쟁거리다. 이는 전체 이력에 한 번만 적합시키지 말고 롤링 윈도우로 재적합해야 하는 또 하나의 이유이며, 이는 함정 섹션에서 다시 다룰 것이다. 레짐 구조 자체는 명시적인 스위칭 모델로 더 잘 다뤄진다 — 은닉 마르코프 모델을 이용한 레짐 탐지를 참고하라. 이는 GARCH를 대체하는 것이 아니라 보완하는 관계다.

최대우도법에 의한 추정

GARCH 파라미터는 최대우도법으로 추정된다. 논리는 직관적이다 — θ=(μ,ω,α,β)\theta = (\mu, \omega, \alpha, \beta)가 주어지면, 재귀식은 조건부 분산의 전체 경로 σt2(θ)\sigma_t^2(\theta)를 만들어내고, 혁신 ztz_t에 대해 가정된 분포 하에서 관측된 수익률이 얼마나 그럴듯한지 적어낼 수 있다. 그런 다음 그 우도를 최대화하는 θ\theta를 선택한다.

가우시안 혁신 ztN(0,1)z_t \sim \mathcal{N}(0,1)을 가정하면, rtFt1N(μ,σt2)r_t \mid \mathcal{F}_{t-1} \sim \mathcal{N}(\mu, \sigma_t^2)이다. 하나의 관측치에 대한 조건부 밀도는

f(rtFt1)=12πσt2exp ⁣((rtμ)22σt2).f(r_t \mid \mathcal{F}_{t-1}) = \frac{1}{\sqrt{2\pi\sigma_t^2}}\exp\!\left(-\frac{(r_t - \mu)^2}{2\sigma_t^2}\right).

모델이 조건부로 쓰여 있기 때문에, 결합우도는 일단계 앞 밀도들의 곱으로 분해되고, 로그우도는 단순한 합이 된다.

(θ)=12t=1T[ln(2π)+lnσt2(θ)+(rtμ)2σt2(θ)].\ell(\theta) = -\frac{1}{2}\sum_{t=1}^{T}\left[\ln(2\pi) + \ln \sigma_t^2(\theta) + \frac{(r_t - \mu)^2}{\sigma_t^2(\theta)}\right].

주목할 만한 구조적 사실이 두 가지 있다. 첫째, σt2\sigma_t^2은 페널티(lnσt2\ln \sigma_t^2 — 모델이 높은 분산을 주장하면 벌점을 받는다)와 표준화된 잔차((rtμ)2/σt2(r_t-\mu)^2/\sigma_t^2 — 모델이 놀라면 벌점을 받는다) 양쪽에 모두 나타난다. 최적값은 이 둘의 균형을 맞추고, 이것이 분산을 추적하게 만드는 원리다. 둘째, 재귀식은 시드값 σ12\sigma_1^2이 필요하다. 보통은 수익률의 표본 분산을 사용하며, 관측치가 수천 개면 시드값은 거의 영향을 미치지 않는다.

최대화 문제에는 닫힌 형식의 해가 없으므로, 수치적으로 최적화한다(arch는 해석적 또는 수치적 그래디언트를 사용하는 준-뉴턴 방법을 사용한다). 우도 곡면은 GARCH(1,1)에 대해 일반적으로 잘 작동하지만, 실무에서 문제가 되는 두 가지가 있다 — 양수 제약(ω,α,β0\omega,\alpha,\beta \ge 0)과 α+β1\alpha+\beta \to 1일 때의 경계 근처 동작인데, 이때 최적화기가 느리게 기어갈 수 있다. 둘 다 좋은 라이브러리라면 알아서 처리해주며, 여러분도 그런 라이브러리를 사용해야 한다. GARCH MLE를 직접 짜보는 것은 좋은 학습 연습이지만 프로덕션에서는 좋지 못한 선택이다.

arch 라이브러리

Kevin Sheppard가 만든 arch 패키지는 Python의 표준 도구다. 전체 적합은 네 줄이면 된다.

from arch import arch_model

r = ret * 100.0

model  = arch_model(r, mean="Constant", vol="Garch", p=1, q=1, dist="normal")
res    = model.fit(disp="off")
print(res.summary())

인자 이름에 대해 한마디 하자면, 흔한 혼동의 원인이기 때문이다. arch에서 p는 시차 분산(β\beta 항, GARCH 차수)의 개수이고, q는 시차 제곱잔차(α\alpha 항, ARCH 차수)의 개수다. 따라서 p=1, q=1은 우리가 유도한 GARCH(1,1)이다. (Bollerslev의 원래 표기법은 GARCH(p,qp,q)에서 pp를 ARCH 차수로 쓴다 — 두 관례는 서로 뒤바뀌어 있다. 여러분의 기억보다 라이브러리 자체의 문서를 신뢰하라.)

요약 결과를 읽어보면, 계수 표는 대략 이렇게 보인다(BTC 일간 수익률에 대한 예시 값이며, 실제 실험은 아니다).

                     Volatility Model
==========================================================
                 coef    std err      t      P>|t|
----------------------------------------------------------
omega          0.4821     0.201    2.40    0.016
alpha[1]       0.0912     0.021    4.34    0.000
beta[1]        0.8994     0.024   37.5     0.000
==========================================================

이를 읽는 방법:

  • alpha[1] + beta[1] = 0.0912 + 0.8994 = 0.9906. 1 바로 아래의 지속성 — 경고한 그대로 near-IGARCH 영역이다. 반감기 ln(0.5)/ln(0.9906)73\approx \ln(0.5)/\ln(0.9906) \approx 73일.
  • omega = 0.4821이므로, 장기 분산은 백분율 제곱 단위로 0.4821/(10.9906)=51.30.4821 / (1 - 0.9906) = 51.3이고, 즉 장기 일간 변동성은 51.37.2%\sqrt{51.3} \approx 7.2\%, 연율화하면 대략 7.2%×365138%7.2\%\times\sqrt{365}\approx 138\%이다. 이는 그럴듯한 BTC 수치다.
  • alphabeta 모두 강하게 유의하다. beta에 비해 alpha가 작은 것은 전형적이다 — 크립토 변동성은 대부분 지속성(기억력)이며, 새로운 충격에 대한 반응은 온건하지만 실재한다.

×100 스케일링 함정

이것이 arch에서 이상한 결과를 얻는 가장 흔한 방법이므로 별도의 소절을 마련할 가치가 있다. 최적화기는 그것이 보는 숫자가 O(1)O(1)에서 O(100)O(100) 사이일 때 가장 잘 작동한다. 일간 로그수익률은 O(0.01)O(0.01)이므로 그 제곱은 O(0.0001)O(0.0001)이고 ω\omega10610^{-6} 근처가 되는데, 이는 수치 그래디언트가 정밀도를 잃고 적합이 조용히 수렴에 실패하거나 엉터리 표준오차를 반환할 수 있는 범위다.

해결책은 위와 같이 수익률을 100배(즉 백분율로) 스케일링해서 적합시키는 것이다. 잊어버리면 archDataScaleWarning을 발생시켜줄 것이다. 그러면 모델에서 읽어내는 모든 것이 백분율 또는 백분율 제곱 단위가 되며, 일관되게 스케일을 되돌려야 한다.

sigma_pct     = np.sqrt(res.forecast(horizon=1).variance.iloc[-1, 0])
sigma_decimal = sigma_pct / 100.0
print(f"1-day-ahead conditional vol: {sigma_decimal:.2%}")

스케일된 값과 스케일되지 않은 값을 섞는 것 — 예를 들어 소수 단위를 기대하는 포지션 사이징 공식에 백분율 변동성을 그대로 넣는 것 — 은 정확히 100배 오차를 만들어내며, 코드가 문제 없이 실행되기 때문에 놓치기 쉽다. 하나의 관례를 정하고(나는 적합 바깥에서는 모든 것을 소수로 유지하고 arch 경계에서만 스케일을 조정한다) 절대 그것을 넘나들지 마라.

조건부 분산 예측하기

적합된 모델은 예측을 할 수 있을 때에만 유용하다. GARCH는 어떤 지평선에서도 깔끔한 해석적 예측을 제공한다.

일단계 앞. 시점 TT(표본의 끝)에서 우리는 εT\varepsilon_TσT2\sigma_T^2를 알고 있으므로, 다음 분산은 결정론적이다.

σT+12=ω+αεT2+βσT2.\sigma_{T+1}^2 = \omega + \alpha\,\varepsilon_T^2 + \beta\,\sigma_T^2.

기댓값이 필요 없다 — 우변의 모든 것이 관측되었다.

다단계 앞. h2h \ge 2에서는 아직 그 사이의 충격들을 모르므로 조건부 기댓값을 취한다. (E[z2]=1\mathbb{E}[z^2]=1이므로) ET[εT+k2]=ET[σT+k2]\mathbb{E}_T[\varepsilon_{T+k}^2] = \mathbb{E}_T[\sigma_{T+k}^2]를 이용하면, 재귀식은 예측된 분산에 대한 단순한 AR(1)로 축약된다.

ET[σT+h2]=ω+(α+β)ET[σT+h12].\mathbb{E}_T[\sigma_{T+h}^2] = \omega + (\alpha + \beta)\,\mathbb{E}_T[\sigma_{T+h-1}^2].

일단계 예측에서 이를 반복하면 닫힌 형식을 얻는데, 이는 앞서 유도한 평균회귀 결과를 명시적으로 풀어쓴 것이다.

ET[σT+h2]=σˉ2+(α+β)h1(σT+12σˉ2),σˉ2=ω1αβ.\mathbb{E}_T[\sigma_{T+h}^2] = \bar{\sigma}^2 + (\alpha+\beta)^{\,h-1}\bigl(\sigma_{T+1}^2 - \bar{\sigma}^2\bigr), \qquad \bar{\sigma}^2 = \frac{\omega}{1-\alpha-\beta}.

이것을 신중하게 읽어야 한다. 이것이 모든 GARCH 예측의 기하학적 구조이기 때문이다. 분산의 기간구조는 오늘의 조건부 분산 σT+12\sigma_{T+1}^2에서 시작해서 장기 수준 σˉ2\bar{\sigma}^2를 향해 기하급수적으로 감쇠한다. 오늘이 평균보다 고요하면 예측 곡선은 σˉ2\bar\sigma^2를 향해 상승하고, 오늘이 위기 상황이면 그것을 향해 하락한다. 그 감쇠 속도는 전적으로 (α+β)(\alpha+\beta)에 의해 결정된다 — 그리고 α+β0.99\alpha+\beta \approx 0.99인 near-IGARCH 크립토 영역에서는 감쇠가 너무 느려서 2주 미만의 지평선에서는 예측이 오늘의 수준에서 거의 움직이지 않는다. 이는 내면화할 가치가 있다 — 짧은 보유 기간에 대해서는 크립토 GARCH 예측이 본질적으로 "내일은 오늘과 비슷하고, 다만 아주 서서히 되돌아갈 뿐"이라는 것이다.

보유 지평선으로 집계하기. 트레이더는 미래 하루의 분산에는 거의 관심이 없다. 만약 HH일 동안 포지션을 보유하고 수익률이 조건부로 비상관이라면(처음에 나온 정형화된 사실), 누적 HH일 수익률의 분산은 일별 예측 분산의 합이 된다.

σT2(H)=h=1HET[σT+h2],σT(H)=σT2(H).\sigma_{T}^{2}(H) = \sum_{h=1}^{H} \mathbb{E}_T[\sigma_{T+h}^2], \qquad \sigma_T(H) = \sqrt{\sigma_T^2(H)}.

이것이 실제로 사이징의 기준이 되는 숫자다 — 보유 기간 동안의 손익 변동성이다. 이는 결코 단순한 HσT+1\sqrt{H}\,\sigma_{T+1} 스케일링이 아니라는 점에 주의하라. 그것은 분산이 상수일 때만 옳은 방법이다. 오늘의 분산이 σˉ2\bar\sigma^2보다 높을 때, 평균회귀하는 예측은 실제 HH일 변동성을 제곱근 규칙보다 낮게 만든다. 오늘이 고요할 때는 그 반대로 높게 만든다. 이것을 제대로 하는 것이 기간구조를 존중하는 손절과 그렇지 않은 손절의 차이다.

코드로 보면:

H = 10
fc = res.forecast(horizon=H, reindex=False)

var_path_pct2 = fc.variance.iloc[-1].values        # [E_T sigma^2_{T+1}, ..., T+H]
var_path      = var_path_pct2 / (100.0 ** 2)       # back to decimal variance

daily_vol   = np.sqrt(var_path)
print("Forecast daily vol path:", np.round(daily_vol * 100, 2), "%")

H_day_var = var_path.sum()
H_day_vol = np.sqrt(H_day_var)
print(f"{H}-day holding-period vol: {H_day_vol:.2%}")

naive = np.sqrt(var_path[0] * H)
print(f"Naive sqrt(H) * sigma_1:   {naive:.2%}")

더 긴 지평선에서는 GARCH가 시뮬레이션 예측(method="simulation")도 지원하는데, 이는 혁신 분포를 앞으로 전파하여 분산뿐만 아니라 예측 밀도 전체를 제공한다 — 2부에서 Student-t 및 왜곡 분포로 이동하면 혁신이 비가우시안이 될 것이므로 이때 유용하다. 위의 분산에 선형인 양들에 대해서는 해석적 경로가 정확하고 계산 비용이 들지 않는다.

진단: 모델이 실제로 작동했는가?

모델을 적합시키는 것과 그것을 검증하는 것은 다르다. GARCH의 요점은 조건부 이분산성 — 변동성 군집화 — 을 흡수하여, 남는 것이 (거의) i.i.d.가 되도록 하는 것이다. 따라서 올바른 점검은 표준화된 잔차를 살펴보는 것이다.

z^t=rtμ^σ^t\hat{z}_t = \frac{r_t - \hat\mu}{\hat\sigma_t}

그리고 묻는다 — 군집화가 사라졌는가? 모델이 분산 동역학을 포착했다면, z^t\hat z_t는 단위 분산을 가져야 하고, 결정적으로 그 제곱 z^t2\hat z_t^2는 남은 자기상관을 보이지 않아야 한다. 세 가지 검정을 수행한다.

1. 표준화 잔차에 대한 Ljung-Box 검정. z^t\hat z_t의 수준에 남은 선형 자기상관이 없는지 확인한다(이는 사실 분산 모델이 아니라 평균 모델을 검정하는 것이다). 기각되지 않아야 한다.

2. 제곱 표준화 잔차에 대한 Ljung-Box 검정. 이것이 중요한 검정이다. 만약 z^t2\hat z_t^2가 여전히 유의한 자기상관을 갖는다면, 분산 모델이 군집화를 제거하는 데 실패한 것이다 — GARCH(1,1)이 포착하지 못한 구조가 있으며, 더 높은 차수, 비대칭 변형, 또는 다른 혁신 분포가 필요할 수 있다. 기각되지 않아야 한다.

3. ARCH-LM 검정(Engle의 라그랑주 승수 검정). z^t2\hat z_t^2를 그 자신의 시차값에 회귀시키고 결합 유의성을 검정한다. 이는 본질적으로 검정 2의 공식화된 버전이며 "남아있는 ARCH 효과가 있는가?"를 직접 묻는다. 유의하지 않은 결과는 조건부 이분산성이 모델링으로 제거되었음을 확인해준다.

from statsmodels.stats.diagnostic import acorr_ljungbox
from arch.unitroot.cointegration import engle_granger  # (unrelated; shown for import clarity)

z  = res.std_resid.dropna()          # standardized residuals
z2 = z ** 2

lb_z  = acorr_ljungbox(z,  lags=[10, 20], return_df=True)
lb_z2 = acorr_ljungbox(z2, lags=[10, 20], return_df=True)
print("Ljung-Box on standardized residuals:\n", lb_z, "\n")
print("Ljung-Box on SQUARED standardized residuals:\n", lb_z2, "\n")

lm = res.arch_lm_test(lags=10, standardized=True)
print(lm)

print(f"\nStd-resid excess kurtosis: {stats.kurtosis(z):.2f}")

좋은 결과는 이런 모습이다 — z^t2\hat z_t^2에 대한 Ljung-Box p-값이 (원본 제곱 수익률에서의) 거의 0에서 0.05를 편안하게 웃도는 수준으로 뛰어오르고, ARCH-LM 검정은 기각에 실패한다. 그것이 모델이 2차 모멘트에서 제 역할을 했다는 증거다.

불완전한 결과는 — 크립토에 대한 평범한 가우시안 GARCH(1,1)에서 예상해야 하는 것인데 — 군집화 검정은 통과하지만 표준화 잔차의 첨도는 여전히 높은(0이 아니라 4-6 정도인) 경우다. GARCH는 군집화를 제거하지만 하나의 두꺼운 꼬리를 가진 무조건부 분포는 남아있는데, 가우시안 혁신이 그 꼬리를 재현할 수 없기 때문이다. 그 남은 두꺼운 꼬리 현상은 여기서 고쳐야 할 버그가 아니라, 2부인 크립토의 비대칭 GARCH와 레버리지 효과의 동기다. 거기서 Student-t 및 왜곡 t-분포 혁신과 GJR/EGARCH 비대칭 항이 정확히 이 문제를 다룬다.

응용: 변동성 조정 사이징과 손절

이제 우리는 내일(그리고 향후 HH일)의 변동성 예측을 갖고 있다. 이것으로 무엇을 할까? 가장 단순하고 가장 가치 있는 두 가지 활용은 포지션 사이징과 손절 설정이다. 여기서는 둘 다 의도적으로 기본적인 수준에 머문다 — 모든 실무적 장치를 갖춘 완전한 변동성 타겟팅 전략은 4부의 내용이다.

변동성 타겟 포지션 사이징

아이디어는 명목가치가 일정한 포지션이 아니라, 리스크 기여도가 시간에 걸쳐 대략 일정한 포지션을 보유하는 것이다. 항상 같은 달러 규모로 배치한다면, 고변동성 국면에서는 리스크가 부풀어오르고 고요한 국면에서는 쪼그라든다 — 여러분이 원하는 것과 정반대다. 변동성 타겟팅은 이를 뒤집는다 — 손익의 목표 변동성을 고정하고, 예측이 크기를 결정하도록 한다.

목표 연율화 변동성 σtarget\sigma_{\text{target}}(예: 20%)와 예측 연율화 변동성 σ^t\hat\sigma_t에 대해, 포지션 가중치는

wt=σtargetσ^t.w_t = \frac{\sigma_{\text{target}}}{\hat{\sigma}_t}.

예측 변동성이 높으면 축소하고, 낮으면 확대한다. 그것이 메커니즘의 전부다. σ^t\hat\sigma_t예측이므로 — t+1t+1의 수익률이 실현되기 전 시점 tt에 알려져 있다 — 타이밍에 대해 원칙을 지키는 한(함정 섹션에서 더 다룬다) 선견은 없다.

def vol_target_weight(sigma_forecast_annual, sigma_target_annual=0.20,
                      w_max=3.0):
    """Volatility-scaled position weight. Inputs/outputs in decimals.
    w_max caps leverage so a tiny forecast vol can't demand insane size."""
    w = sigma_target_annual / sigma_forecast_annual
    return float(np.clip(w, 0.0, w_max))

sigma_1d   = np.sqrt(res.forecast(horizon=1).variance.iloc[-1, 0]) / 100.0
sigma_ann  = sigma_1d * np.sqrt(365)
w          = vol_target_weight(sigma_ann, sigma_target_annual=0.20)
print(f"Forecast annual vol: {sigma_ann:.1%}  ->  position weight: {w:.2f}x")

이는 제대로 된 자본 배분 규칙의 사촌 격이다. 변동성 타겟팅은 "리스크가 변동성에 따라 얼마나 확장/축소되어야 하는가"에 답하고, Kelly 기준은 "리스크가 엣지에 따라 얼마나 확장/축소되어야 하는가"에 답한다 — 그리고 완전한 사이징 스택에서 둘은 곱해진다 — 크기 \propto 엣지 / 분산. Kelly의 분산 항이 정확히 방금 계산한 GARCH 예측이라는 점에 주목하라. 이것이 살아있는 변동성 모델이 정적인 역사적 추정치보다 Kelly 사이징을 실질적으로 정교하게 만드는 이유다. 만약 여러분의 엣지 추정치 자체가 정량화된 불확실성을 갖고 있다면, conformal prediction은 그에 맞춰 크기를 넓히거나 줄이는 분포무관 방법을 제공하며, 변동성 타겟팅과 깔끔하게 결합된다.

w_max는 선택사항이 아니다. near-IGARCH 영역에서는 조용한 구간이 예측 변동성을 상당히 낮게 밀어넣을 수 있고, σtarget/σ^t\sigma_{\text{target}}/\hat\sigma_t는 서류상으로는 멀쩡하지만 고요함이 깨질 때 파멸적인 레버리지를 요구할 것이다 — 변동성 군집화의 특성상, 고요함은 결국 깨지며 흔히 갑작스럽게 깨진다. 레버리지를 캡핑하는 것은 여러분의 예측이 조건부 평균이지 보증이 아니며, 틀렸을 때의 대가가 비대칭적이라는 사실을 조악하지만 효과적으로 인정하는 것이다. 그 비대칭성 — 폭발한 계좌는 대칭적인 승리로 회복될 수 없다는 것 — 이 정확히 손실 대 이익의 비대칭성이며, 분산만 고려한 규칙이 시사하는 것보다 체계적으로 더 보수적이어야 하는 이유다.

변동성 조정 손절

고정 백분율 손절은 고정 포지션 크기와 같은 병을 앓는다 — 3% 손절은 고요한 시장에서는 헤어트리거이고 격렬한 시장에서는 반올림 오차다. 고변동성 국면에서는 평범한 노이즈에 좋은 포지션이 청산당하게 만들고, 전환기에는 너무 많은 것을 내주게 만든다. 해결책은 손절 폭을 예측 변동성 단위로 설정하는 것이다.

stop distancet=kσ^t(H)\text{stop distance}_t = k \cdot \hat\sigma_t^{(H)}

여기서 σ^t(H)\hat\sigma_t^{(H)}는 예상 보유 지평선 HH에 걸친 예측 변동성(예측 섹션의 집계된 양)이고, kk는 손절이 정상적인 변동 바깥이지만 진짜 불리한 움직임 안쪽에 위치하도록 선택된 배수 — 보통 1.5에서 3 사이다.

def vol_scaled_stop(entry_price, side, sigma_H, k=2.0):
    """
    entry_price : fill price
    side        : +1 long, -1 short
    sigma_H     : forecast volatility over the holding horizon (decimal)
    k           : stop width in vol units
    Returns the stop price.
    """
    stop_frac = k * sigma_H
    return entry_price * (1.0 - side * stop_frac)

var_path = res.forecast(horizon=10, reindex=False).variance.iloc[-1].values / (100.0 ** 2)
sigma_H  = np.sqrt(var_path.sum())

entry = float(px.iloc[-1])
stop  = vol_scaled_stop(entry, side=+1, sigma_H=sigma_H, k=2.0)
print(f"Entry {entry:,.0f}  |  10-day vol {sigma_H:.2%}  |  2-sigma stop {stop:,.0f}")

σ^t(H)\hat\sigma_t^{(H)}가 평평한 역사적 숫자가 아니라 평균회귀하는 기간구조 예측을 사용하기 때문에, 손절은 격동적인 국면으로 진입할 때 자동으로 넓어지고 변동성이 가라앉으면 좁아진다 — 기간구조가 여러분을 위해 적응을 대신 해준다. 크기와 손절 양쪽에 같은 예측이 공급된다는 것은 하나의 특징이다 — 고변동성 국면에서는 동시에 더 적게 보유하면서 포지션에 더 많은 여지를 주고, 이 두 효과가 복합되어 실질적으로 더 낮은 꼬리 리스크를 만든다. 사이징과 손절은 두 개의 독립된 손잡이가 아니라, 하나의 변동성 관점을 투영한 두 가지다.

이것이 1부에서 다루는 응용의 한계다. 실제 전략은 지속적인 재조정에서 오는 거래비용, 예측이 계산되는 시점과 거래가 체결되는 시점의 타이밍, 회전율 통제, 그리고 무엇보다도 정직한 표본외 평가를 다뤄야 한다. 그 모든 것은 4부: 변동성 타겟팅 GARCH 전략에서, 전체를 구축하고 walk-forward 테스트한다.

함정

GARCH는 적합시키기는 쉽지만 스스로를 속이기도 쉽다. 실패 양상은 일관되다.

수익률 스케일링. 위에서 다뤘지만, 가장 흔한 버그 1위이므로 반복할 가치가 있다 — arch는 수익률 × 100으로 적합시키고, 모든 출력값의 스케일을 되돌려야 한다(분산은 1002100^2로, 변동성은 100100으로). 여기서의 조용한 100배 오류는 이후의 모든 사이징 및 손절 계산을 오염시킨다.

적합 과정의 선견 편향. 미묘한 킬러다. 전체 이력에 모델을 적합시킨 다음 같은 이력에 대해 "예측"을 계산하면, 모든 예측은 은밀하게 미래를 이미 본 것이다 — 파라미터가 예측 시점 이후의 데이터를 사용해 추정되었기 때문이다. 표본 내 적합은 훌륭해 보이겠지만 실전 성과는 그것과 전혀 닮지 않을 것이다. 모든 백테스트된 예측은 그 순간에 이용 가능한 데이터만으로 적합된 모델에서 나와야 한다 — 확장 또는 롤링 윈도우로 재적합하고, 한 단계 예측한 후, 앞으로 굴린다. 이는 협상 불가능하며 walk-forward 최적화의 전체 주제다. 표본 내 GARCH와 제대로 된 walk-forward GARCH 사이의 간격은, 데모와 실제 시장과의 접촉에서 살아남는 시스템 사이의 간격이다 — 백테스트-실전 일치성도 함께 참고하라.

예측의 타이밍. 관련되어 있지만 별개의 문제다. t+1t+1일의 예측은 tt일 종가(또는 여러분의 봉이 닫히는 시점)에서 이용 가능한 정보로 계산되어야 하며, 포지션은 실제로 얻을 수 있는 가격에서 체결 가능해야 한다. t+1t+1일의 종가를 이용해 예측을 계산한 다음 t+1t+1일의 시가에서 "거래"하는 것은 결과를 조용히 부풀리는 선견 편향이다.

높은 차수의 과적합. GARCH(1,1)은 거의 항상 충분하다. 표본 내 로그우도를 소폭 밀어올린다는 이유로 GARCH(2,2)나 GARCH(3,1)을 적합시키고 싶은 유혹은 보통 노이즈에 적합시키는 것이다 — 추가 파라미터는 표본외 예측을 거의 개선하지 못하며 종종 경계 근처에서 최적화기를 불안정하게 만든다. 파라미터가 적은 모델을 선호하고, 굳이 차수를 비교해야 한다면 표본 내 AIC가 아니라 walk-forward 분할에서의 표본외 예측 손실로 비교하라. 잔차 진단에서 여전히 문제가 나타난다면, 해결책은 대개 더 나은 혁신 분포비대칭 항(2부)이지 더 높은 차수가 아니다.

구조적 단절이 지속성으로 읽히는 문제. 앞서 언급했듯, 변동성 수준의 영구적인 이동(새로운 시장 레짐, 시장 미시구조의 변화)은 GARCH에 의해 허위로 높은 지속성으로 흡수되어 α+β\alpha+\beta를 1에 가깝게 밀어붙일 수 있다. 만약 여러분의 장기 변동성 추정치가 윈도우마다 불안정해 보인다면, near-IGARCH 점추정치를 신뢰하기보다 구조적 단절을 의심하라. 롤링 재적합과, 적절한 경우 명시적인 레짐 모델이 이를 방지한다.

변동성 예측을 수익률 예측으로 착각하는 것. GARCH는 움직임의 방향이 아니라 크기를 예측한다. 이는 내일의 흔들림이 얼마나 클지를 알려주지, 어느 방향인지는 알려주지 않는다. 이것이 정확히 GARCH의 자연스러운 자리가 신호 생성이 아니라 리스크 관리 — 사이징, 손절, VaR — 인 이유다. 좋은 분산 예측을 엣지로 착각하지 마라.

다음으로 나아갈 곳

GARCH(1,1)은 기초이며, 의도적으로 불완전하다. 이 시리즈는 세 방향으로 이를 확장한다.

  • 비대칭성과 두꺼운 꼬리 — 실제 크립토 변동성은 상승 움직임보다 하락 움직임에 더 크게 반응한다(레버리지 효과). 그리고 가우시안 혁신은 꼬리를 재현할 수 없다. GJR-GARCH, EGARCH, 그리고 Student-t / 왜곡 t-분포 혁신은 2부에서 다룬다.
  • 다변량 변동성 — 크립토 자산 간 상관관계 자체도 시간에 따라 변하며 붕괴 시점에 급등한다. 전체 공분산 행렬을 동적으로 모델링하는 것은 3부: DCC-GARCH이며, 이는 공분산이 동적이 되었을 때 Markowitz 평균-분산CVaR 기반 배분에 직접 연결된다.
  • 완전한 전략 — 사이징, 손절, 비용, 회전율, 그리고 정직한 walk-forward 평가가 4부에서 하나로 합쳐진다.

그리고 GARCH의 주변부 분포가 결합 리스크에 공급되는 지점 — 여기서 다룬 단변량 조건부 분산 모델은 정확히 포트폴리오 VaR/CVaR를 위한 GARCH-EVT-copula 파이프라인의 첫 단계다. 자산별 GARCH 적합에서 표준화된 잔차를 얻으면, 이를 변환하여 copula로 서로 이어붙인다 — 주변부 분포는 GARCH이고, 의존성은 copula다. 꼬리 의존성과 EVT 꼬리 처리를 포함한 그 구성은 크립토 결합 리스크를 위한 copula 모델에서 깊이 있게 다룬다. 이 글은 그 아래에 자리한 단변량 엔진이다.

요약

  • 크립토 수익률은 변동성 군집화, 두꺼운 꼬리, 그리고 수익률 자기상관은 없지만 제곱 수익률에는 강한 자기상관을 보인다. 일정한 변동성을 가정하는 모든 도구 — 단일 σ\sigma를 쓰는 Black-Scholes, 정적 VaR, 고정 백분율 손절 — 는 이 사실들에 대해 잘못 설정되어 있다.
  • GARCH(1,1), σt2=ω+αεt12+βσt12\sigma_t^2 = \omega + \alpha\varepsilon_{t-1}^2 + \beta\sigma_{t-1}^2는 세 개의 파라미터 — 기저값 ω\omega, 충격 반응 α\alpha, 지속성 β\beta — 로 시간에 따라 변하는 조건부 분산을 모델링한다. 이는 기하급수적으로 감쇠하는 기억을 가진 ARCH(\infty)이며, 이것이 고차 ARCH를 능가하는 이유다.
  • 정상성은 α+β<1\alpha+\beta<1을 요구하며, 장기 분산은 ω/(1αβ)\omega/(1-\alpha-\beta), 지속성은 α+β\alpha+\beta, 변동성 반감기는 ln0.5/ln(α+β)\ln 0.5 / \ln(\alpha+\beta)이다. 크립토는 near-IGARCH 영역(α+β0.99\alpha+\beta\approx 0.99)에 위치한다 — 매우 지속적이고, 평균회귀가 느리며, 장기 분산 추정치가 취약하다.
  • 최대우도법으로 추정하라. 가우시안 로그우도는 일단계 밀도들의 합이다. arch_model(r*100, vol="Garch", p=1, q=1)로 적합시켜라. ×100 스케일링을 기억하고 모든 출력값의 스케일을 일관되게 되돌려라.
  • 예측은 기하급수적으로 평균회귀하며 장기 분산을 향해 (α+β)h1(\alpha+\beta)^{h-1} 비율로 수렴한다. 일별 분산 예측을 집계하여 보유 지평선 변동성을 구하라 — 단순한 H\sqrt{H} 규칙이 아니다.
  • 제곱 표준화 잔차에 대한 Ljung-Box와 ARCH-LM 검정으로 검증하라. 이를 통과한다는 것은 군집화가 모델링으로 제거되었음을 확인해주며, 남아있는 두꺼운 꼬리는 2부의 동기가 된다.
  • 적용은 변동성 타겟 사이징(wt=σtarget/σ^tw_t = \sigma_{\text{target}}/\hat\sigma_t, 캡핑됨)과 변동성 조정 손절(kσ^t(H)k\cdot\hat\sigma_t^{(H)})에 이루어진다. 하나의 예측이 둘 다를 이끌기 때문에, 고변동성 국면에서는 더 작은 크기 더 넓은 손절을 동시에 얻는다.
  • 중요한 함정들: 수익률 스케일링, 적합 과정의 선견 편향(과거 데이터에만 적합시키고 항상 walk-forward하라), 예측 타이밍, 과도한 차수, 그리고 분산 예측을 방향 예측으로 결코 착각하지 말 것.

참고문헌:

  • Engle, R. F. (1982). Autoregressive Conditional Heteroscedasticity with Estimates of the Variance of United Kingdom Inflation. Econometrica, 50(4), 987-1007. DOI
  • Bollerslev, T. (1986). Generalized Autoregressive Conditional Heteroskedasticity. Journal of Econometrics, 31(3), 307-327. DOI
  • Mandelbrot, B. (1963). The Variation of Certain Speculative Prices. The Journal of Business, 36(4), 394-419. DOI
  • Nelson, D. B. (1991). Conditional Heteroskedasticity in Asset Returns: A New Approach. Econometrica, 59(2), 347-370. DOI
  • Katsiampa, P. (2017). Volatility estimation for Bitcoin: A comparison of GARCH models. Economics Letters, 158, 3-6. DOI
  • Chu, J., Chan, S., Nadarajah, S., & Osterrieder, J. (2017). GARCH Modelling of Cryptocurrencies. Journal of Risk and Financial Management, 10(4), 17. DOI
  • Sheppard, K. (2023). arch: Autoregressive Conditional Heteroskedasticity (ARCH) and other tools for financial econometrics in Python. GitHub.
blog.disclaimer

MarketMaker.cc Team

퀀트 리서치 및 전략

Telegram에서 토론하기
Newsletter

시장에서 앞서 나가세요

뉴스레터를 구독하여 독점적인 AI 트레이딩 통찰력, 시장 분석 및 플랫폼 업데이트를 받아보세요.

귀하의 개인정보를 존중합니다. 언제든지 구독을 취소할 수 있습니다.