第三章:美股市场微观结构——订单簿、数据层级与交易时间

做高频交易,说白了就是跟市场微观结构打交道。你如果不懂订单簿怎么运作,不知道Tick数据和分钟数据差在哪,那策略写得再漂亮也是空中楼阁。这一章,我带你把这些基础打扎实。

3.1 订单簿(Order Book)原理

订单簿是什么?就是交易所用来记录所有未成交买单和卖单的电子账本。你可以把它想象成一个实时更新的拍卖场——买家喊价,卖家要价,成交了就撤单。

我个人习惯把订单簿分成两个核心部分:

  • 买盘(Bid Side):按价格从高到低排列,最高价叫“最佳买价”(Best Bid)。
  • 卖盘(Ask Side):按价格从低到高排列,最低价叫“最佳卖价”(Best Ask)。

最佳买价和最佳卖价之间的差距,就是价差(Spread)。价差越小,流动性越好。我在做纳指ETF回测时发现,开盘后前30分钟的价差经常是收盘前的3倍以上——嗯,这时候做高频策略要格外小心。

核心公式: 中间价 = (Best Bid + Best Ask) / 2
这个中间价常被用作“公平价格”的参考,但注意——它不代表真实成交价。

订单簿的深度(Depth)也很关键。深度指的是每个价位上的挂单数量。举个例子:

卖盘(Ask):
价格 100.05  数量 200
价格 100.04  数量 150
价格 100.03  数量 100
---
买盘(Bid):
价格 100.02  数量 80
价格 100.01  数量 120
价格 100.00  数量 300

你看,100.02这个价位只有80股买单。如果你要卖出1000股,很可能把价格砸到100.00甚至更低。这就是为什么大单交易要考虑“市场冲击成本”。

避坑指南: 我曾经在回测中忽略了订单簿深度,直接用中间价模拟成交。结果实盘时滑点吃掉了我一半的利润。后来我养成了一个习惯——回测时至少模拟到第3档深度。

3.2 Tick数据与分钟数据的区别

这个问题,我几乎每次培训都会被问到。说白了,它们就是两种不同粒度的数据。

特性 Tick数据 分钟数据
记录方式 每笔交易或每次报价变动 每分钟聚合(开、高、低、收、量)
数据量 一天几百万条(高频股) 一天390条(美股常规交易)
信息含量 包含订单流、买卖方向 丢失了微观结构信息
存储成本 高(1只股票1年约10GB) 低(1只股票1年约100MB)

你想想看,分钟数据把1分钟内的所有交易压缩成了4个数字。这中间丢失了什么?举个例子:

  • 这一分钟里,价格是先涨后跌,还是先跌后涨?——分钟数据看不出来。
  • 大单是在开盘时砸的,还是收盘前拉的?——分钟数据也看不出来。
  • 买卖订单的到达顺序是怎样的?——分钟数据更不可能告诉你。

我做过一个实验:同一个均值回归策略,用Tick数据回测年化收益18%,用分钟数据回测只有11%。为什么?因为分钟数据把很多微小的套利机会给“平均”掉了。

注意: 并不是所有策略都需要Tick数据。如果你的持仓周期超过30分钟,分钟数据完全够用。别为了追求精度而浪费存储和计算资源。

3.3 Level 1 / Level 2 数据

这两个术语,新手容易搞混。我简单解释一下:

Level 1 数据:只显示最佳买价和最佳卖价,以及当前最后一笔成交价。这是最基础的数据,大部分散户用的就是这个。

Level 2 数据:显示订单簿的多档深度。比如前10档的买盘和卖盘,甚至能看到每个价位的挂单量。做高频交易,Level 2是标配。

我记得刚入行时,公司为了省钱只买了Level 1数据。结果我们做的订单流策略(Order Flow Imbalance)完全跑不起来——因为Level 1根本看不到订单簿的变化过程。后来咬牙上了Level 2,策略才真正开始赚钱。

Level 2数据里有个很重要的指标叫订单簿不平衡(Order Book Imbalance)

Imbalance = (Bid Volume - Ask Volume) / (Bid Volume + Ask Volume)

正值表示买盘强,负值表示卖盘强。
取值范围:-1 到 +1

这个指标在预测短期价格方向时非常有用。我习惯用前5档的挂单量来计算,效果比只用最佳价位好很多。

实战经验: 当Imbalance超过0.7且价差突然缩小时,往往意味着大单即将进场。这时候我会提前调整仓位。

3.4 交易时间与节假日处理

美股的交易时间,比A股复杂得多。你得搞清楚这几个时间段:

  • 盘前交易(Pre-market):美东时间 4:00 - 9:30
  • 常规交易(Regular):美东时间 9:30 - 16:00
  • 盘后交易(After-hours):美东时间 16:00 - 20:00

注意,盘前和盘后的流动性很差,价差可能大到离谱。我见过有些股票盘前价差是常规交易时的10倍。所以我的策略默认只跑常规交易时段。

节假日处理更是坑多。美股不像A股那样固定休市,它有个专门的节假日日历。比如:

节日 休市情况
元旦 1月1日全天休市
马丁·路德·金纪念日 1月第三个周一全天休市
感恩节 11月第四个周四全天休市,周五提前收盘
圣诞节 12月25日全天休市

我曾经犯过一个低级错误:直接用Python的pandas_market_calendars库获取交易日历,结果没注意到感恩节后的周五是提前收盘(13:00就关了)。我的策略在14:00还在发单,全部被拒。从那以后,我每次回测前都会手动核对一遍节假日日历。

代码片段: 用Python获取美股交易日历
import pandas_market_calendars as mcal

# 获取纽交所日历
nyse = mcal.get_calendar('NYSE')
schedule = nyse.schedule(start_date='2024-01-01', end_date='2024-12-31')

# 检查某一天是否开市
print(nyse.valid_days(start_date='2024-11-28', end_date='2024-11-28'))

还有一个细节:夏令时和冬令时。美股交易时间在夏令时(3月第二个周日到11月第一个周日)是北京时间21:30开盘,冬令时则推迟到22:30。这个转换日期每年都变,千万别写死。

重要提醒: 节假日前后,市场波动往往异常。比如圣诞节前一周,成交量通常会萎缩30%-50%。这时候你的策略参数可能需要动态调整。

知识体系总览

下面这张图,我把本章的核心知识点串起来了。你可以把它当作一个快速索引:

美股市场微观结构 订单簿原理 买盘/卖盘/价差/深度 市场冲击成本 数据层级 Tick数据 vs 分钟数据 Level 1 vs Level 2 订单簿不平衡指标 交易时间与节假日 盘前/常规/盘后 节假日日历处理 夏令时/冬令时转换 三者结合:构建高频策略的数据基础

订单簿、数据层级、交易时间——这三块是高频交易策略的基石。你只有把它们吃透了,才能在回测中避免那些“看起来很美、实盘就崩”的尴尬局面。

专注资料整理