关于 volatility-modeling
volatility-modeling 是面向加密市场波动率分析的 Skill,供交易者和量化分析人员估算、预测并应用波动率。它涵盖多种统计估算方法、波动率锥及 EWMA 和 GARCH 预测脚本。
主要功能
- 01多种历史波动率估算方法
- 02EWMA 与 GARCH 预测
- 03波动率锥构建与解读
- 04波动率状态分类
- 05仓位和止损应用示例
适用场景
- 01比较不同方法计算的实现波动率
- 02预测波动率并制定风险预算
- 03识别高低波动市场状态
- 04依据波动率调整仓位和止损
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ agiprolabs/ claude-trading-skills --skill volatility-modeling安装后在 Claude Code 中输入/volatility-modeling确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/estimators.mdvolatility_cones.mdscripts/estimate_volatility.pyvol_forecast.py详细介绍
波动率建模
波动率——价格波动的幅度——可以说是交易中最重要的单一指标。它决定了仓位规模、止损设置、期权定价和市场状态检测。本技能介绍加密市场中波动率的估算、预测和实际应用。
波动率为何重要
| 用例 | 波动率的用途 |
|---|---|
| 仓位规模 | 按波动率反向调整仓位,使每笔交易承担一致的金额风险 |
| 止损设置 | 基于 ATR 的止损会在高波动率状态下放宽,在低波动率状态下收紧 |
| 策略选择 | 低波动率时适合均值回归;高波动率时适合动量策略 |
| 风险预算 | 波动率目标组合可维持恒定的组合层面风险 |
| 市场状态检测 | 波动率状态变化预示市场动态正在改变 |
| 期权定价 | 隐含波动率与已实现波动率之间的差异会带来交易机会 |
波动率类型
历史波动率(已实现波动率)
根据观察到的历史收益率计算。这是最常见、最直接可测的形式。存在多种估算方法,其统计效率各不相同。
隐含波动率
通过 Black-Scholes 或类似模型从期权价格推导得出。在加密 DeFi 中,由于流动性充足的期权市场较少,因此应用有限;但 Deribit 上提供 BTC/ETH 的隐含波动率。
预测波动率
通过 EWMA 或 GARCH 等模型预测未来波动率。用于前瞻性仓位规模调整和风险预算。
估算方法
1. 收盘价到收盘价(对数收益率标准差)
最简单的估算方法。计算对数收益率的标准差并进行年化。
import numpy as np
log_returns = np.log(closes[1:] / closes[:-1])
vol_daily = np.std(log_returns, ddof=1)
vol_annual = vol_daily * np.sqrt(365) # crypto trades 365 days
- 优点:简单,广为人知。
- 缺点:只使用收盘价,会忽略日内波动区间。
2. Parkinson(最高价-最低价区间)
使用每日最高价与最低价的区间,统计效率约为收盘价到收盘价方法的 5 倍。
hl_ratio = np.log(highs / lows)
vol_parkinson = np.sqrt(np.mean(hl_ratio**2) / (4 * np.log(2))) * np.sqrt(365)
- 优点:效率更高,能捕捉日内波动。
- 缺点:离散采样会造成向下偏差;忽略收盘价到收盘价的跳变。
3. Garman-Klass(OHLC)
效率最高的单日 OHLC 估算方法。
hl = np.log(highs / lows)
co = np.log(closes / opens)
gk = np.mean(0.5 * hl**2 - (2 * np.log(2) - 1) * co**2)
vol_gk = np.sqrt(gk) * np.sqrt(365)
- 优点:在 OHLC 估算方法中效率最高。
- 缺点:假设没有漂移;对开盘跳空敏感。
4. Yang-Zhang
结合隔夜(收盘到开盘)和开盘到收盘两个部分。能妥善处理跳空。对于 24/7 交易的加密货币,其相关性较低,但适用于交易不连续的代币。
5. EWMA(指数加权移动平均)
RiskMetrics 方法——除 λ 之外无需估算其他参数。
lam = 0.94 # RiskMetrics default for daily
ewma_var = np.zeros(len(returns))
ewma_var[0] = returns[0] ** 2
for t in range(1, len(returns)):
ewma_var[t] = lam * ewma_var[t - 1] + (1 - lam) * returns[t - 1] ** 2
vol_ewma = np.sqrt(ewma_var) * np.sqrt(365)
- 日线数据的 λ = 0.94(RiskMetrics)。
- 周线数据的 λ = 0.97。
- λ 越高 → 曲线越平滑,对新信息的反应越慢。
6. GARCH(1,1)
最常用的自回归波动率模型。能捕捉波动率聚集现象。
σ²_t = ω + α · r²_{t-1} + β · σ²_{t-1}
- ω:长期方差权重。
- α:对近期冲击的反应(加密货币通常为 0.05–0.15)。
- β:持续性(加密货币通常为 0.80–0.90)。
- α + β < 1:平稳性约束。
- 长期方差:ω / (1 − α − β)。
通过最大似然法估算。详情请参见 references/estimators.md。
波动率锥
波动率锥展示不同回看窗口下已实现波动率的百分位数分布,揭示当前波动率在历史上处于高位还是低位。
构建方法
- 获取 1 年以上的日线数据。
- 对每个回看窗口(5、10、20、60、120 天):
- 计算滚动已实现波动率。
- 提取百分位数:第 5、25、50、75、95 百分位数。
- 绘制百分位数与窗口长度的关系图,形成“锥形”曲线。
- 在每个窗口上叠加当前已实现波动率。
解读
- 当前波动率 > 第 75 百分位数:历史上处于高位——预期会均值回归。
- 当前波动率 < 第 25 百分位数:历史上处于压缩状态——预期会扩张。
- 锥形曲线在较长窗口处收窄:波动率会在较长时间范围内均值回归。
完整方法和示例请参见 references/volatility_cones.md。
加密货币波动率特征
加密货币的波动率与传统资产有几个重要区别:
| 特征 | 详情 |
|---|---|
| 水平 | 年化波动率通常为 50–150%;TradFi 股票为 15–25% |
| 聚集性 | 很强——高波动日会集中出现 |
| 工作日模式 | 周末波动率通常较低,但周末缺口可能很大 |
| 成交量相关性 | 波动率与成交量呈正相关 |
| 对市场状态的依赖性 | 牛市波动率 ≠ 熊市波动率;两者的区间不同 |
| 均值回归 | 波动率比价格更可靠地均值回归 |
| 尾部风险 | 厚尾——极端波动比正态分布预测的更多 |
按波动率划分市场状态
| 市场状态 | 年化波动率范围 | 特征 |
|---|---|---|
| 低波动 | < 40% | 区间震荡,均值回归策略有效 |
| 正常波动 | 40–80% | 可能出现趋势,适合均衡型策略 |
| 高波动 | 80–120% | 强劲趋势或急剧反转 |
| 危机波动 | > 120% | 连环强平,需减小仓位 |
波动率预测
EWMA 预测
简单且有效。当前 EWMA 方差估计值就是 1 步预测值。多步预测为平坦预测(与 1 步预测相同)。
GARCH 预测
GARCH 会生成方差预测的期限结构:
σ²_{t+h} = V_L + (α + β)^h · (σ²_t − V_L)
其中,V_L = ω / (1 − α − β) 为长期方差。
- 短期预测反映当前状况。
- 长期预测会收敛至长期方差。
- 收敛速度取决于 α + β(持续性)。
参见 scripts/vol_forecast.py,了解可运行的实现。
实际应用
使用波动率确定仓位规模
# Vol-target position sizing
target_vol = 0.02 # 2% daily portfolio vol target
current_vol = 0.05 # 5% daily asset vol (annualized ~95%)
weight = target_vol / current_vol # = 0.40 → 40% allocation
完整集成方案请参见 position-sizing 技能。
基于 ATR 设置止损
atr_14 = talib.ATR(highs, lows, closes, timeperiod=14)
stop_distance = 2.0 * atr_14[-1] # 2x ATR stop
stop_price = entry_price - stop_distance # for longs
根据波动率状态选择策略
vol_percentile = current_vol_percentile(token, window=30)
if vol_percentile < 25:
strategy = "mean_reversion"
elif vol_percentile > 75:
strategy = "momentum_breakout"
else:
strategy = "balanced"
文件
参考资料
| 文件 | 描述 |
|---|---|
references/estimators.md | 所有波动率估计器的完整推导与详情 |
references/volatility_cones.md | 锥形图的构建方法与解读指南 |
脚本
| 文件 | 描述 |
|---|---|
scripts/estimate_volatility.py | 使用多种估计器计算波动率并进行锥形分析 |
scripts/vol_forecast.py | 使用 EWMA 和 GARCH 进行预测,并输出期限结构 |
相关技能
regime-detection— 将波动率作为关键输入,对市场状态进行分类。position-sizing— 按波动率的倒数调整仓位。risk-management— 进行组合层面的波动率目标管理与风险预算分配。pandas-ta— ATR 和布林带是基于波动率的指标。custom-indicators— 构建加密货币专用波动率指标。
依赖项
uv pip install pandas numpy scipy
实时数据的可选依赖:
uv pip install httpx