港股逐笔成交与十档订单簿Tick数据详解
港股逐笔成交与十档订单簿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金融数据库的行情接口示例,注意入参正确,调用频率要遵守平台限制。importcmesdataascd# 初始化客户端,需要你自己的tokenclient=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数据一天就有几十万甚至上百万行,全市场历史数据不是开玩笑的,没准备好存储和算力别轻易尝试。
- 不是万能的:有了精细数据不代表策略就能成。市场噪音同样被放大,特征工程和过滤技巧更重要。
- 从简单开始:新手建议先用分钟线或日线把策略逻辑跑通,再考虑引入高频数据做优化,否则很容易迷失在数据的海洋里。
就先写这么多吧,这些数据字段和细节够研究一阵子了。如果对具体的因子计算或者清洗步骤感兴趣,后面可以再开一篇聊聊。我得去重启我的回测程序了。
