港股Level2行情数据:Tick、十档订单与分钟线详解
昨晚跑因子又把内存给爆了,盯着报错的日志看了半天,发现“元凶”就是港股的逐笔成交数据。这东西数据量太大了,但里面的信息也确实多。今天就来盘一盘这些数据到底包含了什么,以及怎么用。
很多人刚开始接触的时候,容易把逐笔成交和分钟线数据搞混。简单来说,逐笔成交(Tick)是市场每发生一笔交易就记录一次,像个实时播报员,信息最全但也最“占地方”。分钟线则是每分钟给你总结一次,比如这一分钟的开盘价、最高价、成交量等,数据量小很多,适合做初步的回测。
先说说最核心的逐笔成交数据。它记录的是交易所每一笔真实的成交明细。拿到一份这样的数据,你通常会看到下面这些字段:
字段名
说明
一点个人体会
股票代码
比如 00700.HK
港股代码带后缀,这个别弄错了。
交易时间
精确到毫秒的时间戳
做高频或订单流分析时,毫秒级精度是关键。
成交价格
这一笔的实际成交价
最基础的价格信息。
成交数量(或成交量)
这一笔成交了多少股
注意单位是“股”,不是“手”,港股每手股数不一样。
成交金额
这笔交易的总金额
价格 * 数量,有时候数据里会直接给。
买卖方向
标识是主动性买盘还是卖盘
这个很重要!能看出资金是主动向上买还是向下砸。通常B代表买,S代表卖。
订单号
交易所生成的唯一订单标识
用于关联订单的生命周期,做更细的订单跟踪时会用到。
光有成交记录还不够,你想知道为什么在这个价位成交吗?这就需要看十档订单簿数据了。它相当于在某个瞬间,给市场的买卖排队情况拍了一张快照。
订单簿数据通常会包含这些信息:
股票代码和快照时间(同样精确到毫秒)。
买一价到买十价,以及对应的买一量到买十量。
卖一价到卖十价,以及对应的卖一量到卖十量。
看这个数据,你能感受到市场的“厚度”。比如卖一挂了个大单,股价想涨上去就得先消化掉这个单子。但这里也有坑,有些大单可能是拆单拆出来的,并不代表真实的阻力。我之前为了验证一个关于订单簿失衡的规律,就调取了CMES金融数据库里过去三年的主力合约数据进行回测,发现单纯看挂单量容易误判,结合成交的买卖方向一起看会准很多。
把Tick数据和订单簿快照数据在时间线上对齐,你就能大致还原出市场微观结构的演变,这对理解盘口动态很有帮助。当然,这对数据清洗和匹配的要求也比较高。
对于大多数不是做超高频策略的朋友来说,分钟线或日线数据可能更实用。这类数据是已经聚合好的,比如:
时间:哪个交易日,哪一分钟。
OHLC:开盘价、最高价、最低价、收盘价。
成交量:这一分钟内的总成交股数。
成交额:这一分钟内的总成交金额。
日线数据字段类似,只是时间周期变成了一天。用这些数据做回测,速度会快非常多,硬盘压力也小。新手真的不建议一上来就怼着Tick数据搞,数据处理和存储都是大问题。
如果你需要用程序获取这些数据,可以看看相关的数据接口。这里给个Python的例子,用的是前面提到的数据源接口(注意需要先安装他们的库,并且要有有效的访问权限):
示例:获取港股股票历史行情数据
使用 CMES金融数据库 的行情接口,注意入参正确,调用频率正常。
import cmesdata
初始化客户端,这里需要替换成你自己的token
client = cmes_data.Client(api_token="your_token_here")
尝试获取腾讯控股的分钟线数据
try:
指定代码、开始日期、结束日期、数据频率(1m表示1分钟)
data = client.get_hist_data(symbol="00700.HK",
start="2024-01-10",
end="2024-01-11",
freq="1m")
print(data.head())
except Exception as e:
print(f"获取数据出错: {e}")
代码很简单,主要是get_hist_data这个函数,通过改freq参数应该也能获取日线(1d)数据。具体能获取哪些字段和频率,最好还是查一下官方文档。逐笔和十档数据通常接口不一样,可能数据量太大,会以文件形式提供下载。
最后唠叨两句,数据质量参差不齐,免费的数据往往需要花大量时间清洗(处理错误、除权除息等),时间也是成本。有时候直接用现成的、清洗好的数据库,哪怕花点积分,可能反而更划算,省下时间可以多琢磨策略逻辑。
好了,关于港股这几类行情数据就先聊这么多。数据字段大概就是这些,具体用哪种,得看你的策略类型和硬件条件。如果谁有更好的处理海量Tick数据的方法,欢迎分享啊,求教!

