2. 流动性度量指标:买卖价差、市场深度、成交额与换手率

聊流动性,不能光靠感觉。你得有尺子去量。

我刚开始做量化那会儿,以为流动性好就是成交量够大。后来吃了亏才明白——成交量只是冰山一角。真正的流动性,藏在价差里,藏在深度里,藏在那些你看不见的挂单背后。

今天咱们就把这四把尺子掰开揉碎了讲清楚。买卖价差、市场深度、成交额、换手率。每个指标都有它的脾气,也有它的坑。

2.1 买卖价差:最直接的流动性成本

买卖价差,英文叫 Bid-Ask Spread。说白了,就是你想买,有人想卖,中间那个差价。

你想想看,如果你现在要买100股茅台,卖一价是1800,买一价是1799。那差价就是1块钱。这1块钱,就是你为流动性付出的成本。

我个人习惯把价差分成两种:

  • 绝对价差:卖一价 - 买一价。简单粗暴。
  • 相对价差:绝对价差 / 中间价。这个更有用,因为不同价格的股票没法直接比。

举个例子:

# 计算相对价差
bid_price = 10.02   # 买一价
ask_price = 10.05   # 卖一价
mid_price = (bid_price + ask_price) / 2
relative_spread = (ask_price - bid_price) / mid_price
print(f"相对价差: {relative_spread:.4%}")
# 输出: 相对价差: 0.2991%

我在项目中遇到过一只小盘股,平时价差也就0.1%。结果财报发布前半小时,价差直接飙到0.8%。这说明什么?做市商在避险,流动性在枯竭。

核心结论:价差越小,流动性越好。价差突然扩大,往往是风险信号。

避坑指南:我曾经用分钟级数据算价差,结果发现很多时刻只有买一或卖一,没有对手盘。这时候价差算出来是无穷大。嗯,记得做数据清洗,把这种异常值剔除掉。

2.2 市场深度:你能吃下多少单子

价差告诉你成本,深度告诉你容量。

市场深度,就是看盘口上挂了多少单子。我一般看两个维度:

  • 五档深度:买一到买五,卖一到卖五的总量
  • 深度斜率:价格每变动一个单位,挂单量变化多少

为什么要看深度?

你想想看,价差很小,但深度只有几百股。你一个大单砸进去,直接就把盘口打穿了。这种流动性,叫「薄流动性」。看着好,一碰就碎。

我习惯用这个公式来评估深度质量:

# 计算加权深度
def calc_weighted_depth(bids, asks, n_levels=5):
    """
    bids: [(价格, 数量), ...]
    asks: [(价格, 数量), ...]
    """
    bid_depth = sum([price * qty for price, qty in bids[:n_levels]])
    ask_depth = sum([price * qty for price, qty in asks[:n_levels]])
    return bid_depth, ask_depth

# 示例数据
bids = [(10.00, 1000), (9.99, 2000), (9.98, 1500)]
asks = [(10.01, 800), (10.02, 1200), (10.03, 1800)]
bid_d, ask_d = calc_weighted_depth(bids, asks)
print(f"买方深度: {bid_d:.0f}, 卖方深度: {ask_d:.0f}")

注意:深度数据是快照数据,变化极快。我建议用1秒或3秒的快照频率,太慢了会失真。另外,有些交易所的深度数据是「伪深度」——挂单撤单很快,看着深其实虚。这个要结合撤单率来判断。

2.3 成交额:最朴素的流动性指标

成交额,就是一段时间内成交的总金额。这个指标最直观,也最容易拿到。

但我要说一句:成交额大,不代表流动性好。

为什么?

因为成交额是「事后」指标。它告诉你刚才发生了什么,但没法告诉你现在能不能成交。我见过一些股票,早盘半小时成交额巨大,但那是几笔大单对敲出来的。真正的散户单子进去,照样滑点严重。

我个人习惯把成交额拆开看:

  • 大单成交额占比:单笔超过50万的成交占总成交的比例。占比太高,说明是机构在玩,散户流动性其实不好。
  • 成交额的时间分布:把一天分成48个30分钟,看成交额是否均匀。如果集中在开盘和收盘,中间稀稀拉拉,那流动性其实很差。

经验之谈:成交额低于500万的股票,我基本不碰。不是因为不能赚钱,而是你进去容易出来难。我曾经做回测时忽略了这个,结果实盘一跑,滑点吃掉了我一半的利润。

2.4 换手率:流动性的温度计

换手率 = 成交量 / 流通股本。它衡量的是股票被「翻炒」的频率。

换手率高,说明市场活跃,资金进出频繁。换手率低,说明大家都在装死。

但换手率有个大坑——流通股本的计算口径。

有些股票的大股东持股是锁定的,实际流通盘只有总股本的一小部分。你用总股本算换手率,会严重低估。我建议用「实际流通股本」来计算:

# 修正换手率计算
def calc_turnover_rate(trade_volume, total_shares, locked_shares):
    """
    trade_volume: 当日成交量
    total_shares: 总股本
    locked_shares: 锁定股份(大股东、战略投资者等)
    """
    actual_free_shares = total_shares - locked_shares
    turnover = trade_volume / actual_free_shares
    return turnover

# 示例
volume = 5000000  # 500万股
total = 100000000  # 1亿股
locked = 60000000  # 6000万股锁定
turnover = calc_turnover_rate(volume, total, locked)
print(f"修正换手率: {turnover:.2%}")
# 输出: 修正换手率: 12.50%

你看,用总股本算只有5%,用实际流通算就是12.5%。差别很大。

我的习惯:换手率在1%-5%之间,流动性比较健康。低于0.5%的,基本是僵尸股。高于10%的,要么是妖股,要么是重大消息驱动——这时候流动性虽然好,但风险也大。

2.5 四个指标怎么配合使用

单独看一个指标,容易误判。我一般四个指标一起看,形成一个综合判断。

这里我画了一张图,帮你理清它们的关系:

流动性度量指标四维框架 流动性 综合评估 买卖价差 交易成本 市场深度 承载能力 成交额 资金热度 换手率 活跃程度 四个维度相互印证,单一指标容易误判

我一般这样用:

  1. 先看价差:价差太大,直接pass。成本太高,没法做。
  2. 再看深度:价差小但深度浅,只能做小单。大资金要谨慎。
  3. 成交额验证:成交额和深度是否匹配?深度深但成交额小,说明挂单可能是虚的。
  4. 换手率兜底:换手率太低,说明市场关注度不够,进去容易出不来。

实战建议:我写过一个综合评分函数,把四个指标归一化后加权求和。价差权重30%,深度30%,成交额25%,换手率15%。这样能快速筛选出流动性好的标的。当然,权重你可以根据自己的交易风格调整。

好了,这四把尺子你都拿到了。下次看一只股票,别只盯着成交量。把价差、深度、成交额、换手率都拉出来遛遛。你会发现,很多看似热闹的股票,其实流动性一塌糊涂。


公众号:蓝海资料掘金营,微信deep3321