第1章:价差与中间价计算
做市系统的核心,说白了就是两件事:定价和报价。而定价的起点,就是搞清楚价差和中间价怎么算。
我刚开始做做市系统时,觉得这玩意儿太简单了——不就是 (买价+卖价)/2 吗?后来在实盘环境里被狠狠教育了一顿,才发现这里面的门道比想象中深得多。
1.1 买卖价差(Bid-Ask Spread)
买卖价差,就是市场上最优买价和最优卖价之间的差值。公式很简单:
Spread = Ask Price - Bid Price
但实际计算时,有几点要注意:
- 绝对价差:直接用价格相减,适用于价格水平稳定的品种
- 相对价差:Spread / Mid Price × 100%,用于比较不同价格水平的品种
- 基点价差:用基点(BPS)表示,1 BPS = 0.01%
核心要点:价差越小,流动性越好。做市商赚的就是这个价差。
我在项目中遇到过一个问题:某个小币种的买一价是 0.00012345,卖一价是 0.00012456。用绝对价差算出来是 0.00000111,看着很小。但换算成相对价差,其实有 0.9% 左右——这已经是很宽的价差了。
1.2 中间价(Mid Price)
中间价是衡量市场公允价格最常用的指标。计算方式有几种:
| 类型 | 公式 | 适用场景 |
|---|---|---|
| 简单中间价 | (Bid + Ask) / 2 | 流动性好的市场 |
| 加权中间价 | (Bid×Vol_bid + Ask×Vol_ask) / (Vol_bid + Vol_ask) | 深度不均匀的市场 |
| VWAP中间价 | ∑(Price × Volume) / ∑Volume | 大单交易参考 |
我个人习惯用加权中间价。为什么?因为简单中间价容易被小单操纵。你想想看,有人挂一个很小的卖单在很低的价格,中间价就被拉下来了,但实际上市场深度根本不在那里。
经验之谈:在实盘系统中,我通常取买卖各前5档的深度数据来计算加权中间价。这样既避免了单点操纵,又不会因为取太多档位导致计算延迟。
1.3 VWAP中间价(成交量加权平均价格)
VWAP 中间价,说白了就是「按成交量加权后的平均价格」。它比简单中间价更能反映真实的交易成本。
计算步骤:
- 收集一段时间内的所有成交数据
- 计算每笔成交的 价格 × 成交量
- 求和后除以总成交量
VWAP = Σ(Price_i × Volume_i) / ΣVolume_i
举个例子:
- 第一笔:100元,成交10股 → 1000
- 第二笔:101元,成交20股 → 2020
- 第三笔:99元,成交5股 → 495
- 总成交额:1000+2020+495 = 3515
- 总成交量:10+20+5 = 35
- VWAP = 3515/35 ≈ 100.43元
注意:VWAP 对时间窗口很敏感。窗口太短,样本不足;窗口太长,价格已经变化了。我一般用 5 分钟窗口做高频做市,用 1 小时窗口做日内策略。
1.4 三种中间价的对比
我整理了一张对比表,方便你理解它们的差异:
| 指标 | 计算速度 | 抗操纵性 | 反映真实流动性 |
|---|---|---|---|
| 简单中间价 | 最快 | 最差 | 一般 |
| 加权中间价 | 较快 | 较好 | 较好 |
| VWAP中间价 | 较慢(需历史数据) | 最好 | 最好 |
嗯,这里要注意:没有哪个指标是万能的。我曾经在某个波动剧烈的品种上只用简单中间价,结果被高频交易者来回刷——他们用大单把中间价打偏,然后反向吃我的单子。后来改成加权中间价,情况就好多了。
1.5 核心逻辑流程图
下面这张图展示了价差与中间价计算的完整流程:
这张图的核心逻辑是:从市场深度数据出发,根据你的策略需求选择不同的中间价计算方式,最终输出做市报价。我个人建议新手先从加权中间价入手,等理解了市场微观结构后再尝试 VWAP。
避坑指南:我曾经在计算加权中间价时,忘了处理深度为0的情况。结果某个冷门品种的买一深度突然变成0,系统直接报错。后来我加了个保护逻辑:如果某侧深度为0,就只用另一侧的价格。
好了,这一章的内容就到这里。价差和中间价是做市系统最基础的计算模块,但也是最重要的。下一章我们会深入讲解订单簿的构建和维护——那才是真正考验系统性能的地方。