做市商报价策略基础:对称报价与非对称报价

做市商的报价策略,说白了就是决定「怎么挂单」才能赚钱。我刚开始做市的时候,以为只要两边挂单就行了,结果亏得挺惨。后来才明白,报价策略是门精细活,核心就三个维度:对称还是非对称、宽度和深度怎么权衡、时间加权还是成交量加权。

今天咱们就把这三个基础策略掰开揉碎了讲。嗯,都是我在实盘里踩过坑之后总结出来的。

对称报价 vs 非对称报价

先说说最基础的对称报价。你想想看,如果市场很平稳,没有明显的方向性,那买卖两边挂一样的宽度,是不是很合理?

对称报价就是买一和卖一的价格差(spread)相对于中间价是对称的。比如中间价是100,你买一挂99.5,卖一挂100.5,两边各0.5的差价。这种策略的好处是——简单、公平、不容易被套利者盯上。

但我个人习惯,大部分时候不会用完全对称的报价。为什么?因为市场从来就不是对称的。

非对称报价,说白了就是根据你对短期方向的判断,把报价往一边倾斜。比如你觉得接下来买盘会更强,那就把买价挂高一点,卖价也挂高一点。这样你更容易吃到买单,同时卖单不容易被吃掉——相当于你在「囤货」。

核心区别:
  • 对称报价:spread对称分布,适合震荡市、低波动环境
  • 非对称报价:spread偏向一侧,适合趋势市、信息不对称环境

我在项目中遇到过一件事:某个流动性较差的币种,我一开始用对称报价,结果发现每次大单进来我都亏。后来改成非对称报价,把卖价挂高0.2个tick,买价挂低0.1个tick,反而盈利了。原因很简单——那个市场里,大单基本都是买方,我得给自己留点安全垫。

报价宽度与深度权衡

报价宽度(spread)和深度(depth)是一对天生的矛盾。宽度越窄,你越容易成交,但每笔赚得少;宽度越宽,每笔赚得多,但成交概率低。深度也是——挂单量越大,你承担的风险越大,但能吃到更多订单流。

这里有个经典的权衡公式,我经常用:

# 报价宽度与深度的权衡模型
def optimal_quote(spread, depth, volatility, inventory):
    """
    spread: 当前报价宽度(bps)
    depth: 每档挂单量(基准单位)
    volatility: 近期波动率(bps)
    inventory: 当前库存(正数=多头,负数=空头)
    """
    # 波动率越高,宽度应该越宽
    width_adj = spread * (1 + 0.5 * volatility / 100)
    
    # 库存偏离越大,深度应该越小
    depth_adj = depth * (1 - 0.3 * abs(inventory) / max_inventory)
    
    return width_adj, depth_adj

你看,这个模型很简单,但很实用。波动率高了,我就把宽度拉大,防止被瞬间吃掉;库存偏了,我就减少挂单深度,降低风险暴露。

我曾经吃过一次亏:某个山寨币突然波动率飙升,我还在用原来的窄宽度挂单,结果连续被吃了好几笔,库存一下子偏得厉害。嗯,那次教训挺深刻的。后来我加了个动态调整逻辑,波动率每上升10%,宽度自动加宽5%。

市场状态 建议宽度 建议深度
低波动、高流动性 窄(1-2 tick) 深(大单量)
高波动、低流动性 宽(3-5 tick) 浅(小单量)
库存严重偏离 不对称加宽 减少暴露侧深度

时间加权与成交量加权报价

这两个概念,很多人容易搞混。我简单解释一下。

时间加权报价:你的报价在时间维度上平均。比如你每5秒更新一次报价,那这5秒内的报价就是「时间加权」的。这种策略适合流动性好、订单流均匀的市场。

成交量加权报价:你的报价根据成交量来调整。比如某段时间成交量特别大,你就把报价往那个方向倾斜。这种策略适合有信息冲击、大单频繁的市场。

我个人习惯,在大多数情况下用成交量加权报价。为什么?因为成交量才是真正的「信号」。时间只是背景,成交量才是剧情。

实战技巧: 我建议你在做市策略里同时引入两个加权因子。时间加权用来控制报价的「刷新频率」,成交量加权用来控制报价的「偏移方向」。两者配合,效果比单独用任何一个都好。

举个例子,我写过的一个简单实现:

def weighted_quote(mid_price, volume_profile, time_decay=0.8):
    """
    volume_profile: 最近N笔成交的买卖量比例
    time_decay: 时间衰减因子(越旧的成交权重越低)
    """
    # 计算成交量加权偏移
    buy_volume = sum(v * (time_decay ** i) for i, v in enumerate(volume_profile['buy']))
    sell_volume = sum(v * (time_decay ** i) for i, v in enumerate(volume_profile['sell']))
    
    # 偏移方向:买量大于卖量,报价上移
    imbalance = (buy_volume - sell_volume) / (buy_volume + sell_volume + 1e-8)
    
    # 报价偏移量(最大0.5个tick)
    offset = imbalance * 0.5 * tick_size
    
    bid = mid_price - spread/2 + offset
    ask = mid_price + spread/2 + offset
    
    return bid, ask

你看,这里用了时间衰减因子,让最近的成交影响更大,旧的成交逐渐被遗忘。这就是时间加权和成交量加权的结合。

注意: 成交量加权报价有个坑——如果市场出现虚假成交(比如对倒、刷量),你的报价会被误导。我建议你加一个成交量异常检测,比如单笔成交量超过均值3倍标准差时,暂时忽略这笔数据。

知识体系总览

下面这张图,是我自己整理的本章节知识结构。你可以把它当作一个快速索引:

做市商报价策略基础 对称报价 vs 非对称报价 • 对称:spread均匀分布 • 非对称:偏向一侧 • 适用场景不同 • 库存管理核心 报价宽度与深度权衡 • 宽度窄→易成交但赚得少 • 深度大→风险高但吃单多 • 波动率影响宽度 • 库存影响深度 时间加权 vs 成交量加权 • 时间加权:均匀刷新 • 成交量加权:信号驱动 • 两者可结合使用 • 注意虚假成交 核心逻辑:动态调整 市场状态 → 选择对称/非对称 → 调整宽度与深度 → 加权报价 库存管理 → 反馈调整 → 循环优化 做市商报价策略核心框架

这张图把三个策略的关系理清楚了。你看,它们不是孤立的,而是层层递进、互相影响的。对称/非对称是「方向选择」,宽度/深度是「参数设定」,时间/成交量加权是「动态调整」。三者配合好了,你的做市策略才算入门。

嗯,今天就先讲到这里。这些基础策略看着简单,但真正用好,需要大量的回测和实盘调参。我建议你先把对称报价跑通,再慢慢加入非对称和加权逻辑。别一上来就想搞复杂的,容易翻车。

交易系统化学习资料 微信Strategy888888