订单流与成交量:读懂市场的微观结构

做量化交易这些年,我越来越觉得,价格只是表象,真正的秘密藏在订单流里。说白了,K线图是结果,订单流才是原因。今天我们就来聊聊这个底层逻辑。

订单流的基本概念

什么是订单流?我习惯把它理解为「市场资金的呼吸」。每一笔买单、每一笔卖单,就像空气分子一样,在交易所的订单簿里碰撞、成交。你想想看,价格为什么会上涨?不是因为什么技术指标金叉了,而是因为主动买入的力量大于主动卖出的力量。

订单流的核心,就是追踪这些「主动」的成交。被动挂单的人只是守株待兔,真正推动价格的是那些主动吃单的人。

核心观点:订单流分析,就是通过观察主动买盘和主动卖盘的博弈,来预判价格的短期方向。这不是玄学,是实实在在的资金流向。

主动买盘与主动卖盘

这里有个容易混淆的概念,我当年也踩过坑。主动买盘和主动卖盘,不是看成交价涨了还是跌了,而是看谁先动手。

  • 主动买盘:买方直接以卖一价或更高的价格吃单。这叫「追着买」,说明买方着急,看好后市。
  • 主动卖盘:卖方直接以买一价或更低的价格砸单。这叫「砸盘卖」,说明卖方恐慌,或者不看好。

举个例子。假设当前卖一价是10.00元,买一价是9.99元。这时候突然来了一笔10.00元的买单,把卖一给吃了——这就是主动买盘。反过来,如果一笔9.99元的卖单砸下来,把买一给吃了——那就是主动卖盘。

个人经验:我在做高频策略时,经常盯着主动买盘和主动卖盘的差值。如果连续3笔都是主动买盘,而且量在放大,我基本会判断短期要拉升。这个信号比MACD金叉快得多。

成交量与成交笔数

很多人只看成交量,其实不够。成交量和成交笔数结合起来,才能看出门道。

指标 含义 实战意义
成交量 一段时间内成交的总股数/合约数 反映市场活跃度
成交笔数 一段时间内成交的总次数 反映参与者的分散程度

为什么这两个要一起看?我遇到过这样的情况:某只股票成交量突然放大,但成交笔数没怎么变。这说明什么?说明是几笔大单在交易,可能是机构在对倒或者建仓。反过来,如果成交量不大但成交笔数很多,那就是散户在频繁交易,没什么方向性。

避坑指南:我曾经只看成交量做判断,结果被假突破坑了好几次。后来加上成交笔数分析,才过滤掉了很多噪音。记住:大成交量+小笔数=主力行为;小成交量+大笔数=散户行情。

Tick数据与分钟数据

说到数据粒度,就不得不提Tick数据和分钟数据。这两者的区别,就像显微镜和望远镜。

Tick数据,就是每一笔成交的原始记录。它包含:成交时间、成交价格、成交量、成交方向(主动买还是主动卖)。这是最细粒度的数据,也是订单流分析的基础。

分钟数据,是把Tick数据按分钟聚合后的结果。比如1分钟K线,就是这一分钟内的开盘价、收盘价、最高价、最低价、总成交量。

我个人习惯,做日内策略用Tick数据,做波段策略用分钟数据。为什么?因为Tick数据噪音大,但信号快;分钟数据平滑,但会丢失细节。

关键区别:Tick数据能告诉你「谁在买、谁在卖」,分钟数据只能告诉你「涨了还是跌了」。如果你想做VPIN模型,必须用Tick数据,因为VPIN的核心就是计算单位时间内的主动买卖不平衡程度。

知识体系结构图

下面这张图,是我梳理的订单流与成交量的核心逻辑。你可以把它当作本章的思维导图。

订单流与成交量 订单流基本概念 主动买盘与主动卖盘 成交量与成交笔数 追踪资金流向 预判价格方向 识别主力行为 主动买盘:追着买 主动卖盘:砸盘卖 差值判断多空 成交量:活跃度 成交笔数:分散度 结合判断真伪 Tick数据是原料,分钟数据是成品 VPIN模型必须基于Tick数据构建

实战中的Tick数据处理

最后,分享一段我常用的Tick数据预处理代码。别小看这一步,数据没处理好,后面模型全是垃圾。

import pandas as pd

def process_tick_data(df):
    """
    处理Tick数据,提取主动买卖信息
    df必须包含:time, price, volume, direction
    direction: 1=主动买, -1=主动卖
    """
    # 计算累计主动买卖量
    df['buy_volume'] = df['volume'].where(df['direction'] == 1, 0)
    df['sell_volume'] = df['volume'].where(df['direction'] == -1, 0)
    
    # 按分钟聚合
    df['minute'] = df['time'].dt.floor('1min')
    minute_data = df.groupby('minute').agg({
        'buy_volume': 'sum',
        'sell_volume': 'sum',
        'volume': 'sum',
        'price': 'last'
    }).reset_index()
    
    # 计算净主动买入量
    minute_data['net_buy'] = minute_data['buy_volume'] - minute_data['sell_volume']
    
    return minute_data

小提示:实际生产中,Tick数据量很大,一天可能几百万条。我建议用Dask或Polars来处理,Pandas在数据量大的时候会卡死。别问我怎么知道的,都是泪。

好了,订单流和成交量的基础就聊到这里。记住一句话:价格会说谎,但订单流不会。下一节我们就要用这些基础来搭建VPIN模型了,到时候你会发现,这些概念就是模型的砖瓦。

专注资料整理