流动性定义与度量:四个维度与常见指标

大家好,我是你们的讲师。今天咱们来聊聊流动性——这个在量化交易里听着玄乎、但实际特别实在的概念。

说实话,我刚入行那会儿,觉得流动性不就是“能不能买卖”嘛。后来在实盘里吃过亏,才明白这东西远没那么简单。你想想看,一个标的流动性好不好,直接决定了你的策略能不能跑起来、跑得稳不稳。

一、流动性的四个维度

业内对流动性的定义,通常从四个维度来拆解。我个人习惯把这四个维度记成“宽深即弹”,好记又好用。

核心框架:流动性的四个维度

  • 宽度(Width):交易成本,说白了就是买卖价差
  • 深度(Depth):市场能承载的订单量
  • 即时性(Immediacy):成交速度有多快
  • 弹性(Resilience):价格被冲击后恢复的速度

下面我用一张图把这四个维度的关系串起来,方便你理解。

流动性四维度 宽度 买卖价差 深度 订单簿厚度 即时性 成交速度 弹性 价格恢复能力 四个维度共同刻画一个市场的流动性全貌 宽深即弹 → 成本低、容量大、成交快、恢复强

二、宽度:交易成本的第一道门槛

宽度,最直观的体现就是买卖价差(Bid-Ask Spread)。你打开任何交易软件,看到的买一价和卖一价之间的差值,就是宽度。

我在做高频策略时,最怕遇到价差突然拉大的情况。有一次,某个小盘股在财报发布前,价差从0.01元直接跳到0.05元。我挂的单子瞬间被吃掉,多付了4倍的成本。嗯,从那以后,我所有策略都会加一个价差监控模块。

实战小贴士:

价差通常用相对值来衡量:相对价差 = (卖一价 - 买一价) / 中间价。这样不同价格的标的之间才有可比性。

三、深度:你能吃下多少货

深度看的是订单簿上挂了多少单。一个深度好的市场,你下个大单,价格不会剧烈波动。

举个例子,某只股票买一挂了1000手,卖一挂了800手。你想买500手,那没问题,直接吃掉卖一就行。但如果你想买2000手,那就要把卖一到卖五全吃掉,价格自然就上去了。

深度指标里,我常用的是订单簿斜率——把不同档位的挂单量画成一条曲线,斜率越陡,说明深度越差。

# 计算订单簿斜率(简化版)
def order_book_slope(bids, asks):
    """
    bids: [(价格, 数量), ...] 买盘
    asks: [(价格, 数量), ...] 卖盘
    """
    # 取前5档
    top_bids = bids[:5]
    top_asks = asks[:5]
    
    # 计算累计深度
    bid_depth = sum([q for p, q in top_bids])
    ask_depth = sum([q for p, q in top_asks])
    
    # 价差范围
    spread = top_asks[0][0] - top_bids[0][0]
    
    # 斜率 = 深度 / 价差
    slope = (bid_depth + ask_depth) / spread if spread > 0 else 0
    return slope

四、即时性:快就是一切

即时性,说白了就是你下单后多久能成交。在T+1市场里,这个指标没那么敏感。但在期货、外汇这些T+0市场,即时性直接决定了你的滑点成本。

我记得有一次做股指期货的套利策略,两边合约的价差只有0.2个点。理论上能赚,但实际执行时,因为一边成交慢了0.5秒,价差已经变了。那次亏得不多,但让我记住了:没有即时性的流动性,是假的流动性

注意:

即时性不能只看成交速度,还要看成交率。有些市场挂单后半天不成交,那即时性就是零。我建议用“挂单到成交的平均时间”来衡量,而不是单纯看撮合速度。

五、弹性:市场受伤后能自愈吗

弹性,是四个维度里最容易被忽视的。它衡量的是:大单冲击后,价格能不能回到原来的位置。

弹性好的市场,比如沪深300成分股,一个大单砸下去,几分钟内价格就恢复了。弹性差的市场,比如某些小盘股,砸下去就起不来了——那说明流动性已经被破坏了。

我一般用价格恢复系数来量化弹性:

# 计算价格恢复系数
def resilience_coefficient(price_series, shock_time, window=60):
    """
    price_series: 价格序列
    shock_time: 大单冲击发生的时间点
    window: 观察窗口(秒)
    """
    pre_price = price_series[shock_time - 1]
    post_prices = price_series[shock_time: shock_time + window]
    
    # 最大偏离
    max_deviation = max(abs(p - pre_price) for p in post_prices)
    
    # 最终恢复程度
    final_deviation = abs(post_prices[-1] - pre_price)
    
    # 恢复系数 = 1 - (最终偏离 / 最大偏离)
    coefficient = 1 - (final_deviation / max_deviation) if max_deviation > 0 else 1
    return coefficient

六、常见流动性指标

聊完四个维度,咱们看看实际中怎么度量。下面这三个指标,是我在项目中用得最多的。

指标 计算公式 衡量维度 我的使用场景
价差(Spread) 卖一价 - 买一价 宽度 日内策略、高频交易
Amihud 非流动性指标 |日收益率| / 日成交额 宽度+深度 选股、因子分析
换手率(Turnover) 成交量 / 流通股本 深度+即时性 中低频策略、风控

七、Amihud 指标:一个指标看透流动性

Amihud 指标是我个人非常喜欢的一个指标。它用一个公式,同时捕捉了宽度和深度两个维度。

公式很简单:Amihud = |日收益率| / 日成交额

什么意思呢?你想想看,如果一只股票涨了1%,但只用了100万的成交额,说明流动性很差——一点点钱就能把价格拉起来。反过来,如果涨了1%用了10个亿,那流动性就很好。

我在做多因子模型时,Amihud 指标是必选的流动性因子。它的好处是数据容易获取,而且在不同市场之间可比。

避坑指南:

我曾经在回测时直接用 Amihud 的原始值,结果发现它和市值高度相关——大盘股天然 Amihud 小。后来我做了市值中性化处理,因子效果才真正出来。这一点你一定要注意。

八、换手率:最朴素的流动性指标

换手率,大家应该都很熟悉。它反映的是股票被交易的活跃程度。

换手率高,说明市场参与者多,流动性好。但这里有个坑:换手率高的股票,往往波动也大。你不能只看换手率就判断流动性好,还要结合价差来看。

举个例子,某只妖股换手率50%,但买卖价差有2%。这说明什么?说明大家都在赌,但没人愿意做市。这种流动性,其实是虚的。

我个人习惯把换手率和价差放在一起看,做一个二维分类:

  • 高换手 + 低价差:真正的流动性好(比如茅台)
  • 高换手 + 高价差:投机性强,流动性虚(比如某些小盘妖股)
  • 低换手 + 低价差:机构控盘,流动性一般
  • 低换手 + 高价差:流动性极差,尽量避开

九、总结一下

流动性这东西,说起来抽象,但落到实盘里,每一个维度都直接关系到你的盈亏。宽度决定成本,深度决定容量,即时性决定执行,弹性决定稳定性。

我建议你从今天开始,在回测框架里加上这几个流动性指标。哪怕只是简单算一下持仓标的的 Amihud 值,也能帮你避开不少坑。

好了,这一章就到这里。流动性是微观结构的基础,后面我们会一步步深入,把每个维度都拆开来看。


专注资料整理