如何用 ITCH 订单数据计算 Lee-Ready 聚合交易方向

发布时间:2026/9/15 19:48:29

如何用 ITCH 订单数据计算 Lee-Ready 聚合交易方向 如何用 ITCH 订单数据计算 Lee-Ready 聚合交易方向【免费下载链接】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在行情数据里每一笔成交记录本身并不标明是买方还是卖方主动吃单。如果你拿 ITCH 订单流数据order-level 的 MBO 消息做微观结构研究需要先推断每笔成交的 aggressor 方向。machine-learning-for-trading 第 3 章的 15_itch_lee_ready 完成了这件事从 DataBento 的 XNAS-ITCH MBO 数据中重建限价订单簿LOB对每笔成交依次应用 Lee-Ready 的 quote test 与 tick test再和 DataBento 自带的 aggressor 标签ground truth逐笔对比输出整体准确率、按天分解以及与只用 tick test的差距。本文的适用前提已按 docs/installation.md 和 docs/running-notebooks.md 装好环境本地uv路径或 Dockerml4t镜像二选一有 Databento 账户新账户带 $125 免费额度本文数据切片成本 under $10。准备条件下载 NVDA 的 ITCH MBO 数据这个验证用的数据是NVDA 在 2024-11-04 至 2024-11-15 的 10 个交易日数据源是 Databento 数据集XNAS.ITCH、schemambo落盘约 1 GB。项目文档 MBO_DOWNLOAD.md 给出的主路径是Databento Download Center 手动下载一次性切片比配 API 更简单登录 Databento打开 Download Center点Get data或New job选择Dataset:XNAS.ITCHSchema:mboSymbol:NVDAstype 选raw_symbol日期范围:2024-11-04到2024-11-15输出格式:Parquetdbn.parquet提交前确认费用估算 under $10然后提交处理完成后下载 10 个xnas-itch-YYYYMMDD.mbo.dbn.parquet文件。文件放到以下目录不需要改名或后处理$ML4T_DATA_PATH/equities/market/microstructure/market_by_order/NVDA/ML4T_DATA_PATH默认指向仓库自己的data/目录一般不用设置如果你把数据集放在别的盘需要单独 export 这个变量只写在.env里对uv run无效。可选分支如果你已有DatabENTO_API_KEY写在.env里可以用仓库自带的 API 脚本替代手动下载。脚本会先估算费用确认后再下载写入同一目标目录# Always estimate cost first uv run python data/equities/market/microstructure/mbo_download.py --estimate-only # Download (NVDA, Nov 2024 defaults) uv run python data/equities/market/microstructure/mbo_download.py验证数据是否就位在仓库根目录运行以下命令确认 loader 能找到全部 10 个文件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 个文件。再做一次首行 schema 检查uv run python -c import polars as pl from data import load_mbo_data files load_mbo_data(symbols[NVDA], list_filesTrue) df pl.read_parquet(files[0]) print(df.shape, list(df.columns)) 按 MBO_DOWNLOAD.md 的说明schema 应包含ts_event、action、side、price、size、order_id、flags、sequence单日通常 8–10 million 行。如果load_mbo_data抛出DataNotFoundError说明数据未下载或路径不对文档约定该异常会附带对应数据集的下载命令。运行 Lee-Ready 分类验证从仓库根目录执行.py是 Jupytext 源文件.ipynb由它生成带预执行输出可对照uv run python 03_market_microstructure/15_itch_lee_ready.pyDocker 路径则在 Jupyter Lab 终端不带uv run前缀执行python 03_market_microstructure/15_itch_lee_ready.py桌面环境运行时 Matplotlib 会打开图形窗口并阻塞到关闭无显示环境或想跳过窗口按 docs/running-notebooks.md 的 Headless Execution 加环境变量MPLBACKENDAgg PLOTLY_RENDERERjson uv run python 03_market_microstructure/15_itch_lee_ready.pynotebook 顶部的参数单元格控制运行范围# %% tags[parameters] SYMBOL NVDA MAX_ROWS 0 # 0 all rows per file MAX_VALIDATION_DAYS 5 # Number of days for multi-day validationSYMBOL数据目录下的标的默认NVDA与上面下载的数据对应MAX_ROWS每个文件最多读多少行0表示不限制MAX_VALIDATION_DAYS多日验证取前几个交易日默认 5。该 notebook 不在第 3 章的高内存清单里章节 README 说明其余编号 notebook 在 8 GB 内存下可运行。分类逻辑quote test 加 tick test 级联理解输出之前先明确代码对每条 MBO 消息做了什么。MBO 格式约定action: A(Add)、C(Cancel)、F(Fill)、M(Modify)、T(Trade)、R(Clear)side: B(Bid/Buy)、A(Ask/Sell)、N(None)price: 整型定点数nanodollars需除以 1e9 还原为美元order_id: 唯一订单引用timestamp: 交易所时间戳Download Center 文件为timestamp列API 脚本下载的文件为ts_event列代码做了归一化加载阶段还会把时间戳转到America/New_York时区并过滤到 9:30–16:00 的常规交易时段——文档指出常规时段必须按交易所时钟定义固定用 UTC 窗口过滤会在一年里有一半时间差一小时。随后代码逐条回放消息维护订单簿状态R清簿A/M/C/F更新价格档位与订单登记表遇到T成交时执行_apply_lee_readyQuote test拿成交价与当时 mid (best bid best ask) / 2 比较。高于 mid 判为 buy-initiated1低于判为 sell-initiated-1Tick test回退成交恰好等于 mid 时与上一笔成交价比较——更高记 buy更低记 sell相等则沿用上一次非零方向zero-tick 处理订单簿为空两侧无挂单时只用 tick testground truth 直接取自 MBO 的 aggressor 侧side B记 1side A记 -1N的成交跳过。每笔成交产出一行timestamp, price, size, ground_truth, lee_ready, correct其中correct就是两者是否一致。核对输出准确率与对照基准运行结束后会依次打印单日验证、多日验证、tick test 对照和 Table 3.3 汇总。以下是文档示例输出notebook 预执行结果对应 NVDA 2024-11-04 至 11-08数值会随数据下载批次略有差异不要当作必须复现的固定值单日2024-11-04Classified 163,774 trades LEE-READY VALIDATION RESULTS Total trades classified: 163,774 Overall accuracy: 94.20% By ground truth: Buy-initiated: 93.58% (83,223 trades) Sell-initiated: 94.84% (80,551 trades) Confusion matrix: True Buy (GTB, LRB): 77,881 False Buy (GTB, LR≠B): 5,342 True Sell (GTA, LRA): 76,397 False Sell(GTA, LR≠A): 4,1545 日汇总Total trades: 906,321 Overall accuracy: 94.54% Daily breakdown: 20241104: 94.20% (163,774 trades) 20241105: 94.58% (142,805 trades) 20241106: 94.79% (257,394 trades) 20241107: 94.61% (182,364 trades) 20241108: 94.38% (159,984 trades)与只用 tick test 的对照单日TICK TEST ONLY RESULTS Trades: 163,774 Accuracy: 78.53% Comparison: Lee-Ready: 94.20% Tick only: 78.53% Improvement: 15.67%5 日 Table 3.3 汇总这是与书中 §3.4 / Table 3.3 对应的口径Method Coverage Accuracy Lee-Ready (quotetick) 100% 94.5% Tick test (continuous) 100% 79.8% Tick test (non-zero) 18% 90.4%tick test 分两档打分的原因很多成交与上一笔同价tick 规则读不到方向。continuous档把最后非零方向向前携带、覆盖全部成交non-zero档对同价成交干脆不判只在价格变动的成交上评分。Coverage 一栏就是两档的可判定比例——non-zero 档准确率高但只覆盖 18% 的成交这正是 quote test 的价值所在Lee-Ready 对 100% 的成交给出方向。结果验证的落盘文件是汇总 parquet输出后终端会打印保存路径文档示例为03_market_microstructure/output/databento/table_3_3_classification_accuracy.parquet内容是上述三档 method / coverage / accuracy / n_trades 四列。限制与后续核对时间语义这个验证用交易所时间戳对齐成交与报价与 ground truth 的打戳方式一致。notebook 明确指出实盘或回测中存在观测延迟——决策时刻实际能看到的报价滞后于交易所状态——依赖这类分类的回测要加保守延迟文档给出的量级colocated ~1ms、retail ~10ms。数据有效期Download Center 的文件保留 30 天窗口过期后重新跑同一个 job 即可费用不变。快速测试模式不想全量跑时可走仓库的 Papermill 测试入口用tests/overrides.yaml里的缩减参数执行第 3 章 notebookuv run pytest tests/test_chapter_notebooks.py -v -k 03_market_microstructure后续若要把订单簿重建、TAQ 分析和 bar 采样串起来同一目录下 02_itch_lob_reconstructionLOB 重建、14_itch_bar_sampling 和 16_itch_information_bars 与本 notebook 共用同一套数据格式目录索引见 03_market_microstructure/README.md四类微观结构数据源TAQ、MBO、NASDAQ ITCH 原始流、IEX的取数方式汇总在 data/equities/market/microstructure/README.md。【免费下载链接】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),仅供参考
延伸阅读

