做市商在期权上赚的到底是什么钱?答案藏在一个合成公式里。对某个合约,做市商挂出的买价 $b$ 和卖价 $a$ 不是拍脑袋,而是:
$$ b = C - \delta_{inv}, \qquad a = C + \delta_{inv} $$
其中 $C$ 是理论价(mid),$\delta_{inv}$ 是价差半宽。再加一项容易被忽视的调整:
$$ b = C - \delta_{inv} + \Delta z \cdot \gamma, \qquad a = C + \delta_{inv} + \Delta z \cdot \gamma $$
$\Delta z$ 是库存偏差(正号代表多头过多),$\gamma$ 是库存惩罚系数。三项各自解决一个问题:理论价解决"这个合约值多少钱",价差半宽解决"这一单要赚多少才够覆盖对冲成本",库存偏差解决"我现在仓位往哪边歪了,报价怎么引导对手方帮我平回来"。本篇按这个顺序拆。
理论价:从曲面到单合约
理论价的输入是标的现价 $S$、行权价 $K$、剩余期限 $T$ 和波动率 $\sigma$。波动率不是拍一个数,而是从做市商自己维护的波动率曲面(《波动率曲面》篇)上取插值:
$$ C = BS(S, K, T, r, \sigma_{impl}(K, T)) $$
工程上有两个实时性要求:一是曲面刷新频率——标的价格每动一次,同一行权价合约的 $\sigma_{impl}$ 通过曲面的 sticky-strike/sticky-delta 规则联动(曲面是 $\sigma(K)$ 或 $\sigma(\Delta)$ 的函数,标的价格动时插值坐标跟着动),理论价跟着重算;二是计算延迟预算——全合约重算一遍 BS 模型通常是毫秒级,但义务要求每个合约的双边报价持续在场,标的剧烈波动时全部合约的理论价每秒可能刷新几十次,引擎要做增量计算:只有 moneyness 变化超过阈值的合约才触发重估。
理论价本身不带观点。做市商允许在曲面上叠一个小的主观偏移(vol overlay),比如某个行权价近期成交持续在曲面之上,做市商会把该档 $\sigma$ 上调一点——但 overlay 要有幅度上限和审批留痕,因为理论价偏移直接改变报价,等于在报价环节引入方向性观点,和库存偏差项的职能会混淆。
价差半宽:对冲成本的定价
价差半宽的底线是要覆盖这一单对冲的期望成本。简化模型:
$$ \delta_{inv} \ge \text{手续费} + |\Delta| \cdot \text{对冲滑点} + z \cdot \sigma_{ hedge} \cdot \sqrt{\Delta t} + \text{风险溢价} $$
四项分别是:成交手续费、Delta 对冲的滑点成本(《Delta 对冲的执行》篇展开)、在下次对冲之前标的波动带来的gamma 敞口($z$ 是置信倍数,$\sqrt{\Delta t}$ 是未对冲时长)、以及做市商自己的风险溢价(资本占用、模型风险)。深度虚值期权 $|\Delta|$ 小,但占比最大的是流动性溢价:这些合约成交稀少,报价挂出去可能很久才成交,价格风险靠更宽的价差补偿。
价差还受义务约束的上限压着(《期权做市商制度与义务》篇的分档价差上限):$\delta_{inv} \le S_{max}(P)/2$。两个约束取交集:$[\max(\text{成本下限}, \cdot),\ S_{max}/2]$。极端情形下成本下限超过义务上限——比如标的开盘跳空后波动率暴涨——引擎的合法动作是缩小报价数量或申请豁免,而不是挂出亏损报价履行义务。义务参数和成本参数在同一个配置界面管理,就是要让这层张力显式可见。
库存偏差:报价作为对冲工具
做市商做多期权空头做多了,需要的是对手方来把期权买走——办法是把买卖报价同时往下压一点(mid 整体偏移 $-\Delta z \cdot \gamma$),让自己的卖价在市场上显得便宜、买价显得没吸引力。这就是库存偏差的符号约定:多头过多($\Delta z > 0$)时报价下移,吸引卖出成交。
$\gamma$ 的取值是风险管理的直接表达。设当前组合的净 Delta 敞口(期权 Delta + 已对冲现货头寸的残差)为 $E$,库存惩罚的一种形式是:
$$ \gamma = \kappa \cdot \frac{|E|}{E_{limit}} \cdot \text{sgn}(E) $$
$E_{limit}$ 是 Delta 敞口限额,$\kappa$ 决定偏移力度。敞口越大,报价偏移越激进。这项机制把报价引擎和风险系统耦合成闭环:风控的实时敞口计算输出 $E$,报价引擎按周期(通常 500ms–2s)消费一次。延迟太大的话,行情剧烈时库存偏差跟不上敞口变化,报价引导就失去了意义——这是报价引擎对风控系统延迟最敏感的一个消费点。
落地时的三个坑
第一个是报价刷屏。理论价每次刷新都撤旧单挂新单,全合约一起动时申报流量会打到柜台流控上限(《CTP 的报单流与回报流》篇的流量控制细节同样适用),甚至被交易所判异常交易。节流策略是设定最小变动幅度:新报价和旧报价的价差比例低于阈值就不动。
第二个是理论价和市场的互相依赖。报价引擎消费的曲面来自自己的成交和行情,而自己的报价又是市场的组成部分——曲面和报价有自指性。工程上的处理是:曲面构建时剔除自己报价的影响(用自己的成交量加权价而不是自己的报价价),否则报价偏移会被曲线吸收,形成正反馈。
第三个是参数变更的灰度。半宽系数、库存惩罚系数这类参数,直接改全量等于一次性调整所有合约的报价行为。改成按合约组灰度、可一键回滚,和《风控参数的热更新》篇的原则一致。
报价引擎的全部逻辑就是那条合成公式,但把三个项各自做到位、闭环跑起来,是低延迟工程和风险管理工程的双重考题。