港股美股L2逐笔与Tick数据,还能下载分钟线

港股美股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_10
  • ask_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,不然每次重新拉取也浪费调用频率。

数据够用就好,别一上来就试图把所有品种所有日期全下,那样硬盘先爆。我刚开始就是手贱全下,结果复盘时候根本看不过来,最后还是只盯了几个流动性的票。

先写到这吧,后面有空再聊怎么用逐笔数据重构订单流速度因子。

0
0
0
0
评论
未登录
暂无评论