更多相关文章

2026/9/15 19:43:29

机器学习中线性代数的核心应用与优化技巧

1. 为什么机器学习离不开线性代数?第一次接触机器学习时,我完全没意识到线性代数的重要性。直到在实现第一个线性回归模型时,发现连最简单的梯度下降都写不出来,才意识到矩阵运算就像空气一样无处不在。举个实际例子:当…

2026/9/15 20:18:32

支付宝小程序后端认证:手写RSA2签名绕开pycrypto与SDK坑

做支付宝小程序后端的时候,我第一个周末就栽在两个老熟人手上:alipay-sdk-python 和 pycrypto。先说结果,SDK 是从 PyPI 直接拉下来的,pycrypto 装不上,编译错误刷了一整屏,后来我索性把用户认证流程改成自…

2026/9/15 20:18:32

TFT多变量时序预测实战:原理、PyTorch实现与经验

做过多变量时序预测的朋友,应该都经历过这样的阶段:拿到一堆特征,不管三七二十一先上个LSTM再说。训练半天,loss降了,结果一上测试集,要么滞后严重,要么变量稍微多一点就直接崩溃。我也一样&…

2026/9/15 4:54:30

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/15 0:01:16

AI英语单词APP开发:自适应学习算法与移动端优化实践

1. 项目概述 作为一名在移动应用开发领域摸爬滚打多年的老手,我最近完成了一个AI英语单词APP的开发项目。这个项目将传统单词记忆方法与现代AI技术相结合,打造了一款能够智能适应不同用户学习习惯的英语学习工具。 市面上大多数单词APP都存在一个通病&a…

2026/9/15 0:01:16

Flutter与OpenHarmony结合开发手语学习APP实战

1. 项目背景与核心价值作为一名同时接触过Flutter和OpenHarmony的开发者,最近我完成了一个基于Flutter for OpenHarmony的手语学习APP实战项目。这个项目最大的特点在于实现了跨平台框架与国产操作系统深度结合的创新实践——用Flutter开发的应用能完美运行在OpenHa…

2026/9/15 0:01:16

六个月成为机器人工程师:从ROS2到SLAM的实战路径

1. 六个月的紧迫感从哪来:先搞清楚你要成为哪种机器人工程师说实话,六个月的期限并不是一个宽松的时间线。市面上任何一本正经的机器人学教材都超过五百页,ROS2的官方文档可以翻到你怀疑人生,再加上ABB、KUKA这些工业机器人厂家动…

2026/9/15 14:22:53

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/15 11:42:23

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码