
machine-learning-for-trading 微观结构数据集完全指南TAQ / MBO / ITCH / IEX 四源采集与加载实战【免费下载链接】machine-learning-for-tradingCode for Machine Learning for Trading, 3rd edition — from data sourcing to live execution.项目地址: https://gitcode.com/GitHub_Trending/ma/machine-learning-for-trading本指南以《Machine Learning for Trading》第 3 版配套仓库machine-learning-for-trading中的 equities/market/microstructure 数据集说明 为主体系统讲解该书第 3 章市场微观结构及其相关章节所使用的四类逐笔tick级数据集——AlgoSeek TAQ、Databento MBO、NASDAQ ITCH、IEX HIST。读完本文你将掌握每个数据源的粒度定位、许可与成本边界、逐行可复现的下载命令、统一加载器data/equities/loader.py的调用方式与磁盘布局要求以及各数据集在03_market_microstructure目录下的配套笔记本。一、数据集总览四个独立来源四种粒度与成本定位微观结构研究的前提是拿到逐笔tick级数据而不同研究问题对数据粒度的要求截然不同——有的只需要成交与最优买卖价NBBO有的必须重建完整订单簿还有的需要原始二进制消息流。仓库为此准备了四个独立来源在粒度、成本、获取难度上互为补充设计目标是让读者在零账号到付费 API之间自由选择起点数据集粒度来源获取方式磁盘占用Trade Quotes (TAQ)Tick逐笔成交 NBBO 报价AlgoSeek slim 切片解压即用无需账号67 MBMarket by Order (MBO)逐订单per-orderDatabentoXNAS.ITCH付费约 $5新账号赠金可覆盖~1 GBNASDAQ ITCH原始二进制全部消息类型NASDAQ 公共 FTP免费4–6 GB/天IEX HISTTickTOPS / DEEP 两类 feedIEX 公共渠道免费150 MB – 10 GB/天这一组合覆盖了微观结构实验的典型需求TAQ 用于成交报价事件级别的分析MBO 与 ITCH 用于订单簿重建前者是已清洗的订单级消息后者是最底层的原始协议流IEX 则提供了一个免费且带 12 个月滚动窗口的完整深度数据选项。统一加载入口所有数据集都通过 data/equities/loader.py 中对应的 loader 读取返回统一的 Polars DataFrame。数据缺失时loader 会抛出DataNotFoundError定义于 data/exceptions.py并在异常信息中直接打印一条可运行的下载命令——这是仓库刻意设计的自愈机制读数据失败时报错本身就是下一步操作指引。二、Trade Quotes (TAQ)AlgoSeek 逐笔成交与 NBBO 报价2.1 数据集切片AlgoSeek TAQ slim 切片是全书微观结构章节的轻量入门数据只包含AAPL 两个交易日的逐笔数据——2020-03-13压力前最后一个交易日与 2020-03-16COVID 熔断日。选择这两个日期是为了对比正常市场与极端波动两种微观结构状态这是第 3 章的核心叙事线索之一。属性值来源AlgoSeek 为本书公开提供algoseek.com/ml-for-trading无需账号或 API key频率Tick逐笔成交 NBBO 报价事件日期2020-03-13、2020-03-16标的AAPL行数21,284,141 个事件2020-03-13 为 13,651,7262020-03-16 为 7,632,415Schematimestamp微秒精度、symbol、event_type、price、quantity、exchange、conditions许可商业数据——slim 切片在读者许可下再分发2.2 下载与解压关键细节下载得到的是symbolAAPL.zip67 MB。它本身就是 Parquet 格式且目录布局与 loader 扫描的布局一致因此无需任何格式转换——解压即用。但解压时有一个容易踩坑的细节归档文件来自 Dropbox 分享会写入一个多余的根目录条目如果直接unzip而不指定成员名命令会警告并以退出码 2 结束尽管文件实际上已经被解压出来了。因此文档给出的规范解压命令是unzip -q symbolAAPL.zip *.parquet \ -d $ML4T_DATA_PATH/equities/market/microstructure/trade_and_quotes/symbolAAPL注意-d目标目录手工命名为symbolAAPL——这正是 loader 期望的 Hive 风格分区目录名。$ML4T_DATA_PATH默认指向仓库下的data/目录见 utils 中的路径解析逻辑。2.3 一个常见的替代方案误区为什么不能用分钟 K 线顶替仓库同时提供 AlgoSeek NASDAQ-100 分钟 bar 数据文件名里带有 taq-ext 字样但它不能替代本切片它本质上是含报价信息的分钟级聚合字段如OpenBidPrice、TradeAtBid、NBBOQuoteCount等是聚合统计值而非单个事件。订单簿无法从 bar 重建。该数据集的正确用途是转换为分钟 bar 数据集参见 data/README.md#algoseek-datasets 中对 AlgoSeek 系列数据集NASDAQ-100 分钟 bar、SP 500 日线、期权链等的整体说明。2.4 加载方式与实现要点from data import load_nasdaq100_taq df load_nasdaq100_taq(symbols[AAPL])从源码看data/equities/loader.pyload_nasdaq100_taq还支持event_types过滤可用事件类型包括TRADE成交、TRADE NB非约束成交、TRADE CANCELLED成交撤销、QUOTE BID/QUOTE ASKNBBO 报价、QUOTE BID NB/QUOTE ASK NB非约束报价。返回 DataFrame 按symbol、timestamp排序时间戳为微秒精度。发布切片仅含 AAPL但完整商业 feed 与这个布局完全一致因此读者若在磁盘上拥有更多标的的完整数据同样可以传入这些 symbol。2.5 生成该切片的再编码脚本这个 slim 切片的出身可以在 build_taq_slim.py 中看到它从完整 TAQ 目录中取出(AAPL, 20200313)与(AAPL, 20200316)两个文件用 zstd level 22 重新编码 Parquet保持 schema 与行序完全不变使读者下载体积尽可能小67 MB。这一事实也解释了为什么下载包已经是 loader 可直接读取的布局——它不是转换而来而是特意压制而成的同构切片。配套笔记本03_market_microstructure/11_algoseek_taq_eda.pyTAQ 探索性分析、03_market_microstructure/12_algoseek_taq_lob_reconstruction.py基于 TAQ 的订单簿重建。三、Market by Order (MBO)Databento 逐订单消息3.1 数据集切片MBO 切片来自 Databento 的XNAS.ITCH数据集NASDAQ TotalView-ITCH 的 MBO schema覆盖NVDA 2024 年 11 月共 10 个交易日。MBO 是比 TAQ 更细的粒度包含每一笔订单的完整生命周期消息add / cancel / modify / fill / trade是重建精确订单簿、研究逐单行为的理想输入。属性值来源Databento Download Center 或 API频率Tick逐订单日期2024-11-04 至 2024-11-15标的NVDA磁盘~1 GB成本约 $5低于 $10新账号有 $125 赠金Schemats_event、symbol、action、side、price、size、order_id、flags许可付费按 job 计费禁止再分发3.2 首选路径Download Center 手动下载仓库明确建议手动下载优先——针对这种一次性切片10 天、1 个标的在 Databento Download Center 里点几下比配置 API key 更快且文件在 Download Center 保留 30 天便于部分失败后免重复计费恢复。完整的点击式步骤见 MBO_DOWNLOAD.md核心选择如下字段值DatasetXNAS.ITCHSchemambo标的 /stypeNVDA/raw_symbol起止日期2024-11-04~2024-11-15含输出格式Parquetdbn.parquet提交前先查看成本估算应低于 $10完成后把 10 个xnas-itch-YYYYMMDD.mbo.dbn.parquet文件直接放入$ML4T_DATA_PATH/equities/market/microstructure/market_by_order/NVDA/无需重命名或后处理——loader 用glob(*.parquet)扫描Databento 原生文件名即可直接使用。验证方式uv run python -c from data import load_mbo_data files load_mbo_data(symbols[NVDA], list_filesTrue) print(f{len(files)} file(s) found) for f in files: print( , f.name) 应列出 10 个文件。单日数据通常为 800–1000 万行schema 含ts_event、action、side、price、size、order_id、flags、sequence。3.3 API 自动化替代方案如果已有DATABENTO_API_KEY配置在.env可用 mbo_download.py 编程下载# 永远先估算成本避免意外扣费 uv run python data/equities/market/microstructure/mbo_download.py --estimate-only uv run python data/equities/market/microstructure/mbo_download.py脚本的完整 CLI从源码 mbo_download.py 提取还包括--symbols NVDA ...覆盖标的默认NVDA--dates 20241104 20241105指定具体日期YYYYMMDD--start 2024-11-04 --end 2024-11-15日期区间YYYY-MM-DD--days N默认取最近 N 个交易日默认 10--estimate-only只打印成本估算并退出--status列出本地已下载数据--force已存在也重新下载--data-path覆盖数据目录成本模型是约 $0.45–0.50 / 标的天脚本内按 $0.50 估算默认 10 天 × 1 标的约 $5。值得注意的实现细节脚本内置patch_databento_symbology()用于规避 Databento 0.72.0 的 symbology 字段名 bugentry[asset]→entry[symbol]付费下载前必须经databento_acknowledge()交互确认。脚本写入的目标目录与手动下载一致产出文件同样被 loader 直接接受。3.4 加载方式from data import load_mbo_data df load_mbo_data(symbols[NVDA]) files load_mbo_data(symbols[NVDA], list_filesTrue) # 惰性迭代按日逐个读取源码实现data/equities/loader.py中list_filesTrue时返回按日排序的Path列表适合逐日流式处理load_mbo_data会把ts_event重命名为timestamp以统一 canonical schema并自动从目录结构推断symbol列。配套笔记本03_market_microstructure/08_databento_lob_reconstruction.py、09_databento_mbo_analysis.py、17_databento_bar_sampling.py。四、NASDAQ ITCH原始二进制消息流4.1 数据集定位NASDAQ TotalView-ITCH 是交易所发布的原始二进制协议流包含构建订单簿所需的全部消息add挂单、cancel撤单、delete删除、execute执行、trade成交、imbalance失衡、status changes状态变更等。它是本书数据体系中**最底层、最原教旨**的微观结构数据——正因为原始它也是学习 ITCH 协议解析本书 03_market_microstructure/01_itch_parser.py 等笔记本的主题的起点。属性值来源NASDAQ 公共 FTP 镜像emi.nasdaq.com频率Tick全部消息类型日期多个样本日期默认2020-01-30磁盘每日期 4–6 GB压缩二进制成本免费许可NASDAQ ITCH Specification教育用途无限制4.2 下载命令# 列出可用的样本文件 uv run python data/equities/market/microstructure/nasdaq_itch_download.py --list # 下载指定日期MMDDYYYY 格式 uv run python data/equities/market/microstructure/nasdaq_itch_download.py --date 01302020从源码 nasdaq_itch_download.py 看脚本还支持--data-path覆盖数据目录文件写入equities/market/microstructure/nasdaq_itch/raw/下载本身可能耗时 30–60 分钟且脚本明确提示文件是 4–6 GB 二进制必须解析后才能使用。4.3 解析与加载文件是原始二进制解析发生在下载脚本之外——由第 3 章笔记本中的解析器Rust 或 Python 实现见 03_market_microstructure/01_itch_parser.py把消息流解析为按消息类型分区的 Parquet输出位于equities/market/microstructure/nasdaq_itch/messages/。解析完成后即可用统一 loader 读取from data import load_nasdaq_itch messages load_nasdaq_itch(message_types[A, F]) # 全部 add order 消息 base load_nasdaq_itch(get_base_pathTrue) # 直接取消息目录路径注意文档给出的示例参数是msg_type但当前实现data/equities/loader.py的真实签名是message_types可用消息类型包括A挂单无归属、F挂单带归属、E订单成交、C带价格成交、X撤单、D删除、U替换、P非交叉成交、Q交叉成交、I失衡、S系统事件、R股票目录、H交易状态。返回 DataFrame 的公共列包括timestamp、stock、order_reference_number、shares、price可按symbols过滤ITCH 中标的列名为stock。一个值得注意的实现细节load_nasdaq_itch把消息目录存在且含大写单字母子目录视为数据就绪的判据空目录按缺失处理——防止解析中断留下空目录却被误判为可用数据。配套笔记本03_market_microstructure/01_itch_parser.py至07_itch_stylized_facts.py协议解析、订单簿重建、订单生命周期、交易活动、日内模式、程式化事实以及14_itch_bar_sampling.py、15_itch_lee_ready.py、16_itch_information_bars.py。五、IEX HIST免费的历史逐笔数据5.1 数据集定位与两类 feedIEX 交易所公开历史数据T1 更新、12 个月滚动窗口免费使用需注明出处。它提供两种 feed粒度差异巨大属性值来源IEX 公共渠道iextrading.com/trading/market-data频率TickTOPSBBO 成交DEEP全深度更新保留期12 个月滚动磁盘TOPS 约 150–500 MB/天DEEP 约 5–10 GB/天成本免费许可IEX Historical Data Terms of Use——需注明出处TOPS仅最优买卖价top of book与成交文件小适合 BBO 分析DEEP全档位深度更新price-level订单簿重建必须使用 DEEP。5.2 下载命令# 列出可用日期 uv run python data/equities/market/microstructure/iex_download.py --list # 下载一个极小的 TOPS 样本自动挑选最小文件适合快速验证 uv run python data/equities/market/microstructure/iex_download.py --smallest # 下载指定日期的 DEEP 数据用于订单簿重建 uv run python data/equities/market/microstructure/iex_download.py --date 20241220 --deep从源码 iex_download.py 看脚本通过 IEX 非文档化的 HIST API 端点获取文件目录脚本注释明确提示该端点可能变更失效时可退回官网手动下载并使用特定User-Agent/Referer头访问。5.3 解析与加载原始 pcap 文件必须先解析才能使用——10_iex_lob_reconstruction笔记本负责解析并把结果写回规范的iex/{feed}/parsed/位置。解析完成后from data import load_iex_hist df load_iex_hist(feedtops, data_typetrades, symbols[AAPL]) raw load_iex_hist(feeddeep, get_raw_filesTrue) # pcap 路径供自定义解析源码实现data/equities/loader.py中data_type支持quotes、trades、price_levels仅 DEEP 可用TOPS 下会抛ValueError、alldates支持按YYYYMMDD过滤get_raw_filesTrue返回*.pcap.gz原始文件路径。TOPS 加载quotestradesDEEP 额外加载price_levels。配套笔记本03_market_microstructure/10_iex_lob_reconstruction.py。六、预期磁盘布局On-Disk Layout四个数据集在磁盘上遵循统一的 Hive 风格分区布局loader 正是按此布局扫描equities/market/microstructure/ ├── trade_and_quotes/ # AlgoSeek TAQ — loader 扫描的目录 │ └── symbol{SYMBOL}/date{YYYYMMDD}.parquet # 发布切片为 symbolAAPL ├── market_by_order/ │ └── {SYMBOL}/xnas-itch-{YYYYMMDD}.mbo.dbn.parquet ├── nasdaq_itch/ │ ├── raw/{date}.bin.gz # 二进制下载文件 │ └── messages/{msg_type}/{date}.parquet # 解析后的消息分区 └── iex/ ├── tops/{YYYYMMDD}.pcap.gz ├── tops/parsed/ # 由 10_iex_lob_reconstruction.py 填充 ├── deep/{YYYYMMDD}.pcap.gz └── deep/parsed/理解这张布局图对排错至关重要任何 loader 报DataNotFoundError时第一步不是重新下载而是对照此布局检查文件是否放在了正确分区例如 TAQ 是否忘了手工命名symbolAAPL目录、ITCH 消息是否已解析进messages/、IEX 原始 pcap 是否已解析进parsed/。七、数据集卡片Dataset Card仓库为微观结构数据提供了可执行的 dataset card以并排表格形式一次性展示四个数据源的核心属性、成本与加载方式uv run python data/equities/market/microstructure/dataset_card.py对应笔记本版本为 dataset_card.ipynb。从源码看卡片还内置了 MBO 成本估算逻辑estimate_mbo_cost按$0.50/标的天计算、API key 检测DATABENTO_API_KEY以及加载验证示例适合作为环境搭建后的自检脚本。八、Loader 接口总览所有微观结构 loader 统一返回 Polars DataFrame或文件路径列表缺失数据时抛出带可运行指引的DataNotFoundErrorLoader返回DataNotFoundError提示内容load_nasdaq100_taq(symbols...)DataFrame逐笔事件下载链接 unzip命令load_mbo_data(symbols..., list_files...)DataFrame 或list[Path]mbo_download.py --estimate-onlyload_nasdaq_itch(message_types..., symbols..., get_base_path..., must_exist...)DataFrame 或 Pathnasdaq_itch_download.py --date ...load_iex_hist(feed..., data_type..., symbols..., dates..., get_raw_files...)DataFrame 或list[Path]iex_download.py --smallest或--deep这套接口与仓库整体的数据访问层设计一致详见 data/equities/README.md 中的 loader 总表所有 loader 集中在 data/equities/loader.py 单文件内通过from data import load_xxx即可使用无需记忆分散的模块路径。九、实践建议如何为你的微观结构实验选型综合本指南的四个数据源可给出如下选型逻辑快速验证 / 教学演示优先 AlgoSeek TAQ 切片67 MB解压即用无需任何账号它足以支撑成交与 NBBO 报价级分析精确订单簿重建单标的深挖选 Databento MBO已清洗的逐订单消息NVDA 10 个交易日约 $5新账号赠金可覆盖先用 Download Center 手动下载需要自动化再切 API协议解析学习 / 全消息流研究选 NASDAQ ITCH免费但 4–6 GB/天且需自写解析器这是理解 ITCH 5.0 协议、练习二进制解析的最佳教材免费的全深度 LOB 重建选 IEX DEEP免费、12 个月滚动窗口需注意 pcap 解析步骤和署名要求适合对成本和时效敏感的研究。无论选择哪个来源建议从仓库根目录执行uv run python data/equities/market/microstructure/dataset_card.py完成环境自检再按上文对应小节的下载命令获取数据最后对照 磁盘布局 验证目录结构——这一流程可以覆盖从零搭建到逐笔数据可用的全部环节。【免费下载链接】machine-learning-for-tradingCode for Machine Learning for Trading, 3rd edition — from data sourcing to live execution.项目地址: https://gitcode.com/GitHub_Trending/ma/machine-learning-for-trading创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考