mcpField
V
volatility-modeling

volatility-modeling

github.com/agiprolabs数据与数据库495506 次安装8 周前更新
代码仓库

关于 volatility-modeling

volatility-modeling 是面向加密市场波动率分析的 Skill,供交易者和量化分析人员估算、预测并应用波动率。它涵盖多种统计估算方法、波动率锥及 EWMA 和 GARCH 预测脚本。

主要功能

  1. 01多种历史波动率估算方法
  2. 02EWMA 与 GARCH 预测
  3. 03波动率锥构建与解读
  4. 04波动率状态分类
  5. 05仓位和止损应用示例

适用场景

  1. 01比较不同方法计算的实现波动率
  2. 02预测波动率并制定风险预算
  3. 03识别高低波动市场状态
  4. 04依据波动率调整仓位和止损

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/agiprolabs/claude-trading-skills --skill volatility-modeling

安装后在 Claude Code 中输入/volatility-modeling确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
estimators.md
volatility_cones.md
scripts/
estimate_volatility.py
vol_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. 获取 1 年以上的日线数据。
  2. 对每个回看窗口(5、10、20、60、120 天):
    • 计算滚动已实现波动率。
    • 提取百分位数:第 5、25、50、75、95 百分位数。
  3. 绘制百分位数与窗口长度的关系图,形成“锥形”曲线。
  4. 在每个窗口上叠加当前已实现波动率。
解读
  • 当前波动率 > 第 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

评论

支持 Markdown