4、做市商策略基础:被动做市与主动做市、报价策略、库存管理策略、风险控制策略
做市商策略,说白了就是一套「怎么赚钱、怎么不亏钱」的规则。我见过不少新手,一上来就盯着价差收益,结果被一波行情带走。嗯,今天咱们把这四个核心模块拆开揉碎了讲。
4.1 被动做市 vs 主动做市
先搞清楚一个基本问题:你的订单是「等着别人来吃」,还是「主动去吃别人」?
4.1.1 被动做市(Passive Market Making)
被动做市,就是你在盘口挂单,等对手方来成交。你赚的是买卖价差(Bid-Ask Spread)。
核心逻辑:
- 挂买单在 Bid 侧,挂卖单在 Ask 侧
- 等待流动性提供者(也就是对手方)吃掉你的订单
- 每成交一次,你赚一个 Spread
关键指标: 成交率(Fill Rate)。我习惯把成交率控制在 40%-60% 之间。太低说明报价太保守,赚不到钱;太高说明报价太激进,容易被吃。
优点: 收益稳定,风险可控。你想想看,每次成交你都是「低买高卖」,天然有正期望。
缺点: 在单边行情中,你可能会被「碾压」。比如价格一直涨,你挂的卖单全被吃掉,但买单永远成交不了——这就是典型的「库存单向偏移」。
4.1.2 主动做市(Active Market Making)
主动做市,就是你去吃市场上的挂单。这听起来有点反直觉——做市商怎么还去「吃单」?
其实,主动做市主要用于两种情况:
- 库存调整: 当你的库存偏离目标水平时,主动吃掉对手单来快速平仓
- 套利机会: 当不同交易所或不同合约之间存在价差时,主动吃单套利
我的经验: 主动做市不要频繁使用。我曾经在某个波动率极高的下午,连续主动吃了 20 次单,结果手续费吃掉了一半利润。主动做市的核心是「精准打击」,不是「火力覆盖」。
4.2 报价策略
报价策略,就是决定「在什么价格挂单、挂多少量」。这是做市商最核心的技术活。
4.2.1 固定价差策略
最简单的策略:固定一个价差,比如 0.01 USDT。无论市场怎么波动,你的 Bid 和 Ask 始终差 0.01。
# 伪代码示例:固定价差策略
spread = 0.01
mid_price = (best_bid + best_ask) / 2
my_bid = mid_price - spread / 2
my_ask = mid_price + spread / 2
适用场景: 波动率极低的市场,比如稳定币对。
问题: 市场波动一大,你的订单要么被秒吃,要么永远成交不了。
4.2.2 动态价差策略
根据市场波动率动态调整价差。波动率越高,价差越大——因为你承担的风险更大。
| 市场状态 | 波动率 | 建议价差 | 说明 |
|---|---|---|---|
| 平静 | < 0.1% | 0.01% | 薄利快跑 |
| 正常 | 0.1% - 0.5% | 0.03% - 0.05% | 平衡收益与风险 |
| 剧烈波动 | > 0.5% | 0.1% 以上 | 保护自己,别被吃掉 |
避坑指南: 我曾经在波动率飙升时忘了调价差,结果 0.02% 的价差被市场瞬间吃掉,库存直接爆仓。从那以后,我写了个自动监控波动率的脚本,超过阈值自动调整价差。
4.2.3 订单簿深度感知策略
别只看价格,还要看深度。如果买单深度很厚,你可以把卖单挂得稍微高一点——因为你知道下面有支撑。
# 深度感知报价示例
def get_depth_adjusted_price(side, base_price):
depth = get_order_book_depth(side, levels=10)
if side == 'ask':
# 如果买单深度厚,卖单可以挂高
if depth['bid_depth'] > 100:
return base_price * 1.0002
else:
return base_price * 1.0001
else:
# 对称逻辑
...
4.3 库存管理策略
库存管理,说白了就是「别让自己手里积压太多货」。你想想看,如果 BTC 价格暴跌,你手里全是 BTC 的多单,那画面太美我不敢看。
4.3.1 目标库存模型
设定一个目标库存水平,比如 10 BTC。当实际库存偏离目标时,通过调整报价来「驱赶」库存回归。
- 库存偏高: 降低卖单价格,提高买单价格——鼓励卖出,抑制买入
- 库存偏低: 提高卖单价格,降低买单价格——鼓励买入,抑制卖出
4.3.2 库存偏移惩罚函数
我习惯用一个惩罚函数来调整报价。库存偏离越大,惩罚越重。
def inventory_penalty(current_inv, target_inv, max_inv):
deviation = (current_inv - target_inv) / max_inv
# 线性惩罚,范围 [-1, 1]
penalty = deviation * 0.001 # 0.1% 的偏移惩罚
return penalty
# 调整后的报价
adjusted_bid = base_bid * (1 - penalty) # 库存高时,买单价格降低
adjusted_ask = base_ask * (1 + penalty) # 库存高时,卖单价格降低
我的习惯: 惩罚系数不要设太大。我曾经设了 0.01,结果库存稍微偏离一点,报价就变得极其激进,反而亏了手续费。0.001 是个不错的起点。
4.3.3 库存再平衡触发条件
不是每次偏离都要调整。设定一个「死区」,在死区范围内不动。
- 死区: 库存偏离 < 5% 目标库存,不调整
- 调整区: 偏离 5%-20%,线性调整
- 紧急区: 偏离 > 20%,立即主动平仓
4.4 风险控制策略
风险控制,是做市商的「安全带」。没有它,你赚再多钱也是给市场打工。
4.4.1 最大持仓限制
设定一个硬性上限。比如,单品种最大持仓不超过总资金的 20%。
MAX_POSITION = 0.2 * total_capital
if current_position > MAX_POSITION:
# 停止所有买入,只允许卖出
cancel_all_buy_orders()
set_sell_only_mode(True)
4.4.2 止损与熔断
当亏损达到一定阈值时,自动停止做市。
| 亏损幅度 | 操作 | 说明 |
|---|---|---|
| -1% | 警告 | 记录日志,通知运维 |
| -3% | 缩小价差 | 减少暴露,降低风险 |
| -5% | 熔断 | 撤销所有订单,停止做市 |
血的教训: 我曾经在某个山寨币上设了 10% 的止损线,结果那币一天跌了 40%。熔断触发时我已经亏了 10%,但如果不熔断,可能亏更多。熔断不是认输,是保命。
4.4.3 相关性风险控制
别只看单个品种。如果多个品种高度相关,同时做市等于把鸡蛋放在一个篮子里。
- 计算品种间的相关系数
- 相关系数 > 0.7 的品种,合并计算总风险敞口
- 总敞口不超过总资金的 50%
4.5 知识体系总览
下面这张图,把本章的核心逻辑串起来了。我建议你保存下来,写代码时对照着看。
嗯,以上就是做市商策略的四个基础模块。每个模块单独拿出来都能写一本书,但今天咱们先把骨架搭好。你写代码的时候,记得从这四个维度去思考:你的策略是被动还是主动?报价怎么定?库存怎么管?风险怎么控?
一句话总结: 被动做市赚小钱,主动做市调风险,报价策略定生死,库存风控保平安。