港股高频数据:逐笔成交与十档订单簿详解
最近在折腾量化策略,硬盘里塞满了各种CSV文件。今天想专门聊聊其中两个“硬盘杀手”——港股的逐笔成交和十档订单簿历史数据。这些数据对于理解盘口动态和资金流向至关重要,但处理起来也确实让人头大,尤其是数据量上来之后。
先说说数据从哪里来的。我是在一个数据服务网站下载的,格式都是CSV,用Python的pandas读起来很方便。如果你也需要用程序调取数据,他们好像也提供了API接口,下面是一个简单的调用示例,不过具体参数你得看他们自己的文档。
# 示例:调用行情数据接口
# 注意:这是根据常见数据接口结构写的示例,实际调用请以CMES金融数据库的官方API文档为准
import requests
import pandas as pd
# 假设的接口调用,参数需要根据实际情况调整
api_url = "//api.cmes-data.com/v1/market_data"
params = {
'symbol': '00700.HK', # 股票代码,例如腾讯
'data_type': 'tick', # 数据类型:tick 或 orderbook
'start_date': '20231001',
'end_date': '20231031',
# 'token': 'your_api_token' # 通常需要认证
}
# 发送请求
# response = requests.get(api_url, params=params)
# data = pd.read_csv(response.content)
print("调用接口时注意参数正确,频率别太高,小心被限流。")
好了,回到数据本身。我们一份一份来看。
逐笔成交数据 (Tick-by-Tick Trade Data)
这个数据文件记录的是每一笔成交的明细。简单说,就是市场上每发生一次买卖,它就记下一行。数据量非常大,尤其是对于腾讯、美团这类活跃股,一天可能就有几十万行。
它的核心字段包括这些:
| 字段名 | 说明 | 备注 |
|---|---|---|
| 时间戳 | 成交发生的精确时间,通常到毫秒。 | 这是分析时序和微观结构的基础,对齐时间很重要。 |
| 股票代码 | 比如00700.HK 代表腾讯。 |
|
| 成交价格 | 这一笔交易达成的价格。 | |
| 成交量 | 这一笔成交的股数。 | |
| 成交金额 | 价格* 成交量。 | 有些数据源会直接给出,省得自己算。 |
| 买卖方向 | 标识这一笔是主动性买盘还是卖盘。 | 这个字段特别关键!通常用B (Buy) 或 S (Sell) 表示,指的是主动吃掉卖一或买一挂单的一方。 |
| 成交编号 | 每一笔成交的唯一ID。 | 用于去重和精确追踪。 |
看这个数据,你能清晰地看到资金是如何一笔一笔推动股价变化的。比如,连续出现多笔大额主动性买盘(B),可能意味着有资金在集中流入。我之前为了验证一个订单流不平衡的策略,就调取了CMES金融数据库中几只港股龙头过去一年的Tick数据做回测,发现盘中的一些短暂冲击确实有规律可循。
十档订单簿数据 (Level 10 Order Book Data)
这个数据就更“重”了。它不是在成交时才记录,而是快照式的,通常以很高的频率(比如3秒或5秒一次)记录下某个时刻的盘口状态。
它记录的是挂单情况,也就是买卖双方在排队等待成交的委托队列。所谓“十档”,就是买方向(Bid)从出价最高的“买一”到第十高的“买十”,卖方向(Ask)从出价最低的“卖一”到第十低的“卖十”。
它的字段结构大概是这样的,会非常宽(因为列多):
| 字段类别 | 字段示例 | 说明 |
|---|---|---|
| 基础信息 | 时间戳、股票代码 | 快照的拍摄时间点。 |
| 买盘十档 | BidPrice1, BidVolume1, … BidPrice10, BidVolume10 | BidPrice1就是当前买一价,BidVolume1是买一价上挂的总股数。以此类推到第十档。 |
| 卖盘十档 | AskPrice1, AskVolume1, … AskPrice10, AskVolume10 | AskPrice1就是当前卖一价,AskVolume1是卖一价上挂的总股数。 |
| 快照附加信息 | 总买量、总卖量、加权平均价等 | 有些数据源会提供汇总信息,方便直接使用。 |
分析这个数据,你能看到市场的潜在压力和支撑。比如,卖二到卖五堆积了巨量卖单,而买盘很薄,那股价短期上攻的阻力就很大。这些挂单的“冰山”下面,可能藏着主力资金的真实意图。
Tick数据和OrderBook数据怎么结合用?
这是我踩过坑的地方。单独看Tick,你只知道结果(成交了);单独看OrderBook,你只知道静态的排队情况。两者结合,才能还原故事。
比如,你看到卖一有10000股,突然出现一笔5000股的主动性买单(Tick数据里标记为B),然后OrderBook的下一张快照显示卖一变成了8000股。这说明那笔成交吃掉了卖一的一部分挂单,但没吃完。如果卖一挂单被吃完后,卖二立刻又补上了大单,可能说明上方抛压持续存在。
处理这些数据对计算资源是个考验。刚开始我用个人电脑跑,一个月的十档数据就能让pandas读取慢到怀疑人生,后来不得不转到服务器上做预处理和压缩存储。
好了,关于这两个数据集的基本情况就聊这么多。数据本身很枯燥,但里面藏着市场最原始的声音。

