一、流动性预判概述

1.1 什么是流动性?

流动性,说白了就是市场能不能让你「想买就买、想卖就卖」。

我刚开始做量化那会儿,总觉得流动性是个很虚的概念。直到有一次,我挂了一笔大单,结果盘口瞬间被打穿,成交价滑出去好几个点——嗯,那次教训让我记住了流动性的真实含义。

从技术角度讲,流动性包含三个维度:

  • 深度:盘口挂单的总量。深度越大,大单冲击越小。
  • 宽度:买卖价差。价差越小,交易成本越低。
  • 弹性:价格被冲击后恢复的速度。恢复越快,流动性越好。

举个例子,你想想看:

市场 深度(买一+卖一) 价差 弹性
BTC/USDT(币安) 约500 BTC 0.01% 极快(<1秒)
某小币种 约5 BTC 0.5% 慢(>10秒)

看到区别了吧?流动性好的市场,你进出自由;流动性差的市场,你动一动就引发价格波动。

1.2 为什么预判流动性?

我个人习惯,在每次交易前都会问自己一个问题:「现在的流动性,能撑住我的策略吗?」

预判流动性,核心原因有三个:

  1. 控制交易成本:流动性差的时候,滑点会吃掉你的利润。我在项目中遇到过,一个看起来盈利的策略,实盘跑起来却是亏的——后来一查,全是滑点惹的祸。
  2. 避免踩踏:流动性枯竭时,市场会瞬间崩塌。你想想看,2020年3月那次原油暴跌,流动性直接消失,想平仓都平不掉。
  3. 优化执行算法:知道流动性什么时候好、什么时候差,你就能选择最佳时机下单。说白了,就是「好天气出海,坏天气收帆」。

核心观点:流动性预判不是锦上添花,而是量化交易的生存技能。

1.3 流动性对交易策略的影响

流动性对策略的影响,比你想象的要大得多。我把它分成三个层面:

(1)高频策略

这类策略对流动性最敏感。我曾经做过一个做市策略,专门吃价差。流动性好的时候,一天能赚几十个BP;流动性一差,价差扩大,策略直接失效。

为什么会这样?因为高频策略依赖的是「快速进出」,流动性差的时候,你的订单根本成交不了。

(2)中低频策略

这类策略看似对流动性不敏感,其实不然。举个例子,你做一个趋势跟踪策略,信号出来了,但流动性差,你只能分批建仓。结果呢?建仓还没完成,趋势已经走完了。

嗯,这里要注意:中低频策略的「执行成本」往往被低估。我建议你在回测时,一定要加入流动性成本模型。

(3)套利策略

套利策略对流动性的要求是最苛刻的。因为套利机会转瞬即逝,流动性差的话,你根本抓不住。

我记得有一次做跨交易所套利,两个交易所的价差出现了,但其中一个交易所流动性极差,我挂单后等了30秒才成交——价差早就消失了。

避坑指南:我曾经犯过一个错误,在回测时用了「理想流动性」假设,结果实盘跑出来亏损严重。后来我加了一个「流动性折扣因子」,才让回测结果更贴近实盘。

1.4 流动性预判的核心逻辑

说了这么多,流动性预判到底怎么做?我画了一张图,帮你理清思路:

流动性预判核心逻辑 输入数据 订单簿、成交量、价差 特征提取 流动性指标、时序特征 预判结果 流动性等级/概率 订单簿深度分析 成交量分布分析 价差波动分析 预判结果用于:交易时机选择、订单拆分、风险控制 # 流动性预判示例(伪代码) liquidity_score = f(order_book_depth, spread, volume_profile)

这张图展示了我常用的预判流程。简单来说:

  • 输入层:收集订单簿、成交量、价差等原始数据
  • 特征提取:计算流动性指标,比如深度加权价差、成交量斜率等
  • 输出层:给出流动性等级(高/中/低)或概率值

注意:流动性预判不是一次性的工作。市场是动态的,流动性每时每刻都在变化。我建议你至少每5秒重新计算一次流动性指标。

1.5 一个简单的流动性预判代码

说了这么多理论,来点实际的。下面是我常用的一个流动性预判函数:

def liquidity_judge(order_book):
    """
    简单的流动性预判函数
    order_book: 订单簿数据,包含 bids 和 asks
    """
    # 计算买卖价差
    best_bid = order_book['bids'][0][0]
    best_ask = order_book['asks'][0][0]
    spread = (best_ask - best_bid) / best_bid
    
    # 计算前5档深度
    bid_depth = sum([b[1] for b in order_book['bids'][:5]])
    ask_depth = sum([a[1] for a in order_book['asks'][:5]])
    total_depth = bid_depth + ask_depth
    
    # 流动性评分
    score = total_depth / (spread + 0.0001)
    
    if score > 1000:
        return '高流动性'
    elif score > 100:
        return '中流动性'
    else:
        return '低流动性'

这个代码很简单,但很实用。我在实盘里用的就是这个思路的升级版。

个人经验:这个函数里的阈值(1000和100)不是固定的。不同品种、不同市场,阈值都不一样。我建议你根据历史数据自己调参。

好了,流动性预判的概述就讲到这里。记住一句话:不懂流动性,就别做量化。这是我在这个行业摸爬滚打多年最深的体会。

专注资料整理