Skip to content

Generalized Autoregressive Conditional Heteroskedasticity — Mô Hình GARCH

Tác giả: Tim Bollerslev (1986) Nguồn: Journal of Econometrics, Vol. 31, No. 3 Tag: mới:2026-05-16 #volatility #garch #time-series

Nội dung chính (Core Concept)

Bollerslev tổng quát hóa mô hình ARCH của Engle (1982) bằng cách thêm lag của chính variance. Trong khi ARCH(q) chỉ phụ thuộc vào q shocks quá khứ — đòi hỏi q lớn để fit thực nghiệm — GARCH(p,q) ngắn gọn hơn nhiều, thường chỉ cần GARCH(1,1):

σ²_t = ω + α · ε²_{t-1} + β · σ²_{t-1}

Trong đó:

  • ε_{t-1}: shock (residual) ở thời điểm trước.
  • σ²_{t-1}: variance dự báo trước đó.
  • ω, α, β > 0; điều kiện stationarity: α + β < 1.

Trên thực tế, α + β thường ≈ 0.95-0.99 trên equity returns — nghĩa là biến động có tính dai dẳng cao (persistence), một cú shock lớn hôm nay sẽ duy trì high volatility nhiều ngày sau. Unconditional variance = ω / (1 - α - β).

Mô hình GARCH(1,1) thường vượt trội RiskMetrics EWMA và simple historical vol trên dự báo 1-30 ngày. Mở rộng: EGARCH (Nelson 1991, asymmetric leverage effect), GJR-GARCH (Glosten-Jagannathan-Runkle 1993), TGARCH, DCC-GARCH (multivariate, Engle 2002).

Ý tưởng chính cho giao dịch (Key Trading Insight)

GARCH là công cụ chuẩn để forecast volatility 1-30 ngày. Ứng dụng cốt lõi:

  1. Position sizing: cầm position size = target_vol / forecast_vol. Khi GARCH dự báo vol cao, giảm position; vol thấp, tăng position. Giữ ex-ante daily P&L volatility constant.
  2. Option pricing: Black-Scholes giả định vol constant — sai. Dùng GARCH forecast σ thay vào IV để price options thực tế hơn.
  3. VaR: Compute 1-day 95% VaR = 1.645 × σ_t+1 (GARCH forecast) × position size.
  4. Vol arbitrage: Khi IV thị trường > GARCH forecast → sell vol (short option, vol target hedge); khi IV < GARCH → buy vol.

Ứng dụng trên VN30F

VN30F có volatility clustering rõ rệt (Cont 2001 stylized fact). GARCH(1,1) fit tốt trên daily returns. Use cases:

  1. Position-sizing layer cho mọi chiến lược: Tính σ_t+1 mỗi ngày từ GARCH; scale lot size = 0.5% NAV / (σ_t+1 × 100k × VN30_price). Khi VN-Index entered high-vol regime (Q1/2020 COVID, Q4/2022 SCB), GARCH tăng forecast → tự động giảm exposure trước khi drawdown.
  2. Regime filter: Define regime = high_vol if σ_GARCH > median(σ_GARCH, 252d). Tắt momentum strategy trong high-vol regime (momentum crashes), bật mean-reversion strategy.
  3. VN30 options pricing: Khi VN30 options ra mắt rộng rãi, dùng GARCH forecast σ làm benchmark cho IV; nếu IV cao hơn 20% → sell straddle vol-target.

Code minh họa (Python)

python
import numpy as np
import pandas as pd
from arch import arch_model  # pip install arch

def fit_garch_11(returns: pd.Series):
    """
    returns: pd.Series of log-returns (đã nhân 100 cho convergence tốt hơn)
    """
    r = returns.dropna() * 100
    model = arch_model(r, vol='Garch', p=1, q=1, mean='Zero', dist='Normal')
    res = model.fit(disp='off')
    return res

def forecast_next_vol(garch_result, horizon=1):
    """Trả về dự báo σ (không phải σ²) cho `horizon` bước tới."""
    f = garch_result.forecast(horizon=horizon, reindex=False)
    variance = f.variance.values[-1]
    sigma = np.sqrt(variance)
    return sigma / 100  # rescale back

def vol_targeted_size(forecast_sigma, target_annual_vol=0.10, asset_price=1000,
                       contract_multiplier=100_000, nav=1_000_000_000):
    """
    target_annual_vol: 10% NAV vol mục tiêu
    asset_price: giá VN30 hiện tại (vd. 1320)
    contract_multiplier: 100,000 cho VN30F
    """
    daily_vol_target = target_annual_vol / np.sqrt(252)
    # P&L vol per 1 contract = forecast_sigma * asset_price * contract_multiplier
    pnl_vol_per_contract = forecast_sigma * asset_price * contract_multiplier
    target_pnl_vol = nav * daily_vol_target
    n_contracts = target_pnl_vol / pnl_vol_per_contract
    return int(np.floor(n_contracts))

# Ví dụ pipeline
returns = pd.read_csv('vn30f_daily.csv', parse_dates=['date'], index_col='date')['log_return']
res = fit_garch_11(returns)
sigma_next = forecast_next_vol(res, horizon=1)[0]
n_contracts = vol_targeted_size(sigma_next, asset_price=1320)
print(f"σ tomorrow: {sigma_next:.4f}, suggested size: {n_contracts} lots")

Tài liệu tham khảo

  • Bollerslev, T. (1986). Generalized autoregressive conditional heteroskedasticity. Journal of Econometrics, 31(3), 307-327.
  • Engle, R. F. (1982). Autoregressive conditional heteroscedasticity. Econometrica, 50(4).
  • Nelson, D. B. (1991). Conditional heteroskedasticity in asset returns: A new approach. Econometrica, 59(2).

Powered by dautu.tech