做市策略基础:什么是做市?做市策略的核心逻辑

做市,说白了就是「两边报价,赚差价」。

我刚开始接触这个领域时,觉得做市商就是交易所里的「黄牛」——左手买、右手卖,吃个中间价差。后来自己动手写策略才发现,事情远没那么简单。你想想看,如果真这么容易,为什么市场上90%的做市商都在亏钱?

嗯,今天我们就来拆解一下做市策略的核心逻辑。我会结合自己踩过的坑,把价差、库存、订单簿这三个核心要素讲透。

什么是做市?

做市商(Market Maker)的核心任务,就是为市场提供流动性。具体来说:

  • 同时挂买单和卖单:在买一价挂单,在卖一价挂单
  • 赚取价差:卖价 - 买价 = 你的利润
  • 承担库存风险:万一方向走反了,你手里囤了一堆货

举个例子。假设BTC当前市场价是60,000 USDT。你挂单:

  • 买一:59,990 USDT(买入1 BTC)
  • 卖一:60,010 USDT(卖出1 BTC)

如果有人卖给你,你手里就有了1个BTC。如果有人从你手里买,你就赚了20 USDT的差价。看起来很简单对吧?

但问题来了——如果价格一直跌,你手里的BTC就变成了烫手山芋。这就是库存风险。

做市策略的核心逻辑

做市策略说白了就三件事:价差管理、库存控制、订单簿博弈。我们一个一个说。

1. 价差(Spread)——你的利润来源

价差就是卖一价和买一价之间的差值。公式很简单:

Spread = Ask_Price - Bid_Price

但实际策略中,价差不是固定的。我见过很多新手直接设一个固定价差,比如0.1%。结果市场波动一大,单子全被吃掉,亏得底裤都不剩。

我个人习惯用动态价差。核心逻辑是:

  • 市场波动大 → 扩大价差(补偿风险)
  • 市场波动小 → 缩小价差(吸引成交)

举个例子,我常用的一个价差模型:

spread = base_spread + k * volatility

其中 base_spread 是基础价差(比如0.05%),volatility 是近期波动率,k 是调节系数。

我的经验: 价差不是越大越好。价差太大,你的单子永远排不到前面,等于没做市。价差太小,一次大波动就能让你亏光。我一般把基础价差设在市场平均价差的80%左右,既能成交,又有利润空间。

2. 库存(Inventory)——你的生死线

库存管理是做市策略里最容易被忽视、但也是最致命的一环。

我曾经犯过一个错误:某次做ETH做市,市场突然暴跌,我手里囤了200个ETH。当时觉得「没事,会反弹的」。结果跌了10%才止损,亏了6位数。

从那以后,我给自己定了一条铁律:库存必须控制在目标范围内

库存管理的核心指标:

指标 含义 我的经验值
库存比率 当前库存 / 目标库存 0.8 ~ 1.2
库存偏离度 (当前库存 - 目标库存)/ 目标库存 ±20% 以内
库存周转率 每日成交额 / 平均库存 5 ~ 10 次/天

当库存偏离目标时,你需要调整报价:

  • 库存过多:降低卖价,提高买价(鼓励卖出,抑制买入)
  • 库存过少:提高卖价,降低买价(鼓励买入,抑制卖出)

说白了就是:手里货多了就便宜卖,货少了就贵点卖。

注意: 库存管理不是「感觉差不多就行」。我建议用量化模型来算目标库存。比如用均值回归模型,或者用VaR(风险价值)来设定库存上限。别问我怎么知道的——都是亏出来的教训。

3. 订单簿(Order Book)——你的战场地图

订单簿就是当前市场上所有挂单的集合。做市策略的核心,就是读懂这张「地图」。

我一般关注订单簿的几个关键维度:

  • 深度:每个价位上有多少量
  • 斜率:价格越远,深度变化有多快
  • 不平衡度:买单总量 vs 卖单总量
  • 价差宽度:当前最优买卖价差

举个例子,如果买单深度远大于卖单深度,说明市场买盘强劲。这时候我会倾向于:

  • 缩小卖价(更容易成交)
  • 扩大买价(防止被砸盘)

反过来,如果卖单深度大,说明抛压重,我会谨慎做多库存。

这里有一个我常用的订单簿不平衡指标:

imbalance = (bid_volume - ask_volume) / (bid_volume + ask_volume)

取值范围 -1 到 1。正数表示买盘强,负数表示卖盘强。

核心逻辑总结:
价差决定你能赚多少,库存决定你会亏多少,订单簿告诉你往哪走。三者缺一不可。

做市策略的整体框架

说了这么多,我们来画一张图,把整个逻辑串起来。

做市策略核心逻辑框架 市场数据输入 价差管理 动态调整买卖价差 库存控制 目标库存 ±20% 订单簿分析 深度/斜率/不平衡 报价决策引擎 挂单执行(买一/卖一) 反馈循环 三个模块协同工作,通过反馈循环持续优化报价

这张图展示了我做策略时的完整流程。市场数据进来后,三个模块并行计算,然后汇总到报价决策引擎,最后输出挂单。同时,成交结果会反馈回来,形成闭环。

一个简单的做市策略示例

说了这么多理论,我们来看一个最简化的做市策略代码。嗯,这只是演示逻辑,生产环境千万别直接用。

class SimpleMarketMaker:
    def __init__(self, base_spread=0.001, target_inventory=10):
        self.base_spread = base_spread
        self.target_inventory = target_inventory
        self.current_inventory = 0
    
    def calculate_spread(self, volatility):
        """动态价差计算"""
        return self.base_spread * (1 + 2 * volatility)
    
    def calculate_prices(self, mid_price, volatility, order_book):
        """计算买卖报价"""
        spread = self.calculate_spread(volatility)
        
        # 库存调整
        inventory_deviation = (self.current_inventory - self.target_inventory) / self.target_inventory
        inventory_adjustment = -0.5 * inventory_deviation * spread
        
        # 订单簿不平衡调整
        imbalance = order_book['bid_volume'] - order_book['ask_volume']
        imbalance_adjustment = 0.1 * imbalance / (order_book['bid_volume'] + order_book['ask_volume']) * spread
        
        # 最终报价
        bid_price = mid_price * (1 - spread/2 + inventory_adjustment + imbalance_adjustment)
        ask_price = mid_price * (1 + spread/2 + inventory_adjustment + imbalance_adjustment)
        
        return bid_price, ask_price

这段代码虽然简单,但包含了三个核心要素:

  • 价差随波动率动态调整
  • 库存偏离时调整报价方向
  • 订单簿不平衡影响报价偏移
避坑指南: 我曾经直接把这种简单策略部署到实盘,结果被高频交易者反复「钓鱼」。他们会先吃掉你的买单,然后砸盘,让你高价接盘。所以实盘策略一定要加风控模块,比如最大库存限制、单笔亏损限制等。

做市策略的核心,说白了就是「在风险可控的前提下,赚取流动性溢价」。价差是你的利润,库存是你的风险,订单簿是你的情报。三者平衡好了,你就能在市场里稳定盈利。

嗯,今天就先聊到这里。记住,做市不是印钞机,而是精细的风险管理游戏。下一章我们会深入讲回测框架的设计,到时候我会分享更多实战中的坑和技巧。


专注资料整理