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)

主动做市,就是你去吃市场上的挂单。这听起来有点反直觉——做市商怎么还去「吃单」?

其实,主动做市主要用于两种情况:

  1. 库存调整: 当你的库存偏离目标水平时,主动吃掉对手单来快速平仓
  2. 套利机会: 当不同交易所或不同合约之间存在价差时,主动吃单套利

我的经验: 主动做市不要频繁使用。我曾经在某个波动率极高的下午,连续主动吃了 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 知识体系总览

下面这张图,把本章的核心逻辑串起来了。我建议你保存下来,写代码时对照着看。

做市商策略核心框架 被动做市 赚价差,等成交 主动做市 吃单,调库存 报价策略 定价格,定数量 库存管理 控仓位 风险控制 止损、熔断、相关性 最大持仓 止损熔断 相关性 核心目标:在控制风险的前提下,最大化价差收益

嗯,以上就是做市商策略的四个基础模块。每个模块单独拿出来都能写一本书,但今天咱们先把骨架搭好。你写代码的时候,记得从这四个维度去思考:你的策略是被动还是主动?报价怎么定?库存怎么管?风险怎么控?

一句话总结: 被动做市赚小钱,主动做市调风险,报价策略定生死,库存风控保平安。

专注资料整理