4. 做市商策略框架:被动做市 vs 主动做市、报价策略分类、库存管理基础

做市商策略,说白了就是回答三个问题:什么时候报价?报什么价?报完价之后怎么管库存? 这三个问题搞定了,你的做市机器人基本就能跑起来了。

我个人习惯把做市策略分成两大类:被动做市主动做市。别被名字吓到,其实理解起来很简单。

4.1 被动做市 vs 主动做市

被动做市,就是「挂单等成交」。你在买一卖一的位置挂上单子,等着别人来吃。这种策略的核心是赚取买卖价差。我在项目中遇到过不少新手,一上来就想着主动吃单,结果手续费交了一大堆,利润全没了。其实对于流动性好的币对,被动做市反而更稳。

主动做市,则是「主动去吃单」。当市场出现机会时,你主动吃掉对手的挂单,赚取的是价格回归的收益。比如某币突然被砸了一个大坑,你主动买入,等价格回来再卖出。

嗯,这里要注意:主动做市的风险比被动做市高得多。我曾经在一次ETH的闪崩中,主动做市策略直接亏了3%的仓位。从那以后,我给自己定了个规矩——主动做市的仓位绝不超过总资金的20%。

核心区别总结:
  • 被动做市:赚价差,风险低,收益稳定
  • 主动做市:赚回归,风险高,收益弹性大

4.2 报价策略分类

报价策略,说白了就是「怎么定你的买价和卖价」。我常用的报价策略有四种,你想想看,其实都是从不同角度去优化你的报价位置。

策略名称 核心逻辑 适用场景
固定价差策略 买卖价差固定,比如永远挂0.1%的价差 高流动性、波动小的币对
动态价差策略 价差随波动率变化,波动大时价差拉大 波动剧烈的市场
订单簿深度策略 根据买卖盘深度调整报价位置 深度不均匀的市场
时间加权策略 把大单拆成小单,随时间均匀挂出 大额做市、减少市场冲击

我个人最常用的是动态价差策略。为什么?因为市场不会一直平静。你想想看,如果波动率突然飙升,你还用固定价差,很容易被套住。我曾经在BTC波动率从20%飙到80%的那天,用固定价差策略亏了一整周的利润。从那以后,我就把动态价差写进了核心策略里。

一个小技巧:动态价差的参数可以用ATR(平均真实波幅)来调节。ATR越大,价差越大。这样能自动适应市场波动。

4.3 库存管理基础

库存管理,是做市商策略里最容易被忽视的一环。很多人只盯着报价策略,结果库存越积越多,最后变成「被动持仓」。嗯,这里要敲黑板了。

库存管理的核心目标只有一个:让库存保持在中性水平。说白了,就是不要囤货,也不要空仓。你想想看,如果你囤了一堆ETH,突然ETH暴跌,你的做市利润全被库存亏损吃掉了。

我常用的库存管理方法有三种:

  1. 库存上限控制:设定一个最大库存比例,比如总资金的10%。超过这个比例,强制平仓一部分。
  2. 库存偏移调整:根据当前库存偏离中性水平的程度,动态调整报价。比如库存偏多,就降低卖价、提高买价,加速出货。
  3. 对冲策略:在期货或永续合约上做反向对冲。比如现货库存多了,就在合约上做空等量的仓位。
避坑指南:我曾经在库存管理上犯过一个低级错误——只设了上限,没设下限。结果有一次市场大涨,我的库存全卖光了,变成了空仓状态。后续的上涨行情完全踏空。所以,上下限都要设

4.4 策略框架总览

下面这张图是我自己整理的做市商策略框架。你看一眼,就能把整个体系串起来。

做市商策略框架 被动做市 主动做市 报价策略 固定价差 | 动态价差 订单簿深度 | 时间加权 核心:赚取买卖价差 报价策略 趋势跟踪 | 均值回归 事件驱动 | 套利触发 核心:赚取价格回归 库存管理(核心风控) 库存上限控制 → 库存偏移调整 → 对冲策略 最终目标:稳定盈利 + 风险可控

你看这个框架,从上到下是层层递进的。先选策略类型(被动还是主动),再定报价策略,最后用库存管理兜底。缺了任何一层,你的做市策略都会出问题。

我的经验:刚开始做做市商时,我花了80%的时间在报价策略上,只花了20%在库存管理。后来发现,真正决定生死的是库存管理。报价策略最多影响你赚多赚少,库存管理决定你活多久。

4.5 代码示例:一个简单的被动做市策略

下面这个代码是我早期项目里的一个简化版。它实现了最基本的被动做市逻辑——在买一卖一位置挂单,并动态调整价差。

class PassiveMarketMaker:
    def __init__(self, base_spread=0.001, max_inventory=0.1):
        self.base_spread = base_spread  # 基础价差 0.1%
        self.max_inventory = max_inventory  # 最大库存比例 10%
        self.current_inventory = 0.0
        
    def calculate_prices(self, mid_price, volatility):
        # 动态价差:波动率越大,价差越大
        dynamic_spread = self.base_spread * (1 + volatility * 2)
        
        bid_price = mid_price * (1 - dynamic_spread / 2)
        ask_price = mid_price * (1 + dynamic_spread / 2)
        
        return bid_price, ask_price
    
    def adjust_for_inventory(self, bid_price, ask_price):
        # 库存偏移调整
        inventory_ratio = self.current_inventory / self.max_inventory
        
        if inventory_ratio > 0.5:
            # 库存偏多,降低卖价,提高买价
            ask_price *= 0.999
            bid_price *= 0.998
        elif inventory_ratio < -0.5:
            # 库存偏少,提高卖价,降低买价
            ask_price *= 1.001
            bid_price *= 1.002
            
        return bid_price, ask_price
    
    def place_orders(self, mid_price, volatility):
        bid, ask = self.calculate_prices(mid_price, volatility)
        bid, ask = self.adjust_for_inventory(bid, ask)
        
        # 这里省略了实际下单的API调用
        print(f"挂买单: {bid:.2f}, 挂卖单: {ask:.2f}")
        return bid, ask
注意:这个代码只是演示逻辑,实际生产环境还需要考虑手续费、滑点、订单簿深度等因素。我建议你先在模拟盘上跑一周,再上实盘。

好了,这一章的内容就到这里。做市商策略框架的核心就是策略类型 + 报价策略 + 库存管理这三板斧。你先把这三块搞明白,后面的实战内容才能吃得透。