3. 库存模型设计:库存状态机、库存阈值设定、库存再平衡触发条件
做市的核心,说白了就是管理库存。你赚的是买卖价差,但手里拿着的资产价格会波动。库存管理不好,赚的那点价差,一次行情波动就全吐回去了。
我个人习惯把库存管理看作一个「三件套」:状态机告诉你当前库存处于什么阶段,阈值告诉你什么时候该紧张,再平衡触发条件告诉你具体该怎么做。这三者缺一不可。
3.1 库存状态机:从舒适到危险的四个阶段
我刚开始做做市的时候,库存管理就是盯着一个数字看——库存量。后来发现这远远不够。库存量本身没有意义,你得知道它相对于你的做市能力处于什么水平。
所以我设计了一个四阶段状态机:
| 状态 | 名称 | 含义 | 行为 |
|---|---|---|---|
| S0 | 舒适区 | 库存量在目标范围内 | 正常做市,不做特殊处理 |
| S1 | 警戒区 | 库存偏离目标,但可控 | 调整报价偏移,引导成交方向 |
| S2 | 危险区 | 库存严重偏离 | 启动对冲,减少做市规模 |
| S3 | 极限区 | 库存接近风控上限 | 暂停做市,强制平仓 |
状态之间的转换不是随意的。我设定了明确的阈值边界,并且每个状态都有对应的退出条件。举个例子,从S0进入S1,可能是库存偏离目标值超过20%;但从S1回到S0,需要库存回到偏离10%以内。这叫「迟滞设计」,防止状态频繁抖动。
核心原则:状态机一定要有迟滞。没有迟滞的状态机,在阈值附近会来回跳,导致报价频繁调整,反而增加交易成本。
3.2 库存阈值设定:不是拍脑袋算出来的
阈值怎么定?很多人直接拍一个百分比,比如「库存不能超过总资金的10%」。这种做法太粗糙了。
我建议从三个维度来算:
- 流动性维度:你做的这个品种,市场深度怎么样?如果市场深度只有100个BTC,你库存设200个BTC,遇到行情根本跑不掉。我一般取过去24小时平均深度的1/3作为库存上限。
- 波动率维度:波动率越高,库存风险越大。我用ATR(平均真实波幅)来调整阈值。波动率翻倍,库存上限减半。这个逻辑很直观——行情越颠簸,你越要轻仓。
- 资金维度:这是底线。库存占用的保证金不能超过总资金的某个比例。我个人习惯是30%,超过这个数,不管什么情况都要减仓。
这三个维度取最小值,就是你的库存上限。举个例子:
# 伪代码示例
def calc_inventory_limit(market_depth, atr, total_capital):
limit_by_depth = market_depth * 0.33
limit_by_volatility = base_limit * (base_atr / atr)
limit_by_capital = total_capital * 0.3
return min(limit_by_depth, limit_by_volatility, limit_by_capital)
我的经验:阈值不是一成不变的。市场环境变了,阈值也要跟着变。我每周会重新计算一次阈值参数,遇到重大行情事件(比如美联储议息),会临时收紧阈值。
3.3 库存再平衡触发条件:什么时候动手?
状态机告诉你「该做什么」,再平衡触发条件告诉你「什么时候做」。这两者配合起来,才能形成完整的库存管理闭环。
我设计了三种触发模式:
- 阈值触发:库存量超过预设阈值,立即触发再平衡。这是最基础的触发方式。比如库存偏离目标值超过50%,直接启动对冲。
- 时间触发:每隔固定时间检查一次库存状态。我一般设5分钟为一个检查周期。为什么要有时间触发?因为有些品种流动性差,阈值触发可能等不到合适的成交机会,时间触发能保证你至少会去尝试。
- 事件触发:市场出现重大变化时触发。比如价格突破某个关键位,或者波动率突然飙升。这种触发方式需要结合行情监控模块。
三种触发模式是「或」的关系——任何一个条件满足,都会触发再平衡逻辑。
避坑指南:我曾经在某个项目里只用了阈值触发,结果遇到流动性枯竭,阈值触发了但根本成交不了。后来加了时间触发,至少能保证每隔几分钟尝试一次,虽然成交价格可能差一点,但总比一直扛着风险强。
3.4 再平衡的具体执行策略
触发再平衡之后,具体怎么操作?我总结了三种策略:
- 激进策略:直接市价单平掉多余库存。优点是快,缺点是滑点大。适合极限区使用。
- 温和策略:调整报价偏移,让做市策略自然消化库存。比如你库存多了,就把卖报价调低一点,买报价调高一点,这样更容易卖出,更难买入。适合警戒区使用。
- 对冲策略:用相关品种做对冲。比如你BTC库存多了,可以做空BTC期货来对冲。这种策略适合不想直接平仓的情况。
我个人习惯是:警戒区用温和策略,危险区用对冲策略,极限区用激进策略。这个优先级不能乱。
3.5 库存模型的核心逻辑图
下面这张图展示了整个库存模型的工作流程:
这张图把整个流程串起来了。从市场数据输入开始,经过阈值计算、状态判断、触发条件检查,最后到执行策略。每一步都是环环相扣的。
总结一下:库存模型不是孤立存在的。它需要和报价引擎、风控模块、对冲模块紧密配合。状态机是大脑,阈值是神经末梢,触发条件是肌肉——三者协同,才能让做市引擎稳定运行。
最后说一句:库存管理没有银弹。不同品种、不同市场环境,参数都要调。我见过有人把一套参数用了半年,结果市场结构变了,亏得一塌糊涂。记住,做市是动态博弈,库存模型也要动态调整。