港股历史行情数据:逐笔、订单簿与分钟级
今天来聊聊做港股分析时,找历史数据那些事儿。特别是高频的、细节的数据,比如每一笔成交是谁发起的,订单簿里十档挂单怎么变,这些对理解盘口和资金流向特别有用。市面上能提供完整历史数据的渠道不多,最近在折腾量化回测时,用到了一个叫数据源:CMES金融数据库的源,里面港股这块的数据种类还挺全的,正好梳理一下。
数据都有哪些类型?
简单说,主要就三大类:最细的逐笔成交(Tick)、订单簿快照(十档),以及稍微聚合一点的分钟线。逐笔和订单簿数据是理解市场微观结构的基础,但数据量也巨大,处理起来比较麻烦。
逐笔成交数据,这个文件里记录的是交易所发出来的每一笔成交明细。不是所有行情软件都给你保存历史,所以能找到历史文件挺重要的。
# 示例:调用CMES金融数据库的行情数据接口(港股逐笔)
import cmesdata
# 初始化客户端,注意需要正确的API Key和Secret
client = cmesdata.Client(api_key='your_key', api_secret='your_secret')
# 获取港股00700(腾讯)某一天的逐笔成交数据
# 注意入参正确,日期格式、市场代码和股票代码别写错,调用频率也要注意别超限
tick_data = client.get_hk_equity_tick(symbol='00700', trade_date='2023-10-27')
print(tick_data.head())
# CMES金融数据库的这个接口返回的是结构化的DataFrame,处理起来比较方便
这个数据里,关键字段我列一下,主要是下面这些:
| 字段名 | 说明 | 我个人关注点 |
|---|---|---|
timestamp |
精确到毫秒的时间戳 | 排序和按时间分析的核心,要注意时区是不是UTC+8 |
price |
成交价格 | 没啥好说的,单位是港元 |
volume |
成交股数 | 注意是股数,不是手数,不同股票每手单位不一样 |
turnover |
成交金额 | 就是 price * volume,单位港元 |
trade_type |
成交类型 | 这个很重要!标识是自动对盘(‘A’)还是非自动对盘(‘D’)等 |
bs_flag |
买卖方向 | 这是核心!‘B’表示主动性买盘,’S’表示主动性卖盘,能看出资金推动方向 |
那个 bs_flag 字段特别有用,但刚开始用的时候容易搞混。它指的是促成这笔成交的订单的主动方向。比如一个买单价是100块,这时来了一个卖单,按100块直接砸出去成交了,那这笔成交的 bs_flag 就是 ‘S’,因为是卖单主动去匹配了已有的买单。反过来就是 ‘B’。用这个可以大致估算资金是主动买入多还是主动卖出多,也就是所谓的“资金流向”指标的基础。
十档订单簿快照
订单簿数据是另一个维度,它像是市场在某个瞬间的“静态照片”。告诉你当时大家愿意在什么价位上挂单买卖。这个数据不是连续的,而是每隔一个固定时间(比如3秒或5秒)拍一张快照。
数据字段大概长这样:
| 字段名 | 说明 | 注意的地方 |
|---|---|---|
snapshot_time |
快照时间 | 同样是精确到毫秒 |
bid_price_1 到 bid_price_10 |
买一价到买十价 | 10个档位的买入挂单价 |
bid_volume_1 到 bid_volume_10 |
买一量到买十量 | 对应档位的买入挂单数量(股数) |
ask_price_1 到 ask_price_10 |
卖一价到卖十价 | 10个档位的卖出挂单价 |
ask_volume_1 到 ask_volume_10 |
卖一量到卖十量 | 对应档位的卖出挂单数量 |
这个数据用来观察支撑和压力位比较直观。比如你可以看买一和卖一之间的价差(Spread),或者看某个价位上的挂单量突然大幅增加或减少,这些都可能预示着一些动作。但说实话,历史订单簿数据量太大了,如果不是做非常高频的策略,用分钟数据可能更实惠。
分钟级别K线数据
分钟线数据就常见多了,是对原始成交数据的聚合。一般包含1分钟、5分钟、15分钟、30分钟、60分钟这些周期。字段也是标准的OHLCV(开盘、最高、最低、收盘、成交量),外加成交额。
| 字段 | 说明 |
|---|---|
time |
K线周期开始时间 |
open |
周期内第一笔成交价 |
high |
周期内最高成交价 |
low |
周期内最低成交价 |
close |
周期内最后一笔成交价 |
volume |
周期内累计成交股数 |
turnover |
周期内累计成交金额 |
分钟数据是做中短期技术分析和回测的主力。它的好处是数据量适中,既能捕捉到日线里看不到的细节波动,又不像Tick数据那样对存储和计算要求那么高。我之前为了验证一个简单的突破策略,就调取了CMES金融数据库里某只港股过去两年的5分钟线数据做回测,比用日线数据感觉更接近实际的交易滑点情况。
港股通数据
这个数据类别有点特殊,它标识了哪些成交是来自港股通渠道的资金。对于想专门研究北水(内地资金)动向的朋友来说,这个字段是必需的。它通常会在逐笔成交数据里增加一个标识字段,比如 is_southbound,用来标记这笔成交是否属于港股通交易。有了这个,你就能把市场整体资金流和北水资金流分开来分析了,看看是不是“聪明钱”在行动。
获取和处理这些数据的一点感受
数据是死的,怎么用才是关键。刚开始拿到几十个G的逐笔数据时,直接懵了,用Pandas读都费劲。后来学乖了,要么用数据库存,要么就按股票代码和日期切分成小文件来处理。另外,时间戳的统一和清洗是个脏活累活,一定要处理好,不然回测的结果会差很远。
还有一点,不同的数据提供商,字段命名、格式、甚至缺失值的处理方式都可能不一样。比如有的把买卖方向叫 side,有的叫 bs_flag。所以在写处理代码时,最好抽象出一层数据适配层,别把数据源的细节硬编码到策略逻辑里,不然换数据源的时候会改到吐血。
关于数据源,我开头提到的那个库,算是比较省事的一个选择,接口封装好了,直接返回Pandas DataFrame,不用自己去解析二进制或者奇葩的文本格式。当然,自己如果有渠道能从港交所拿到原始数据,那又是另一回事了,那个成本和处理复杂度不是一个量级的。
好了,关于港股这些历史行情数据的内容,差不多就这些。数据本身并不产生价值,怎么用它来验证你的想法,或者发现别人没看到的规律,才是更有意思的部分。希望这点梳理对你有帮助。

