第四章:库存风险管理
做市商这行,说白了就是赚买卖价差的钱。但有个问题你早晚得面对——库存。
我刚开始做高频做市那会儿,总觉得策略赚钱就行,库存嘛,随它去。结果有一次,某个品种突然跳水,我手里攒了一大堆多单,账面浮亏直接把我整懵了。嗯,从那以后,我再也不敢忽视库存风险了。
今天咱们就聊聊库存风险管理的几个核心问题:Delta、Gamma、Vega暴露怎么算,库存均值回归模型怎么搭,还有库存上限和强制平仓的逻辑怎么设计。
4.1 库存的希腊字母暴露
做市商手里拿着现货或者期货,本质上就是一个持仓组合。这个组合对市场价格的敏感度,得用希腊字母来量化。
4.1.1 Delta暴露
Delta衡量的是持仓价值对价格变动的敏感度。说白了,价格涨1块钱,你的库存值多少钱?
对于现货来说,Delta就是1。你手里有100手螺纹钢,Delta就是100。但如果你做的是期权做市,Delta就没那么简单了。
核心公式:
库存Delta = 持仓数量 × 合约乘数 × Delta系数
对于期货/现货:Delta系数 = 1
对于期权:Delta系数 = N(d1)(Black-Scholes模型)
我个人的习惯是,把Delta暴露换算成等价的现货头寸。比如你持有10手看涨期权,Delta是0.6,那就相当于6手现货。这样看风险更直观。
4.1.2 Gamma暴露
Gamma是Delta的变化率。价格动一下,Delta会怎么变?
Gamma大的时候,你的Delta暴露会剧烈变化。我在做股指期权做市时遇到过这种情况:市场一波动,Gamma直接让Delta从正变负,仓位方向瞬间反转。那感觉,就像开车时方向盘突然自己转了一样。
注意:Gamma暴露在临近到期时会被放大。尤其是平值期权,Gamma会变得非常大。这时候你的库存风险会急剧上升。
4.1.3 Vega暴露
Vega衡量的是波动率变化对持仓价值的影响。做市商最怕什么?就是波动率突然飙升。
我记得有一次,某个品种出了个意外公告,隐含波动率从15%直接跳到30%。我手里有一堆负Vega的期权头寸,那叫一个惨。所以我现在做策略,一定会把Vega暴露控制在总资金的某个比例以内。
| 希腊字母 | 含义 | 做市商关注点 |
|---|---|---|
| Delta | 价格敏感度 | 方向性风险,需对冲 |
| Gamma | Delta变化率 | 非线性风险,需动态调整 |
| Vega | 波动率敏感度 | 波动率突变风险 |
4.2 库存均值回归模型
做市商的库存管理,核心思路是什么?是让库存围绕一个目标水平波动。这个目标水平通常是0,也就是中性库存。
但现实中,你不可能一直保持0库存。因为你要提供流动性,就得接单子。接了单子,库存就会偏离。这时候就需要一个模型来指导你什么时候该把库存调回来。
4.2.1 均值回归的基本逻辑
库存均值回归模型,说白了就是:库存偏离目标越远,你调整的力度就越大。
我常用的模型是这样的:
# 库存均值回归模型示例
def inventory_adjustment(current_inventory, target_inventory=0, max_inventory=100):
"""
计算报价调整系数
"""
deviation = current_inventory - target_inventory
# 偏离程度归一化
deviation_ratio = deviation / max_inventory
# 调整系数:偏离越大,调整越激进
adjustment = -deviation_ratio * 0.5
# 限制调整幅度
adjustment = max(min(adjustment, 0.1), -0.1)
return adjustment
这个adjustment会用来调整你的报价。库存为正(多单多),就压低买价、抬高卖价,鼓励别人买你的货。库存为负(空单多),就反过来。
4.2.2 动态目标库存
有些时候,目标库存不一定是0。比如你判断市场要涨,可以适当持有一些多单。这就是所谓的「方向性做市」。
我个人建议,除非你有很强的方向判断能力,否则还是老老实实把目标库存设成0。方向性做市,说白了就是在赌方向。做市商的核心能力是赚价差,不是赌方向。
经验之谈:我见过很多做市商,一开始做均值回归做得挺好,后来想赚方向的钱,结果把做市的利润全赔进去了。记住:做市和投机是两码事。
4.3 库存上限与强制平仓
光有均值回归还不够。万一市场出现极端行情,均值回归模型可能来不及反应。这时候就需要硬性的风控措施。
4.3.1 库存上限
库存上限,就是给持仓量设一个天花板。超过这个数,系统必须强制减仓。
这个上限怎么设?我一般用两个维度:
- 绝对上限:比如最多持有1000手。这是硬约束,谁都不能突破。
- 动态上限:根据市场波动率调整。波动率大的时候,上限降低;波动率小的时候,上限可以放宽。
举个例子:
# 动态库存上限计算
def dynamic_inventory_limit(base_limit, volatility, volatility_threshold=0.2):
"""
根据波动率调整库存上限
"""
if volatility > volatility_threshold:
# 高波动时,降低上限
scale_factor = volatility_threshold / volatility
return int(base_limit * scale_factor)
else:
return base_limit
4.3.2 强制平仓逻辑
强制平仓,是最后一道防线。当库存超过上限,或者亏损超过某个阈值,系统必须自动平仓。
我设计强制平仓逻辑时,会考虑几个优先级:
- 先平亏损最大的头寸——减少继续亏损的风险
- 再平流动性最好的合约——确保能快速成交
- 最后平非主力合约——这些合约流动性差,容易滑点
血的教训:我曾经设计过一个强制平仓逻辑,结果在极端行情下,系统同时平仓多个合约,导致市场冲击过大,反而亏得更多。后来我加了「分批平仓」和「限价单」的逻辑,才解决了这个问题。
4.4 知识体系总览
下面这张图,把库存风险管理的核心逻辑串起来了:
这张图把咱们今天讲的内容串起来了。从左到右,从量化风险到动态调整,再到硬约束兜底,三层防线缺一不可。
4.5 实战中的几个坑
最后,分享几个我踩过的坑:
- 别把库存上限设得太死——市场流动性好的时候,适当放宽上限可以提高收益。我一般会根据历史波动率动态调整。
- 强制平仓一定要有延迟——瞬间平仓容易造成滑点。我习惯加一个50毫秒的延迟,让市场消化一下。
- 别忘了监控Vega——很多做市商只盯着Delta和Gamma,结果被波动率突变搞死。Vega暴露一定要设上限。
一个小技巧:我每天开盘前会跑一遍压力测试,模拟极端行情下库存风险的变化。这个习惯帮我躲过了好几次黑天鹅事件。
库存风险管理,说白了就是三个字:控得住。控得住Delta,控得住Gamma,控得住Vega,控得住仓位上限。做到这几点,你的做市策略就稳了一半。