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 价差与市场流动性判断

价差是流动性的核心指标之一。我个人习惯把流动性分为三个等级:

  1. 高流动性:相对价差 < 0.1%,绝对价差稳定,有效价差接近绝对价差。比如主流股指期货、大型蓝筹股。
  2. 中等流动性:相对价差 0.1% - 0.5%,价差偶尔跳变。比如一些中小盘股。
  3. 低流动性:相对价差 > 0.5%,价差频繁跳变,有效价差远大于绝对价差。比如某些冷门债券、小市值股票。

你想想看,如果一个品种的相对价差超过1%,做一次来回交易成本就超过2%。这还怎么玩?

避坑指南:我曾经在某个冷门期货品种上吃过亏。当时看绝对价差只有1个tick,觉得流动性不错。结果一开仓,有效价差直接翻了三倍。后来复盘才发现,那个品种的订单簿深度只有几十手,我的单子直接打穿了整个盘口。所以记住:绝对价差小 ≠ 流动性好,一定要看深度。

4.5 价差分析框架

下面这张图是我自己总结的价差分析框架,帮你理清思路:

价差分析框架 绝对价差 相对价差 有效价差 卖一价 - 买一价 单位:元 价差 / 中间价 × 100% 单位:百分比 2 × |成交价 - 中间价| 单位:元 单品种监控 跨品种比较 真实成本评估 三者结合 → 全面判断市场流动性

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']])
小提示:实际生产中,我建议用滚动窗口计算价差的均值、标准差,这样能更稳定地判断流动性变化。比如用过去100笔交易的相对价差均值作为当前流动性的参考。

好了,价差这块就讲到这里。记住一句话:价差是流动性的价格,深度是流动性的数量。两者结合,才能看清市场的真实面貌。

专注资料整理