4. 买卖价差分析:绝对价差、相对价差、有效价差的计算与市场流动性判断
买卖价差,说白了就是你想买和你想卖之间的那道坎。我做了这么多年量化,发现很多人一上来就盯着价格波动,却忽略了价差这个最直接的流动性指标。今天咱们就把这块掰开揉碎了讲清楚。
4.1 绝对价差:最直观的流动性标尺
绝对价差(Absolute Spread)的计算很简单:
绝对价差 = 卖一价 - 买一价
举个例子,某股票当前卖一价是10.05元,买一价是10.00元,那绝对价差就是0.05元。嗯,这里要注意,绝对价差反映的是你完成一笔市价单交易需要付出的直接成本。
我在项目中遇到过这样的情况:有些品种绝对价差看起来很小,比如只有0.01元,但如果你交易量稍微大一点,就会发现实际成交价格远不如预期。为什么?因为薄订单簿下,你的大单会吃掉好几个价位。
4.2 相对价差:跨品种比较的利器
绝对价差有个硬伤——没法跨品种比较。茅台一股2000块,价差2块;某低价股2块,价差0.02块。你说哪个流动性好?
这时候就需要相对价差(Relative Spread):
相对价差 = (卖一价 - 买一价) / 中间价 × 100%
中间价通常取 (买一价 + 卖一价) / 2。还是刚才的例子:
| 品种 | 买一价 | 卖一价 | 绝对价差 | 中间价 | 相对价差 |
|---|---|---|---|---|---|
| 茅台 | 1999.00 | 2001.00 | 2.00 | 2000.00 | 0.10% |
| 某低价股 | 1.99 | 2.01 | 0.02 | 2.00 | 1.00% |
你看,茅台的相对价差只有0.1%,而低价股高达1%。说白了,茅台的实际交易成本反而更低。我建议在做跨品种流动性对比时,优先用相对价差。
4.3 有效价差:真实成交的成本
绝对价差和相对价差都是基于订单簿快照的静态指标。但真实交易中,你的成交价可能和报价有偏差。有效价差(Effective Spread)就是用来衡量这个偏差的:
有效价差 = 2 × |成交价 - 中间价|
为什么乘以2?因为一笔交易同时影响了买卖双方,总成本是双向的。举个例子:
- 中间价 = 10.025元
- 你以10.05元买入(吃卖一)
- 有效价差 = 2 × |10.05 - 10.025| = 0.05元
我曾经在回测中发现一个有趣的现象:有些股票绝对价差很小,但有效价差却大得惊人。原因是什么?订单簿深度不够,你的单子一进去就把价格推高了。这就是所谓的「市场冲击成本」。
4.4 价差与市场流动性判断
价差是流动性的核心指标之一。我个人习惯把流动性分为三个等级:
- 高流动性:相对价差 < 0.1%,绝对价差稳定,有效价差接近绝对价差。比如主流股指期货、大型蓝筹股。
- 中等流动性:相对价差 0.1% - 0.5%,价差偶尔跳变。比如一些中小盘股。
- 低流动性:相对价差 > 0.5%,价差频繁跳变,有效价差远大于绝对价差。比如某些冷门债券、小市值股票。
你想想看,如果一个品种的相对价差超过1%,做一次来回交易成本就超过2%。这还怎么玩?
4.5 价差分析框架
下面这张图是我自己总结的价差分析框架,帮你理清思路:
4.6 Python实战:价差计算
光说不练假把式。下面是我常用的价差计算代码,你直接拿去用:
import pandas as pd
import numpy as np
def calculate_spreads(df):
"""
计算三种价差
df: 包含 bid_price1, ask_price1, trade_price 的DataFrame
"""
# 中间价
df['mid_price'] = (df['bid_price1'] + df['ask_price1']) / 2
# 绝对价差
df['absolute_spread'] = df['ask_price1'] - df['bid_price1']
# 相对价差
df['relative_spread'] = df['absolute_spread'] / df['mid_price'] * 100
# 有效价差(假设成交价已知)
df['effective_spread'] = 2 * abs(df['trade_price'] - df['mid_price'])
return df
# 示例数据
data = {
'bid_price1': [10.00, 10.01, 10.00, 9.99],
'ask_price1': [10.05, 10.06, 10.05, 10.04],
'trade_price': [10.05, 10.02, 10.04, 10.00]
}
df = pd.DataFrame(data)
result = calculate_spreads(df)
print(result[['absolute_spread', 'relative_spread', 'effective_spread']])
好了,价差这块就讲到这里。记住一句话:价差是流动性的价格,深度是流动性的数量。两者结合,才能看清市场的真实面貌。