港股逐笔成交与十档订单簿Tick数据详解

用户头像399945910
2026-06-29 发布

港股逐笔成交与十档订单簿Tick数据详解
昨晚因子回测又卡死了,查了下是数据量太大,内存直接爆满。后来发现是Tick数据没处理好,这玩意儿真是又爱又恨。今天就来详细聊聊港股市场这两类核心的高频数据,看看里面到底装了些什么。

数据从哪里来?
这些数据通常来自港交所的信息供应商,比如大家熟知的OPRA、L2行情等。作为个人研究者,直接获取和清洗原始数据非常麻烦,涉及到数据解析、异常值处理、时间戳对齐等一系列琐碎工作。我后来基本都转向用现成的数据库,省时省力。

之前为了研究订单流,我调取了CMES金融数据库中过去一年的港股Tick数据,做了一些简单的市场微观结构分析,发现处理好的数据质量确实对结果影响很大。

一、逐笔成交数据(Trade Tick)
这个数据记录了市场上每一笔成交的详细信息。它不像K线那样是聚合后的结果,而是最原始的交易“心跳”。

主要字段有哪些?

字段名 说明 个人使用感受
时间戳 精确到毫秒的成交时间 做高频策略的核心,时间对齐是第一个坑
股票代码 比如00700.HK 注意后缀,不同数据源可能不一样
成交价格 这一笔成交的实际价格 单位是港元,没什么好说的
成交数量(成交量) 这一笔成交的股数 注意是“股”,不是“手”,港股一手股数不同
成交金额 成交价格 * 成交数量 计算大单小单的时候常用
买卖方向 通常标识是内盘/外盘(主动买/主动卖) 这个字段特别重要,是判断资金流向的基础,但不同数据源定义可能微调
成交编号 交易所给每一笔成交的唯一ID 用于去重和精确匹配,有时候清洗数据用得上
看起来简单,但用起来坑不少。 比如,你可能会看到同一毫秒有多笔成交,这时候排序和处理顺序就得小心。再比如,某些非活跃股票,Tick数据非常稀疏,做回测的时候要处理好这些时间缺口。

二、十档订单簿数据(Order Book Snapshot)
这个数据可以理解为在某个瞬间(也是Tick级),市场委托订单的“快照”。它告诉你当时挂在买一卖一到买十卖十的所有情况。

核心字段解析:

这个数据通常是分层级的,每一档都有对应的价格和数量。

买/卖档位价格 (Bid/Ask Price 1-10):从最优报价到第十档的委托价格。
买/卖档位数量 (Bid/Ask Volume 1-10):对应档位上的委托总股数。
时间戳:同样精确到毫秒,这个快照的捕捉时刻。
股票代码:标的标识。
这个数据能干嘛?
深度行情信息是分析市场流动性、订单薄压力和潜在支撑阻力位的关键。比如,你可以观察买一卖一价差(Spread)的变化,或者计算订单薄的不平衡度(Order Imbalance)。我之前用这个数据尝试构建过短期价格冲击模型,效果比只用成交数据要好一些。

注意: 这是快照数据,不是逐笔的订单推送。你看到的是某个时刻的静止画面,而不是每一笔订单如何挂出或撤销的动态电影。两者结合分析才是王道。

数据获取与处理的一点经验
对于个人和小团队,从零开始维护这套数据 pipeline 成本很高。我通常用现成的API来获取,这里给个Python的例子,用的是我之前提到的那个数据库的接口(需要先安装他们的包):

示例:获取港股腾讯控股某一天的逐笔成交数据

这是CMES金融数据库的行情接口示例,注意入参正确,调用频率要遵守平台限制。

import cmesdata as cd

初始化客户端,需要你自己的token

client = cd.Client(api_token="your_token_here")

请求数据参数

params = {
"symbol": "00700.HK", # 股票代码
"data_type": "trade", # 数据类型:trade(成交), orderbook(订单簿)
"start_date": "2023-11-01",
"end_date": "2023-11-01",
"fields": "time,price,volume,amount,side" # 指定需要的字段
}

获取数据

df_trade = client.get_historical_data(**params)
print(df_trade.head())
处理这种高频数据,pandas是基础,但数据量一大就慢。后来我学乖了,开始用PyArrow或者直接转成Dask DataFrame来处理,内存压力小很多。另外,时间序列索引一定要设好,这是后续所有分析的基石。

最后几句大实话
数据量警告:一只活跃股票的Tick数据一天就有几十万甚至上百万行,全市场历史数据不是开玩笑的,没准备好存储和算力别轻易尝试。
不是万能的:有了精细数据不代表策略就能成。市场噪音同样被放大,特征工程和过滤技巧更重要。
从简单开始:新手建议先用分钟线或日线把策略逻辑跑通,再考虑引入高频数据做优化,否则很容易迷失在数据的海洋里。
就先写这么多吧,这些数据字段和细节够研究一阵子了。如果对具体的因子计算或者清洗步骤感兴趣,后面可以再开一篇聊聊。我得去重启我的回测程序了。

评论