第一章:数据源与接入——主流美股Level2数据提供商对比

做美股量化交易,第一道坎就是数据。我见过太多人,策略写得漂漂亮亮,结果一上实盘就崩——为什么?数据源没选对。

Level2行情,说白了就是能看到订单簿的深度数据。普通散户看到的只有买一卖一,而Level2能让你看到整个委托队列。嗯,这里面的门道可不少。

1.1 主流数据提供商概览

目前市面上主流的Level2数据提供商,我按自己的使用经验排个序:

提供商 覆盖交易所 数据深度 延迟 月费(约)
Nasdaq TotalView Nasdaq全市场 全深度(50档+) <1ms $150-300
NYSE OpenBook NYSE全市场 全深度(50档+) <2ms $200-400
IEX IEX交易所 全深度(免费) <5ms 免费
Polygon.io 多交易所聚合 10-20档 10-50ms $99-199
Alpaca 多交易所聚合 5-10档 50-100ms 免费-50

我个人习惯,做高频策略首选Nasdaq TotalView。为什么?因为Nasdaq的订单流最活跃,流动性最好。我在项目中遇到过用NYSE OpenBook做统计套利,结果发现NYSE的暗池订单太多,公开数据反而失真。

1.2 三大核心提供商深度解析

Nasdaq TotalView

这是目前最贵的,但也是最全的。它提供Nasdaq交易所所有股票的完整订单簿,包括隐藏订单和冰山订单。你想想看,做市商的大单往往藏在里面,普通数据根本看不到。

核心特点:

  • 全深度数据:50档买卖盘口
  • 包含隐藏订单信息
  • 支持实时和盘后数据
  • API延迟控制在1ms以内

NYSE OpenBook

NYSE的数据有个特点——它包含了很多机构订单。我记得有一次做订单流分析,发现NYSE的买卖价差经常比Nasdaq大,后来一查,原来是NYSE的做市商制度导致的。

注意:NYSE OpenBook不包含暗池数据。如果你做的是暗池策略,这个数据源就不太够用了。

IEX

IEX是个特例。它免费提供全深度数据,但只覆盖IEX自己的交易所。IEX的市占率大概只有2-3%,所以数据量不大。不过,对于学习Level2数据结构和做策略回测来说,IEX是个绝佳的起点。

我的建议:新手先用IEX免费数据练手,等策略成熟了再上TotalView。别一上来就花大钱买数据,容易亏。

1.3 API接入方式与认证

接入Level2数据,说白了就是两件事:拿到API Key,然后建立WebSocket连接。我见过有人用REST API轮询拿Level2数据,那延迟简直没法看。

WebSocket接入(推荐)

实时数据必须用WebSocket。下面是我常用的接入模板:

import websocket
import json

# 以Polygon.io为例
API_KEY = "your_api_key_here"

def on_message(ws, message):
    data = json.loads(message)
    # 处理Level2数据
    print(f"收到订单簿更新: {data}")

def on_error(ws, error):
    print(f"连接错误: {error}")

def on_close(ws, close_status_code, close_msg):
    print("连接关闭")

def on_open(ws):
    # 订阅AAPL的Level2数据
    subscribe_msg = {
        "action": "subscribe",
        "params": "AM.AAPL"  # AM = Aggregated Minute
    }
    ws.send(json.dumps(subscribe_msg))

websocket.enableTrace(True)
ws = websocket.WebSocketApp(
    f"wss://socket.polygon.io/stocks",
    on_open=on_open,
    on_message=on_message,
    on_error=on_error,
    on_close=on_close
)
ws.run_forever()

认证方式

不同提供商的认证方式大同小异:

  • API Key认证:最常用,放在请求头或URL参数里
  • OAuth 2.0:部分机构要求,比如某些券商的数据接口
  • IP白名单:Nasdaq TotalView要求绑定服务器IP

避坑指南:我曾经把API Key直接写在代码里,结果不小心上传到了GitHub。第二天就收到账单——有人用我的Key跑了大量数据。记住:API Key一定要用环境变量管理!

1.4 数据格式与解析

Level2数据最常见的格式是JSON和Protobuf。JSON可读性好,但解析慢;Protobuf快,但调试麻烦。

下面是一个典型的Level2数据快照:

{
  "symbol": "AAPL",
  "bids": [
    {"price": 150.25, "size": 1000, "exchange": "NASDAQ"},
    {"price": 150.24, "size": 500, "exchange": "NYSE"},
    {"price": 150.23, "size": 2000, "exchange": "IEX"}
  ],
  "asks": [
    {"price": 150.26, "size": 800, "exchange": "NASDAQ"},
    {"price": 150.27, "size": 1500, "exchange": "NYSE"}
  ],
  "timestamp": 1700000000000
}

嗯,这里要注意:不同交易所的订单簿更新频率不一样。Nasdaq每秒能发几百次更新,而IEX可能只有几十次。做策略时一定要考虑这个差异。

1.5 知识体系总览

我把本章的核心逻辑画成了流程图,方便你理解数据接入的全貌:

Level2数据接入知识体系 数据源层 TotalView / OpenBook / IEX 接入层 WebSocket / REST API 认证层 API Key / OAuth / IP白名单 数据格式 JSON / Protobuf 解析层 订单簿重建 / 增量更新 存储层 内存数据库 / 时序数据库 策略应用层 订单流分析 / 做市策略 / 统计套利 数据流方向:数据源 → 接入 → 认证 → 解析 → 存储 → 策略

1.6 实战建议

最后,我总结几条实战经验:

  • 别贪多:一开始只接一个交易所的数据,把逻辑跑通了再说
  • 做好重连机制:WebSocket断连是家常便饭,一定要有自动重连
  • 数据校验:我吃过亏——接了数据没校验,结果策略跑了一周才发现数据有缺失
  • 成本控制:TotalView一个月300美金,一年就是3600。小团队建议先用IEX或Polygon

小技巧:如果你只是想研究Level2数据结构,可以用IEX的免费数据写个本地模拟器。我当年就是这么入门的,省了不少钱。

好了,数据源和接入这块就聊到这儿。记住一句话:数据质量决定策略上限。别在数据上省钱,也别在数据上浪费钱。

专注资料整理