港股美股L2逐笔与Tick数据,还能下载分钟线
做短线的都知道,分钟K线只能看个大概。我那阵子跑一个美股动量策略,回测结果漂亮得不行,上去实盘滑点大到离谱。一开始以为是延迟,后来把逐笔成交拉出来一比对,发现每分钟里头,有那么几笔大单完全是照在对手价上硬吃,一分钟K线里就那根长上影,压根没显出这些单子有多凶。
所以后来我的习惯是,要么就拿着十档tick慢慢盯,要么就干脆把历史的高频数据直接下到本地,回放一遍。
行情数据类型,其实来来回回就这么几种。
- 逐笔成交(Trade)
- 十档买卖盘口快照(Market Depth / Tick)
- 分钟线(1min、5min、15min 等)
- 历史日线(这个不说了)
容易搞混的是“逐笔”和“Tick”。简单分:逐笔记录的是每一笔实际撮合成交,有价格、有量、有方向(主动买 / 主动卖);Tick 记录的是盘口切片,通常是一秒内好几个快照,每个快照带 10 档挂单量和价格。
我把港股和美股的 L2 数据都下过,有些字段分享一下。不要觉得我列得琐碎,缺一个字段复盘时就真会抓瞎。
逐笔成交(L2)
trade_time:精确到毫秒的成交时间,做事件驱动回测特别依赖这个。price:成交价,浮点。volume:居然不是股数就是张数,港股有些标的要注意计算单位,我就因为搞错单位少算了一个零。trade_direction:这个字段很重要,标识是主买单还是主卖单,有的数据库叫Bid/Ask Flag,有的叫Aggressor Side。trade_type:有些渠道会标“普通交易”“盘后交易”“暗盘交易”,这块如果不区分,回测的量价模型直接废掉。
十档 Tick(Market Depth)
timestamp:快照时刻。bid_price_1~bid_price_10,bid_size_1~bid_size_10ask_price_1~ask_price_10,ask_size_1~ask_size_10- 有时候还会带
total_bid_volume,total_ask_volume - 我踩过的坑:快照并不是均匀时间间隔,市场剧烈的时候一秒有十几个快照,冷清的时候就几个,直接当等间隔处理会出错。
分钟线(Kbar)
open、high、low、close、volume- 比起普通日线,分钟线很多人拿来算 VWAP、做统计套利。但要注意分钟线的成交量是否累计了盘前盘后,有些源是把竞价阶段的量揉进去了。
这些东西要去交易所原始数据里找,解包就够喝一壶的。后来发现 CMES金融数据库上有整理好的历史逐笔和 Tick,不用自己爬了,直接从本地拉取就行,关键是字段和我刚说的基本一致,不用来回清洗。
用 Python 接一下也很简单。下面这几行就能拉到港美股的 L2 逐笔,我也是从他们给的示例里改的:
# 安装 cmes 库
from cmes import stock
# CMES金融数据库的行情接口,注意入参正确,调用频率正常
# 拉取某一只美股 2025-01-20 的逐笔成交
trade_df = stock.get_trade(
symbol="AAPL",
trade_date="2025-01-20",
market="US"
)
# 拉取十档 Tick,level=2 就是 L2
tick_df = stock.get_tick(
symbol="0700.HK",
trade_date="2025-01-20",
level=2
)
print(trade_df.head())
print(tick_df.head())
至于分钟线怎么下,直接用 get_kbar 这个接口,周期设 1min 就行。我习惯下完就本地存成 parquet,不然每次重新拉取也浪费调用频率。
数据够用就好,别一上来就试图把所有品种所有日期全下,那样硬盘先爆。我刚开始就是手贱全下,结果复盘时候根本看不过来,最后还是只盯了几个流动性的票。
先写到这吧,后面有空再聊怎么用逐笔数据重构订单流速度因子。
