第三章 做市算法设计原则:流动性提供、价差管理、库存风险控制、订单簿动态平衡
做市算法设计,说白了就是一套让机器替你赚钱的规则。我做了这么多年量化,见过太多人一上来就写代码,结果亏得底裤都不剩。为什么?因为没搞懂底层逻辑。
今天咱们聊聊做市算法的四大支柱。这四个东西,你少一个,系统就瘸一条腿。
3.1 流动性提供:做市商的立身之本
流动性是什么?就是你挂单之后,别人能快速成交。我见过最蠢的做法是什么?有人把单子挂在离市价十万八千里的位置,美其名曰「做市」。那叫挂单,不叫做市。
真正的流动性提供,要做到两点:
- 深度够:每个价位上要有足够的量。别挂1张合约,那跟没挂一样。
- 宽度合理:你的挂单要覆盖买卖两侧,而且价差不能太离谱。
我在项目中遇到过一个问题:某次做市CDS指数,流动性极差。我挂10手买盘,结果市场直接砸穿我的单子,瞬间亏了20万。后来我学乖了——流动性越差,你的单子就要越小,而且要动态调整。
核心原则:流动性提供不是「挂单就行」,而是「在正确的位置挂正确的量」。
3.2 价差管理:赚的就是这个差价
做市商赚什么?赚买卖价差。但价差不是你想定多少就定多少。
价差管理要考虑三个因素:
- 市场波动率:波动越大,价差越宽。为什么?因为你的风险变大了。
- 库存水平:你手里存货多,价差就要收窄,赶紧出货。
- 竞争情况:隔壁做市商在跟你抢单,你价差太宽就没人理你。
我习惯用一个简单的公式:
价差 = 基础价差 × (1 + α × 波动率因子) × (1 - β × 库存因子)
α和β是调参。α越大,你对波动越敏感;β越大,你清库存的意愿越强。
避坑指南:我曾经把β设得太大,结果库存一多,价差几乎为零,被高频交易者疯狂收割。后来我加了上下限,价差最小不能低于0.5个tick。
3.3 库存风险控制:别把自己做死
做市商最怕什么?不是亏钱,是爆仓。你想想看,你一边买一边卖,本来风险对冲得好好的。突然市场单边暴跌,你手里全是多头仓位——完蛋。
库存风险控制的核心就一句话:别让净头寸太大。
具体怎么做?我总结了三板斧:
| 方法 | 说明 | 适用场景 |
|---|---|---|
| 动态价差调整 | 库存偏多时,收窄卖盘价差,放宽买盘价差 | 所有场景 |
| 对冲交易 | 用期货或ETF对冲信用风险 | 流动性好的市场 |
| 暂停做市 | 库存超过阈值时,停止单边报价 | 极端行情 |
我记得有一次做市CDX IG,市场突然跳空。我的库存瞬间变成净多头500万。当时我脑子嗡了一下——但系统自动触发了暂停机制,所有买单撤掉,只留卖单。半小时后市场反弹,我反而赚了一笔。
警告:不要迷信对冲。信用衍生品的基差风险很大,你以为对冲了,其实没完全对冲。我吃过这个亏。
3.4 订单簿动态平衡:让系统自己跑起来
前面三点讲的是「做什么」,订单簿动态平衡讲的是「怎么做」。说白了,就是让你的系统自动调整挂单,保持最优状态。
动态平衡包括:
- 价格更新:市场变了,你的挂单价也要变。别傻傻地挂在那里等人来吃。
- 数量调整:某个价位成交太多,就要补单或者撤单。
- 层级管理:不止挂一个价位,要挂多层。比如买盘挂5档,卖盘挂5档。
我习惯用「水位线」的概念来管理订单簿。每个价位设一个目标水位,低于水位就补单,高于水位就撤单。这样订单簿始终是满的。
def rebalance_orderbook(symbol, target_depth=5):
for level in range(1, target_depth+1):
bid_price = get_bid_price(symbol, level)
ask_price = get_ask_price(symbol, level)
bid_qty = get_bid_qty(symbol, level)
ask_qty = get_ask_qty(symbol, level)
if bid_qty < MIN_QTY:
place_bid_order(symbol, bid_price, TARGET_QTY)
if ask_qty < MIN_QTY:
place_ask_order(symbol, ask_price, TARGET_QTY)
这段代码看着简单,但实际跑起来坑很多。比如你补单太频繁,会被交易所当成垃圾流量。我建议加个冷却时间,比如每100毫秒才允许补一次单。
3.5 四大原则的关系
这四个原则不是孤立的。它们互相影响:
- 流动性提供决定了你的订单簿长什么样
- 价差管理决定了你赚多少钱
- 库存风险控制决定了你能不能活下来
- 订单簿动态平衡把前面三个串起来
我画了一张图,帮你理清关系:
你看,流动性提供和价差管理决定了你的「进攻」策略,库存风险控制是「防守」,订单簿动态平衡则是「调度」。缺一个,你的系统就不完整。
我的建议:刚开始做的时候,先把流动性提供和价差管理做好。库存风险控制可以简单点,比如设个硬止损。等系统跑顺了,再慢慢加动态平衡的逻辑。
嗯,今天就聊到这儿。这四个原则你记住了,后面讲具体算法的时候,你会发现所有东西都是围绕它们展开的。