4. 买卖价差与交易成本:价差的构成与估算模型

做市商赚的是什么钱?说白了,就是买卖价差。但价差不是凭空产生的,它背后藏着三个成本:逆向选择成本、订单处理成本、存货持有成本。我刚开始做市时,以为价差就是简单的「低买高卖」,结果亏得挺惨。后来才明白,不理解价差的构成,就是在给市场送钱。

4.1 价差的三大构成

我们先拆开来看。每个价差,其实都是做市商在承担风险后的「补偿」。

4.1.1 逆向选择成本

这是最隐蔽、也最致命的一块。什么叫逆向选择?就是对手方比你更聪明。你想想看,如果有人突然砸一大笔买单进来,他是不是知道什么内幕消息?你作为做市商,接了他的单子,很可能下一秒价格就朝不利方向跳。

我在项目中遇到过一件事:某只小盘股,平时价差只有2个tick。突然有一天,买单特别猛,我习惯性地接了。结果半小时后公司发了利空公告,股价直接跌了5%。嗯,那笔单子让我亏掉了之前一周的利润。

逆向选择成本的计算,通常用价格冲击系数来量化。简单说,就是订单流不平衡时,价格会往哪个方向偏。

核心公式: 逆向选择成本 = 成交后价格变动 × 方向符号

4.1.2 订单处理成本

这个好理解。交易所要收费吧?清算要收费吧?系统要维护吧?这些都是实打实的成本。我见过一些新手做市商,把价差压得特别低,结果算下来连手续费都覆盖不了。

订单处理成本包括:

  • 交易所交易费(通常按成交金额的万分之几)
  • 清算与结算费用
  • 系统托管与数据费用
  • 人力与运维成本

举个例子,如果每笔交易的手续费是0.01%,那么你的价差至少得大于0.02%才能不亏。因为一买一卖,手续费要交两次。

4.1.3 存货持有成本

做市商手里得有货吧?你持有股票,就得承担价格波动的风险。这个成本怎么算?用存货风险溢价来衡量。

我个人的习惯是,用VaR(在险价值)来估算存货成本。比如你持有100万市值的股票,日波动率2%,那么一天的潜在亏损就是2万。这个成本,必须摊到每一笔交易里。

避坑指南: 我曾经犯过一个错误——只算逆向选择成本,忽略了存货成本。结果在市场波动大的时候,持仓被套,价差收益根本覆盖不了浮亏。后来我学乖了,每次调整价差前,先算一下当前的存货风险敞口。

4.2 有效价差与实现价差

报价价差是你能看到的,但真正成交的价差往往不一样。这就引出了两个重要概念。

4.2.1 有效价差

有效价差衡量的是实际成交价格买卖中间价的差距。公式很简单:

有效价差 = 2 × |成交价格 - 中间价|

为什么用绝对值?因为不管是买还是卖,偏离中间价的部分都是成本。举个例子,中间价是10.00元,你以10.02元买入,有效价差就是0.04元。

有效价差比报价价差更真实。因为很多时候,大单会在价外成交,报价价差根本反映不了实际成本。

4.2.2 实现价差

实现价差更狠——它考虑的是成交后价格的变化。公式:

实现价差 = 2 × (成交价格 - 成交后中间价) × 方向符号

这个指标能告诉你:你赚到的价差,有多少被后续的价格变动吃掉了。如果实现价差远小于有效价差,说明逆向选择成本很高。

我记得有一次做回测,某只股票的报价价差只有0.02元,看起来流动性很好。但一算实现价差,居然是负的!说明每次成交后,价格都朝不利方向跑。嗯,这就是典型的「流动性幻觉」。

4.3 交易成本估算模型

实战中,我们需要一个模型来估算总交易成本。这里介绍两个最常用的。

4.3.1 线性成本模型

最简单的模型,假设成本与交易量成正比:

总成本 = 固定成本 + 可变成本 × 交易量

固定成本包括手续费、系统费用等。可变成本就是价差和冲击成本。这个模型适合做快速估算,但精度不够。

4.3.2 Almgren-Chriss 模型

这是业界标准。它把成本拆成三块:

  1. 市场冲击成本:你的订单对价格的瞬时影响
  2. 延迟成本:等待成交期间的价格波动
  3. 机会成本:未成交部分的潜在收益损失

代码实现起来也不复杂:

def almgen_chriss_cost(volume, spread, volatility, alpha=0.1):
    """
    简化的Almgren-Chriss成本估算
    volume: 交易量
    spread: 当前价差
    volatility: 波动率
    alpha: 冲击系数(需根据历史数据校准)
    """
    # 冲击成本
    impact_cost = alpha * volume * spread
    
    # 延迟成本(假设等待时间1分钟)
    delay_cost = 0.5 * volatility * (1/1440)**0.5
    
    # 机会成本(假设成交率80%)
    opportunity_cost = 0.2 * spread
    
    total = impact_cost + delay_cost + opportunity_cost
    return total
注意: 这个模型里的alpha参数,必须用你自己的历史数据去拟合。不同市场、不同股票,alpha差异很大。我见过有人直接用别人的参数,结果估算出来的成本偏差了50%以上。

4.4 实战中的价差调整策略

知道了价差的构成,怎么用?我分享几个经验:

  • 波动率上升时,主动加宽价差:因为存货持有成本变高了
  • 订单流不平衡时,收紧价差:避免被逆向选择吃掉
  • 收盘前半小时,逐步收窄价差:降低隔夜风险

说白了,价差不是固定的,它是你根据市场状态动态调整的「风险定价」。我刚开始做市时,总想着一劳永逸地设一个固定价差。后来发现,市场分分钟教你做人。

嗯,今天就聊到这儿。下一章我们会深入讲订单簿的动态建模,到时候你会看到,价差只是冰山一角。

核心要点回顾:
  • 价差 = 逆向选择成本 + 订单处理成本 + 存货持有成本
  • 有效价差反映实际成交成本,实现价差反映逆向选择
  • Almgren-Chriss模型是估算总交易成本的工业标准
  • 动态调整价差,比固定价差更有效