第三章:风险敞口计算——Delta、Gamma、Vega 的实时计算方法与敞口限额动态设定
做市商这行,说白了就是跟风险打交道。你赚的钱,本质上就是承担了别人不愿意承担的风险,然后收取流动性溢价。但风险这东西,你得能算清楚、看得见,不然哪天爆仓了都不知道怎么死的。
我个人习惯,每天开盘前第一件事,就是看三个核心敞口:Delta、Gamma、Vega。这三个东西,就是做市商的命门。今天咱们就聊聊,怎么实时算它们,怎么动态设限额。
3.1 为什么是这三个?
你可能觉得,期权希腊字母那么多,为啥单拎这三个出来?
Delta 告诉你方向风险——价格涨了你是赚是亏。Gamma 告诉你 Delta 的变化速度——行情剧烈波动时,你的 Delta 会不会瞬间失控。Vega 告诉你波动率风险——市场恐慌或平静时,你的头寸会怎么变。
我遇到过不少交易员,只盯着 Delta 看,觉得 Gamma 和 Vega 是理论家的玩意儿。结果呢?有一次市场突然暴跌,波动率飙升,他的 Vega 敞口直接把他打懵了。嗯,从那以后,他再也不敢忽视 Vega 了。
3.2 Delta 敞口的实时计算
Delta 的计算其实不复杂。对于期权,Delta 就是期权价格对标的资产价格的一阶偏导。但做市商手里通常有几百个合约,你得把它们汇总起来。
我一般这么算:
# 伪代码示例:Delta 敞口实时计算
def calculate_delta_exposure(positions, spot_price):
total_delta = 0.0
for pos in positions:
# pos.delta 是单个合约的 Delta 值
# pos.quantity 是持仓数量(正数多头,负数空头)
# pos.multiplier 是合约乘数
delta_contribution = pos.delta * pos.quantity * pos.multiplier
total_delta += delta_contribution
# 现货或期货头寸的 Delta 就是 1
for spot in spot_positions:
total_delta += spot.quantity * spot.multiplier
return total_delta
这里有个坑:Delta 是随价格变化的。你算出来的是当前价格下的瞬时 Delta。如果价格跳了 1%,你的 Delta 可能已经变了。所以实时计算的关键是——数据要快。
3.3 Gamma 敞口——隐形的炸弹
Gamma 是 Delta 的变化率。Gamma 敞口大的时候,行情稍微一动,你的 Delta 就剧烈变化。这玩意儿,说白了就是杠杆的杠杆。
Gamma 的计算公式:
def calculate_gamma_exposure(positions):
total_gamma = 0.0
for pos in positions:
# Gamma 敞口 = Gamma * 持仓量 * 合约乘数 * 标的资产价格
gamma_contribution = pos.gamma * pos.quantity * pos.multiplier * pos.underlying_price
total_gamma += gamma_contribution
return total_gamma
为什么要乘以标的资产价格?因为 Gamma 的单位是 Delta 的变化量除以价格的变化量。乘以价格后,你得到的是「价格变动 1% 时,Delta 会变化多少」——这个更直观。
我曾经吃过 Gamma 的亏。有一次做市比特币期权,Gamma 敞口堆到了 500 万美金级别。结果半夜一条消息,价格瞬间拉了 3%。我的 Delta 从中性直接变成了巨大多头,等我反应过来,已经亏了六位数。嗯,从那以后,我对 Gamma 的敬畏心就刻在骨子里了。
3.4 Vega 敞口——波动率的幽灵
Vega 衡量的是波动率变化 1% 时,期权价格的变化。很多人觉得 Vega 不重要,因为波动率不像价格那样天天变。但你想过没有?一旦市场出现黑天鹅,波动率可以瞬间翻倍。
Vega 的计算:
def calculate_vega_exposure(positions):
total_vega = 0.0
for pos in positions:
# Vega 敞口 = Vega * 持仓量 * 合约乘数
vega_contribution = pos.vega * pos.quantity * pos.multiplier
total_vega += vega_contribution
return total_vega
Vega 的单位是「波动率每变化 1 个百分点,头寸价值变化多少」。比如你的 Vega 敞口是 10 万,隐含波动率从 30% 涨到 35%,你的头寸就亏 50 万(如果 Vega 是负的)。
我个人习惯,把 Vega 敞口分成两部分看:
- 短期 Vega(1周内到期):这部分波动率变化剧烈,敞口要小
- 长期 Vega(1个月以上):波动率相对稳定,敞口可以大一些
3.5 敞口限额的动态设定
静态限额是给新手用的。真正的做市商,限额必须是动态的。为什么?因为市场条件在变,你的风险承受能力也在变。
我常用的动态限额框架:
| 敞口类型 | 基础限额 | 动态调整因子 | 调整逻辑 |
|---|---|---|---|
| Delta | 总资金的 10% | 波动率因子 | 波动率越高,限额越低 |
| Gamma | 总资金的 3% | 到期时间因子 | 临近到期,限额减半 |
| Vega | 总资金的 8% | 偏度因子 | 偏度异常时,限额收紧 |
动态调整的核心逻辑:
def dynamic_limit(base_limit, adjustment_factors):
# 波动率因子:当前隐含波动率 / 历史平均波动率
vol_factor = current_iv / historical_iv_avg
# 到期时间因子:距离到期天数 / 30
time_factor = max(0.1, days_to_expiry / 30)
# 偏度因子:看涨IV / 看跌IV
skew_factor = max(0.5, min(2.0, call_iv / put_iv))
# 综合调整
adjusted_limit = base_limit / (vol_factor * time_factor * skew_factor)
return min(adjusted_limit, max_absolute_limit)
你想想看,如果市场波动率翻倍了,你还用原来的限额,那不是找死吗?动态调整就是让限额跟着市场走,市场疯的时候你缩,市场稳的时候你放。
3.6 实时监控面板
光有计算方法还不够,你得能实时看到。我自己的监控面板长这样:
# 伪代码:实时监控数据推送
{
"delta_exposure": 125000, # 单位:美金
"gamma_exposure": 45000, # 单位:美金/1%价格变动
"vega_exposure": -32000, # 单位:美金/1%波动率变动
"delta_limit": 500000, # 动态限额
"gamma_limit": 150000,
"vega_limit": 200000,
"utilization": {
"delta": "25%", # 当前使用率
"gamma": "30%",
"vega": "16%"
}
}
我要求系统每 100 毫秒推送一次数据。如果某个敞口超过限额的 80%,系统会发出黄色警告。超过 100%,直接红色警报,自动触发减仓程序。
3.7 本章知识体系
下面这张图,是我自己梳理的做市商风险敞口管理框架。你看一眼,基本就能把握住核心脉络:
这张图的核心逻辑就是:三个敞口分别算,汇总到实时计算引擎,然后根据市场条件动态调整限额,最后通过监控系统执行。环环相扣,少一环都不行。
3.8 避坑总结
最后,我把自己踩过的坑总结一下,你记着点:
- 别只看 Delta:Gamma 和 Vega 才是真正要命的。Delta 亏了你能看到,Gamma 和 Vega 亏了,你往往反应不过来。
- 限额要动态:静态限额就是刻舟求剑。市场变了,你的风险承受能力也得变。
- 数据延迟是杀手:实时计算如果延迟超过 200 毫秒,基本就是废的。我见过有人用 1 秒刷一次的数据做市,结果亏得裤子都没了。
- 别忘了组合效应:Delta、Gamma、Vega 不是独立的。Gamma 大的时候,Delta 变化快,Vega 也会受影响。要综合看。
嗯,这一章的内容就到这儿。风险敞口计算这东西,说起来简单,做起来全是细节。你先把这三个敞口算清楚,限额设好,后面咱们再聊怎么对冲、怎么优化。