ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

nautilus_trader 测试数据集解析:6EH4.XCME 欧元兑美元期货 1 分钟 K 线(CSV.gz)的读取与应用

nautilus_trader 测试数据集解析:6EH4.XCME 欧元兑美元期货 1 分钟 K 线(CSV.gz)的读取与应用 nautilus_trader 测试数据集解析6EH4.XCME 欧元兑美元期货 1 分钟 K 线CSV.gz的读取与应用【免费下载链接】nautilus_traderProduction-grade Rust-native trading engine with deterministic event-driven architecture项目地址: https://gitcode.com/GitHub_Trending/na/nautilus_trader本文围绕 nautilus_trader 仓库 test_data/xcme/README.md 所描述的6EH4.XCME_1min_bars_20240101_20240131.csv.gz数据集展开先厘清该文件的合约标识、时间范围与字段语义再说明其 gzip 压缩格式被 pandas 直接读取的原理与代码最后结合仓库源码与示例演示如何将这批 OHLCV 1 分钟 K 线接入 NautilusTrader 的 Bar 数据模型与回测引擎。读完本文你可以独立完成这类 CME 期货分钟线 CSV 数据的解析、核验与 Nautilus 化加载。数据集概览一份 CME 欧元兑美元期货分钟线6EH4.XCME_1min_bars_20240101_20240131.csv.gz是 nautilus_trader 仓库test_data/xcme/目录下提供的一份真实交易风格测试数据其核心元信息如下属性值合约品种Instrument6ECME Euro FX / 欧元兑美元期货到期月ExpirationH42024 年 3 月到期H 为 CME 月份代码中的 3 月交易所ExchangeXCME芝加哥商品交易所的 MIC 代码时间范围Period2024-01-01 → 2024-01-31UTC 时间戳期间无合约换月数据粒度Bar type1 分钟 OHLCV K 线文件名的命名规则6EH4.XCME_1min_bars_20240101_20240131.csv.gz可以拆解为{品种}{到期}.{交易所}_{粒度}_bars_{起止日期}.csv.gz这与 NautilusTrader 中InstrumentId的{symbol}.{venue}结构一脉相承——在仓库的 crates/model/src/venues.rs 中Venue::XCME()被明确定义为芝加哥商品交易所Chicago Mercantile Exchange并作为内置交易所之一被venues_map收录crates/model/src/instruments/stubs.rs 中构造期货合约测试桩时也大量使用exchange XCME。值得强调的是时间维度的设计数据区间完整覆盖 2024 年 1 月整月且该时段内不发生合约换月no contract rollover。这使数据集特别适合用来验证连续回测流程、K 线聚合逻辑以及时间序列对齐避免因展期跳空rollover gap干扰对引擎行为的判断。CSV 结构与字段语义解压后的 CSV 为标准的带表头逗号分隔文本第一行为列名timestamp_utc,open,high,low,close,volume 2024-01-01 23:01:00,1.1076,1.10785,1.1076,1.1078,205 2024-01-01 23:02:00,1.10775,1.1078,1.1077,1.10775,86 2024-01-01 23:03:00,1.10775,1.1078,1.10765,1.10765,47各字段含义如下timestamp_utcK 线的时间戳格式为YYYY-MM-DD HH:MM:SS时区为 UTC。由于数据集以 UTC 对齐跨越美东时间的交易时段因此 1 月 1 日的首根 K 线出现在23:01:00对应美东 18:01而不是本地自然日的零点。open / high / low / close该 1 分钟区间内的开、高、低、收价格。6E 合约为欧元兑美元汇率报价从数据实际内容看价格在 1.081.11 区间波动报价精度为 5 位小数如1.10785。volume该 1 分钟区间内的成交量单位为手contracts从首尾数据看单分钟成交量通常为几十到数百手。对文件做一次完整核验gzip -dc ... | wc -l可得到 29,997 行即表头 1 行 数据 29,996 行对应 31 天约 2 万余分钟的交易时段CME 外汇期货非 7×24 连续交易每行恰好 6 列字段规整、无缺失。最后一根 K 线为2024-01-31 23:59:00与 README 声明的截止日期完全吻合。gzip 压缩格式与 pandas 直接读取README 明确说明采用压缩格式的两个理由体积约为原始 CSV 的 1/99x smaller than original CSV file。仓库中该文件实际占用约 233 KBls -la显示 238,850 字节若以 9 倍反推未压缩的 CSV 约 2.1 MB压缩对文本类行情数据的收益相当可观。gzip 流可以被 pandas 直接读取无需预先解压落盘省去临时文件管理。README 给出的读取代码为import pandas as pd df pd.read_csv( 6EH4.XCME_1min_bars_20240101_20240131.csv.gz, # update path as needed header0, index_colFalse, )要点说明pd.read_csv会根据扩展名.gz自动调用 gzip 解码因此无需手动gzip.open或先解压成.csv。header0表示将第一行timestamp_utc,open,...作为列名index_colFalse表示不把任意列设为索引保持 DataFrame 的默认整数索引便于后续按时间列自行set_index(timestamp_utc)。读取后建议将timestamp_utc转为pd.to_datetime(..., utcTrue)使其成为真正的时区感知时间戳再用于 Nautilus 侧的 Bar 构造或对齐。这种「gzip 压缩 pandas 直读」的模式同样适用于仓库其他目录下的行情 CSV如 test_data/tardis 下的 book snapshot CSV属于 NautilusTrader 测试数据资产中的通用实践。将 1 分钟 K 线接入 NautilusTraderBar 模型与加载链路在 NautilusTrader 中这类 OHLCV 1 分钟 K 线对应nautilus_trader.model.data.Bar其数据结构ts_event/ts_init双时间戳、open/high/low/close/volume定义于 crates/model/src/data/bar.rs。从仓库源码看Databento 适配器把OHLCV_1Mschema 直接解码为Bar见 crates/adapters/databento/src/loader.rs 中OHLCV_1M - Bar的映射及load_bars系列测试这与本数据集「1 分钟 OHLCV」的形态完全对应。加载这类 CSV 数据的典型路径有两种方式一pandas 读取 手工构造 Bar 列表适合 CSV 来源数据import pandas as pd from nautilus_trader.model import Bar, BarSpecification, BarType, InstrumentId, Price, Quantity from nautilus_trader.model.enums import AggregationType, BarAggregation, PriceType def csv_to_bars(df: pd.DataFrame, instrument_id: str) - list[Bar]: instrument InstrumentId.from_str(instrument_id) bar_type BarType(instrument, BarSpecification(1, BarAggregation.MINUTE, PriceType.LAST)) bars [] for _, row in df.iterrows(): ts pd.Timestamp(row[timestamp_utc], tzUTC) bars.append( Bar( bar_typebar_type, openPrice(row[open]), highPrice(row[high]), lowPrice(row[low]), closePrice(row[close]), volumeQuantity(row[volume], precision0), ts_eventts, ts_initts, ) ) return bars注意Price会依据构建时传入的精度归一化因此读取时无需手工处理 5 位小数ts_event与ts_init均使用 UTC 时间戳与 Nautilus 的UNIX 纳秒内部表示通过dt_to_unix_nanos转换。方式二通过 DatabentoDataLoader 加载 DBN 格式官方数据链路若数据来自 Databento 官方下载而非 CSV仓库在 docs/integrations/databento.md 中提供了DatabentoDataLoader.load_bars(...)的完整用法其 Python 导出位于 python/nautilus_trader/adapters/databento/init.pyfrom nautilus_trader.adapters.databento import DatabentoDataLoader loader DatabentoDataLoader(publishers_filepathpublishers.json) bars loader.load_bars(filepathohlcv-1m.dbn.zst)该加载器支持bars_timestamp_on_close参数默认为True即 K 线的ts_event归一化到区间收盘时刻置为False则使用区间开盘时刻。这一点在 crates/adapters/databento/src/loader.rs 的test_load_bars_timestamp_on_close_true/false两组测试中有明确断言——关闭时间语义下ts_event与ts_init均为收盘时间打开时间语义下ts_event为开盘时间而ts_init仍为收盘时间。本 CSV 数据集中的timestamp_utc语义上等同于区间开始open时间若要与 Nautilus 默认的 Bar 时间语义对齐需在构造时明确转换策略例如统一使用收盘时间或显式声明开盘时间。回测落地从 CSV 到 BacktestEngine仓库中已有两处与本数据集场景直接相关的可运行参考最小可复现回测示例examples/other/minimal_reproducible_example/run_example.py以XCME作为交易场所engine.add_venue(venueVenue(XCME), ...)构建1-MINUTE-LAST-EXTERNAL的BarType将 Bar 列表通过engine.add_data(bars)注入回测引擎并配置了time_bars_timestamp_on_closeTrue与validate_data_sequenceTrue等关键参数。把本数据集的 6E 合约价格替换其中的 EURUSD 模拟数据即可得到一份可直接运行的 CME 期货分钟线回测骨架。Databento 期货结算回测 Notebookexamples/backtest/notebooks/databento_futures_settlement.py展示了InstrumentId.from_str(ESZ5.XCME)这类期货合约 ID 的构造方式以及围绕Venue(XCME)组织期货回测的完整流程可作为把6EH4.XCME组织为InstrumentId.from_str(6EH4.XCME)并驱动回测的参考。将本数据集接入回测时需要注意两个与 README 声明强相关的使用前提无合约换月1 月整月数据对应单一6EH4合约回测中只需注册一个FuturesContract即可不需要连续合约continuous futures的展期拼接逻辑。UTC 时间戳数据时间轴是 UTC若回测环境或策略使用美东时区需在进入引擎前完成时区归一化避免边界 K 线如每日 23:00 UTC 附近的开盘/收盘错位。小结与进一步探索test_data/xcme/目录的这份 README 虽短却完整交代了一个实战级测试数据集的关键要素合约标识6E / H4 / XCME、无换月的时间窗口2024-01-01 → 01-31、数据形态1 分钟 OHLCV以及 gzip 直读 pandas 的标准姿势。在此基础上你可以顺着以下仓库路径继续深挖数据集定义与读取代码test_data/xcme/README.mdDatabento 适配器的 Bar 解码与bars_timestamp_on_close测试crates/adapters/databento/src/loader.rsDatabento 集成指南schema 映射、加载器 API、时间戳约定docs/integrations/databento.md内置交易所 XCME 的定义crates/model/src/venues.rs可复用的 XCME 期货回测示例examples/backtest/notebooks/databento_futures_settlement.py掌握了「CSV.gz 直读 → 时间戳语义核对 → Bar 构造 → 注入回测引擎」这条链路你就能把同类 CME 分钟线数据不同品种、不同月份代码快速纳入 NautilusTrader 的研究与回测流程。【免费下载链接】nautilus_traderProduction-grade Rust-native trading engine with deterministic event-driven architecture项目地址: https://gitcode.com/GitHub_Trending/na/nautilus_trader创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表