Skip to content

Signal 13 — VIX Term Structure (Carry Vol)

Cảnh báo rủi ro

Short volatility là chiến lược negative-skew, fat-tail short. Như XIV-Velocity Shares blowup 2018-02-05 (mất 96% trong 1 ngày), short vol vô hạn lỗ trong các "vol-mageddon" events. Phải hedge tail bằng OTM puts hoặc dùng position-size rất nhỏ. Không phải retail-grade signal nếu không có risk management chặt.

Thuộc tínhGiá trị
Phân loạiVolatility Carry / Cross-Asset
Khung thời gianDaily
Paper gốcCarr-Wu (2009) — Variance Risk Premiums
Loại dữ liệuVIX futures (VX1, VX2, VX3, VX4)
Hướng giao dịchShort vol khi contango; flat khi backward
CapacityCao (VIX futures liquid)

Ý tưởng (Concept)

VIX là chỉ số biến động ngụ ý 30 ngày trên SPX. VIX futures (VX1=front, VX2=second-month, ...) thường ở contango (~80% time): VX2 > VX1 > VIX spot. Lý do:

  • Insurance premium: investors over-pay để hedge tail → implied > realized.
  • Mean reversion: vol thấp hôm nay → market expect cao hơn trong tương lai.

Khi short một VIX future trong contango và roll, nó decay xuống VIX spot → bạn nhận roll yield dương (vol carry). Trung bình ~10-20% năm pre-cost, nhưng đôi khi sụp -40% trong 1 tuần khi backward đột ngột.

Khi backwardation (VX1 > VX2): thị trường panic, vol curve invert. Đây là tín hiệu stop short vol, đứng ngoài. Một số strategies long vol khi backward sâu (VRP regime switch).

Công thức (Formula)

Slope chính:

slope_1 = (VX2 - VX1) / VX1                # roll yield front
slope_2 = (VX4 - VX1) / VX1                # longer-term slope

Hoặc dùng VVIX-adjusted:

roll_yield = (VX2 - VX1) / VX1 × (30 / days_to_expiry_VX1)

Regime classification:

  • slope_1 > +0.04 (deep contango) → SHORT vol, full size.
  • 0 < slope_1 < +0.04 → SHORT vol, half size.
  • slope_1 < 0 (backward) → FLAT, tránh.
  • slope_1 < -0.05 → optionally LONG vol (mean-revert play).

Cách giao dịch (Entry/Exit Rules)

  • Entry SHORT vol:
    • slope_1 > 4% over 3 consecutive days.
    • SPX trong daily uptrend (filter: SPX > 100-day MA).
    • Sell VX1 hoặc buy SVXY/XIV-equivalent (cẩn thận leverage).
  • Exit SHORT vol:
    • Khi slope_1 < 0 (backward).
    • Khi VIX spot > 22 (vol đã pop, decay không còn đủ premium).
    • Time-based: roll mỗi 21 ngày trước expiry.
  • Stop loss: -2× daily ATR; mandatory hedge bằng OTM puts SPX (mua puts 5% OTM cho 5% notional).
  • Timeframe khuyến nghị: Daily, holding 5-21 days.

Code Python (Python Implementation)

python
import numpy as np
import pandas as pd

def vix_slope(vx1: pd.Series, vx2: pd.Series) -> pd.Series:
    """Front-end VIX slope, ~roll yield proxy."""
    return (vx2 - vx1) / vx1

def vix_regime(slope: pd.Series, vix_spot: pd.Series,
               contango_thresh: float = 0.04,
               vix_cap: float = 22.0) -> pd.Series:
    regime = pd.Series('FLAT', index=slope.index)
    contango_strong = (slope > contango_thresh) & (vix_spot < vix_cap)
    contango_mild = (slope > 0) & (slope <= contango_thresh) & (vix_spot < vix_cap)
    backward = slope < 0
    regime[contango_strong] = 'SHORT_VOL_FULL'
    regime[contango_mild] = 'SHORT_VOL_HALF'
    regime[backward] = 'FLAT'                # or LONG_VOL with caution
    return regime

def carry_signal_pnl(spx_ret: pd.Series, vix_ret: pd.Series,
                     regime: pd.Series, hedge_cost: float = 0.0005) -> pd.Series:
    """Short VIX futures returns ≈ -vix_ret. Add daily hedge cost."""
    sz = pd.Series(0.0, index=regime.index)
    sz[regime == 'SHORT_VOL_FULL'] = 1.0
    sz[regime == 'SHORT_VOL_HALF'] = 0.5
    return sz.shift(1) * (-vix_ret) - sz.shift(1) * hedge_cost

# Example: pull from CBOE settlement files
# vx1, vx2, vix_spot = load_vix_data()
# slope = vix_slope(vx1, vx2)
# regime = vix_regime(slope, vix_spot)

Ưu nhược điểm

Ưu điểm:

  • High Sharpe (~1.5-2.0) trong calm regimes.
  • Premise vững chắc: variance risk premium (Carr-Wu 2009) là hiện tượng kéo dài 30+ năm.
  • Tương quan thấp với equity beta dài hạn (nhưng spike correlation khi crash).

Nhược điểm:

  • Tail risk thảm họa: 2018-02-05 XIV mất 96% trong 1 ngày; 2020-03 ETF inverse-vol mất 70%. Kelly fraction ≤ 0.1.
  • Crowded trade — performance đã giảm so với pre-2010.
  • Phải hedge tail bằng OTM SPX puts, chi phí hedge ăn 30-50% gross premium.
  • Không trực tiếp áp dụng VN30F (VN30 chưa có VIX-style index liquid). Có thể dùng làm cross-asset regime filter.

Powered by dautu.tech