第四章:库存风险管理

做市商这行,说白了就是赚买卖价差的钱。但有个问题你早晚得面对——库存。

我刚开始做高频做市那会儿,总觉得策略赚钱就行,库存嘛,随它去。结果有一次,某个品种突然跳水,我手里攒了一大堆多单,账面浮亏直接把我整懵了。嗯,从那以后,我再也不敢忽视库存风险了。

今天咱们就聊聊库存风险管理的几个核心问题: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 强制平仓逻辑

强制平仓,是最后一道防线。当库存超过上限,或者亏损超过某个阈值,系统必须自动平仓。

我设计强制平仓逻辑时,会考虑几个优先级:

  1. 先平亏损最大的头寸——减少继续亏损的风险
  2. 再平流动性最好的合约——确保能快速成交
  3. 最后平非主力合约——这些合约流动性差,容易滑点

血的教训:我曾经设计过一个强制平仓逻辑,结果在极端行情下,系统同时平仓多个合约,导致市场冲击过大,反而亏得更多。后来我加了「分批平仓」和「限价单」的逻辑,才解决了这个问题。

4.4 知识体系总览

下面这张图,把库存风险管理的核心逻辑串起来了:

库存风险管理知识体系 库存风险管理 希腊字母暴露 Delta / Gamma / Vega 库存均值回归模型 偏离度 → 报价调整系数 库存上限与强制平仓 硬约束 / 自动减仓 Delta对冲 Gamma管理 Vega控制 偏离度计算 报价调整 目标库存 绝对上限 动态上限 强制平仓 核心目标:控制风险,稳定盈利 希腊字母量化风险 → 均值回归动态调整 → 硬约束兜底

这张图把咱们今天讲的内容串起来了。从左到右,从量化风险到动态调整,再到硬约束兜底,三层防线缺一不可。

4.5 实战中的几个坑

最后,分享几个我踩过的坑:

  • 别把库存上限设得太死——市场流动性好的时候,适当放宽上限可以提高收益。我一般会根据历史波动率动态调整。
  • 强制平仓一定要有延迟——瞬间平仓容易造成滑点。我习惯加一个50毫秒的延迟,让市场消化一下。
  • 别忘了监控Vega——很多做市商只盯着Delta和Gamma,结果被波动率突变搞死。Vega暴露一定要设上限。

一个小技巧:我每天开盘前会跑一遍压力测试,模拟极端行情下库存风险的变化。这个习惯帮我躲过了好几次黑天鹅事件。

库存风险管理,说白了就是三个字:控得住。控得住Delta,控得住Gamma,控得住Vega,控得住仓位上限。做到这几点,你的做市策略就稳了一半。


专注资料整理