恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
NautilusTrader 数据模型全解析:从 QuoteTick 到自定义数据的核心 API 指南
首页
资讯中心
/
NautilusTrader 数据模型全解析:从 QuoteTick 到自定义数据的核心 API 指南
NautilusTrader 数据模型全解析:从 QuoteTick 到自定义数据的核心 API 指南
发布时间:2026/9/11 21:48:36
NautilusTrader 数据模型全解析从 QuoteTick 到自定义数据的核心 API 指南【免费下载链接】nautilus_traderProduction-grade Rust-native trading engine with deterministic event-driven architecture项目地址: https://gitcode.com/GitHub_Trending/na/nautilus_trader本篇技术指南聚焦 NautilusTrader 的nautilus_trader.model数据域模型系统梳理 Bar、QuoteTick、TradeTick 等内置数据类型以及 AggressorSide、BarAggregation、PriceType 等关键枚举的语义与底层实现。读完本文你将掌握数据类型的字段结构、构造校验规则、聚合规范BarSpecification/BarType的构成与用法并能基于CustomData/DataType扩展自己的市场数据结构。数据模型概览model 模块承载什么docs/api_reference/model/data.md是 NautilusTrader 官方 API 参考文档中针对nautilus_trader.model数据部分的索引页它通过 Sphinx 的automodule指令从源码自动生成成员清单。该文档列出的全部成员——AggregationSource、AggressorSide、Bar、BarAggregation、BarIntervalType、BarSpecification、BarType、CustomData、DataType、DefiData、FundingRateUpdate、GreeksData、IndexPriceUpdate、InstrumentClose、InstrumentCloseType、InstrumentStatus、MarketStatus、MarketStatusAction、MarkPriceUpdate、OptionChainSlice、OptionGreekValues、OptionGreeks、PortfolioGreeks、PriceType、QuoteTick、TradeTick——即本文要逐一展开的全部主题。在源码层面这些类型集中定义于 crates/model/src/data 目录按职责拆分为bar.rsK 线、quote.rs报价、trade.rs成交、funding.rs资金费率、prices.rs标记价/指数价、greeks.rs期权希腊字母、option_chain.rs期权链、status.rs市场状态、close.rs收盘事件、custom.rs自定义数据等模块并通过 crates/model/src/data/mod.rs 统一导出。一个值得注意的设计是所有数据类型都实现了HasTsInittrait返回ts_init——实例被 Nautilus 创建/摄入的 UNIX 纳秒时间戳并实现了CatalogPathPrefixtrait为每种数据类型指定数据目录前缀如quotes、trades、bars这些 trait 是数据持久化、时序排序与回放的基础。统一数据载体Data 与 DataRefNautilusTrader 的所有内置数据最终可装箱为一个统一的Data枚举定义于 crates/model/src/data/mod.rspub enum Data { BookDelta(OrderBookDelta), BookDeltas(BoxOrderBookDeltas), BookDepth10(BoxOrderBookDepth10), // This variant is significantly larger Quote(QuoteTick), Trade(TradeTick), Bar(Bar), MarkPrice(MarkPriceUpdate), IndexPrice(IndexPriceUpdate), FundingRate(FundingRateUpdate), OptionGreeks(OptionGreeks), InstrumentStatus(InstrumentStatus), InstrumentClose(InstrumentClose), Custom(CustomData), #[cfg(feature defi)] Defi(BoxDefiData), }Data提供的是自有owned异构表示而DataRefa则提供零拷贝的借用视图二者变体一一对应可通过FromData互转。源码注释明确提示不推荐用Data存储海量数据因为最大变体如BookDepth10比最小变体大约 10 倍——这是内存敏感场景下优先使用DataRef或DataBatch保留具体元素类型的同质存储的原因。Data还实现了serde::Serialize/Deserialize反序列化时依据 JSON 中的type字段分发到具体变体未知类型则回落到自定义数据反序列化注册表deserialize_custom_from_json。源码测试test_data_ref_maps_every_data_variant_without_copying_payloadscrates/model/src/data/mod.rs验证了 13 个非 DeFi 变体在Data与DataRef之间转换时指针等价std::ptr::eq即借用视图不复制数据载荷。DataType数据类型的身份与话题DataType是 NautilusTrader 中描述一种数据的元信息结构crates/model/src/data/mod.rs由四部分组成type_name类型名称字符串metadata可选的Params键值对如instrument_id、venue、start、end、limittopic预计算的订阅话题字符串hash由 topic 预计算的 64 位哈希用于哈希表与比较。DataType::new构造时会同步计算 topic 与 hash。topic 的规则是无 metadata 时即为type_name有 metadata 时按键名排序后拼接为type_name.key1value1.key2value2。例如测试用例test_data_type_creation_with_metadata中DataType::new(ExampleType, {key1: value1, key2: value2}, None)得到的 topic 为ExampleType.key1value1.key2value2。源码还提供了一组便捷访问器直接从 metadata 解析强类型字段crates/model/src/data/mod.rsinstrument_id()解析instrument_idvenue()解析venuestart()/end()解析start/endUnixNanoslimit()解析limitusize支持数字或字符串两种形态。此外to_persistence_json/from_persistence_json用于持久化场景topic 与 hash 会被重建from_parts则用于从遗留data_type列恢复。注意DataType的相等性与排序均基于 topicPartialEq比较self.topic这保证了相同类型相同 metadata 的数据类型在哈希容器中必然相等。K 线体系Bar、BarSpecification、BarType 与聚合枚举K 线Bar是策略与回测中使用最频繁的数据形态。它由三个核心类型共同描述BarSpecification如何聚合、BarType聚合到什么标的、Bar聚合结果本身。BarSpecification描述怎么聚合BarSpecification由三个字段构成crates/model/src/data/bar.rs字段类型含义stepNonZeroUsize聚合步长必须非零如 1、5、15aggregationBarAggregation聚合方法见下文枚举price_typePriceType聚合所用价格类型构造时通过new_checked执行严格校验crates/model/src/data/bar.rsstep 必须非零对固定子单位的时间聚合毫秒/秒/分钟等step 必须能整除进制如毫秒聚合 step 需整除 1000时间聚合的 step 不得导致可表示时长溢出。serde 反序列化同样路由到new_checked确保外部输入无法绕过校验。BarAggregation18 种聚合方法BarAggregation定义于 crates/model/src/enums.rs涵盖三大家族基于成交Tick-basedTick按笔数、TickImbalance买卖笔数失衡、TickRuns买卖笔数连续序列。基于成交量Volume-basedVolume按成交量、VolumeImbalance买卖量失衡、VolumeRuns买卖量连续序列。基于名义价值Value-basedValue按名义价值、ValueImbalance买卖价值失衡、ValueRuns买卖价值连续序列。基于时间Time-basedMillisecond、Second、Minute、Hour、Day、Week、Month、Year。其他Renko基于固定价格变动/砖形大小。BarIntervalType时间区间开闭约定BarIntervalTypecrates/model/src/enums.rs定义 K 线时间区间边界语义LeftOpen默认左开右闭区间(start, end]即 start 不含、end 含RightOpen左闭右开区间[start, end)即 start 含、end 不含。BarType 与时间 K 线起始计算BarType是InstrumentId与BarSpecification的组合作为 K 线数据的全局标识。源码提供了两个重要工具函数get_bar_interval(bar_type)crates/model/src/data/bar.rs将时间型聚合换算为SignedDuration。Day 为step天、Week 为step×7天、Month 按step×30天代理、Year 按step×365天代理仅用于比较 K 线长度非时间型聚合调用会 panic。get_time_bar_start(now, bar_type, time_bars_origin)crates/model/src/data/bar.rs计算当前时间所在 K 线窗口的起始时间戳。Week 从本周周一起算Month 从本年 1 月 1 日逐月推进Year 从每年 1 月 1 日重建以避免闰日漂移time_bars_origin参数可整体平移时间原点。Bar 结构Bar聚合结果包含 OHLCV 字段与时间戳且同样通过new_checked做正确性校验如 OHLC 与收盘价精度一致、时间戳合法等Python 绑定下错误会以Result形式抛出可读的异常信息。报价与成交QuoteTick、TradeTick 与 AggressorSideQuoteTick盘口最优价快照QuoteTickcrates/model/src/data/quote.rs表示盘口最优top-of-book状态字段为字段类型说明instrument_idInstrumentId标的标识bid_pricePrice最优买价ask_pricePrice最优卖价bid_sizeQuantity最优买量ask_sizeQuantity最优卖量ts_eventUnixNanos事件发生时间纳秒 UNIX 时间戳ts_initUnixNanos实例创建时间构造校验new_checkedcrates/model/src/data/quote.rs要求bid_price.precision ask_price.precision且bid_size.precision ask_size.precision保证买卖两侧小数精度一致避免浮点误差。TradeTick逐笔成交TradeTickcrates/model/src/data/trade.rs描述一笔成交字段为instrument_id、price成交价、size成交量、aggressor_side激进方、trade_id交易所分配的成交编号、ts_event、ts_init。构造校验要求size必须为正数check_positive_quantity。AggressorSide成交主动方AggressorSidecrates/model/src/enums.rs有三个取值NO_AGGRESSOR0无特定主动方默认值BUY1买方为主动方taker 买入旧序列化值BUYER仍可被解析SELL2卖方为主动方taker 卖出旧序列化值SELLER仍可被解析。衍生品与风险数据价格更新、资金费率与期权希腊字母MarkPriceUpdate 与 IndexPriceUpdateMarkPriceUpdatecrates/model/src/data/prices.rs标记价格更新反映标的公允价值的参考价常用于组合估值与风险管理。IndexPriceUpdatecrates/model/src/data/prices.rs指数价格更新即现货指数参考价。二者字段结构一致instrument_id、valuePrice、ts_event、ts_init。FundingRateUpdate永续合约资金费率FundingRateUpdatecrates/model/src/data/funding.rs描述永续合约的资金费率事件典型字段包括instrument_id、funding_rate、funding_interval_seconds费率结算周期秒、next_funding_time下一次结算时间、ts_event、ts_init。期权数据OptionGreeks、OptionGreekValues、OptionChainSlice、PortfolioGreeks期权相关的数据类型定义于 crates/model/src/data/greeks.rs 与 crates/model/src/data/option_chain.rsOptionGreekValuescrates/model/src/data/greeks.rs单个期权合约的希腊字母值集合Delta、Gamma、Theta、Vega、Rho 等。PortfolioGreekscrates/model/src/data/greeks.rs组合层面的希腊字母聚合按标的汇总的 Delta、Gamma、Theta、Vega、Rho 等用于组合风险管理。OptionGreekscrates/model/src/data/option_chain.rs一条完整的期权希腊字母更新事件绑定具体instrument_id与时间戳可直接装箱为Data::OptionGreeks。OptionChainSlicecrates/model/src/data/option_chain.rs期权链某个时点的切片视图包含该链上的多个行权价/合约数据。GreeksData统一表示各种希腊字母数据的接口/包装类型model 模块 re-export 自greeks子模块。InstrumentStatus 与 MarketStatus/MarketStatusActionInstrumentStatuscrates/model/src/data/status.rs描述标的市场状态事件由两个枚举刻画MarketStatuscrates/model/src/enums.rsOPEN交易中、CLOSED已收盘、PAUSED暂停、HALTED停牌、SUSPENDED中止、NOT_AVAILABLE不可用。MarketStatusActioncrates/model/src/enums.rs更细粒度的状态动作包括NONE无变化、PRE_OPEN、PRE_CROSS、QUOTING报价但不撮合、CROSS集合竞价、ROTATION旋转开盘、NEW_PRICE_INDICATION、TRADING、HALT停牌等可直接对应交易所原始状态机。InstrumentClose 与 InstrumentCloseTypeInstrumentClosecrates/model/src/data/close.rs表示标的收盘事件InstrumentCloseTypecrates/model/src/enums.rs说明收盘原因END_OF_SESSION当日交易时段结束CONTRACT_EXPIRED合约到期。AggregationSource数据聚合来源AggregationSourcecrates/model/src/enums.rs标记 K 线数据是在系统边界内还是边界外聚合EXTERNAL由系统外部聚合如交易所/数据供应商直接提供的 K 线INTERNAL由 NautilusTrader 内部聚合如引擎基于 tick 自行合成 K 线。价格类型 PriceTypePriceTypecrates/model/src/enums.rs是 Bar 聚合与多种订阅场景共用的价格来源枚举BID最优买价ASK最优卖价MID买卖价算术中点LAST最后一笔成交价MARK标记价格公允参考价用于组合计算与风控。例如BarSpecification(step1, aggregationMINUTE, price_typeLAST)表示基于最后成交价聚合的 1 分钟 K 线。源码注释也指出Bar 价格来源与 mark/index 价格订阅尚不完全一致是否引入PriceType::Index仍在设计中因此当前枚举不含 Index 变体。扩展性CustomData 与自定义数据类型注册NautilusTrader 允许用户引入自定义数据结构。CustomDatacrates/model/src/data/custom.rs包装任意用户数据并携带DataType元信息可通过Data::Custom变体进入统一数据通道。源码提供了多层注册机制crates/model/src/data/custom.rs 与 crates/model/src/data/registry.rsJSON 反序列化register_custom_data_json/deserialize_custom_from_jsonArrow 编解码arrowfeatureregister_arrow/encode_custom_to_arrow/decode_custom_from_arrow/get_arrow_schemaPython 交互pythonfeatureregister_python_data_class、register_py_extractor、try_extract_from_py等。DataType的identifier字段可携带目录路径标识如venue//symbol用于自定义数据在数据目录catalog中的存储位置。此外DefiDatadefifeature支持链上数据如 DEX 流动性池快照PoolSnapshot统一装箱为Data::Defi见 crates/model/src/defi。Python 侧使用方式以上所有类型均通过 PyO3 绑定暴露到 Python模块名为nautilus_trader.model绑定注册于 crates/pyo3/src/lib.rs。Python 侧可直接from nautilus_trader.model import ( Bar, BarAggregation, BarSpecification, BarType, QuoteTick, TradeTick, AggressorSide, PriceType, InstrumentId, DataType, CustomData, ) spec BarSpecification(step1, aggregationBarAggregation.MINUTE, price_typePriceType.LAST)枚举在 Python 侧以SCREAMING_SNAKE_CASE命名如BarAggregation.MINUTE、AggressorSide.BUY与 Rust 端序列化风格保持一致类型方法若校验失败会抛出异常而非静默 panic便于在 Python 中排查构造参数问题。数据目录前缀速查每种数据类型的持久化目录前缀CatalogPathPrefixcrates/model/src/data/mod.rs总结如下可用于理解数据目录结构与 Arrow/Parquet 存储布局数据类型目录前缀QuoteTickquotesTradeTicktradesOrderBookDeltaorder_book_deltasOrderBookDepth10order_book_depthsBarbarsIndexPriceUpdateindex_pricesMarkPriceUpdatemark_pricesFundingRateUpdatefunding_rate_updateOptionGreeksoption_greeksInstrumentStatusinstrument_statusInstrumentCloseinstrument_closesInstrumentAnyinstruments进一步阅读数据模型完整源码 crates/model/src/data含各数据类型模块与注册表全部枚举定义 crates/model/src/enums.rsBarAggregation、AggressorSide、PriceType、MarketStatus等Python 绑定入口 crates/pyo3/src/lib.rsnautilus_trader各子模块注册数据概念文档 docs/concepts/data数据流水线与订阅机制的进阶讲解事件概念文档 docs/concepts/events数据事件如何驱动策略【免费下载链接】nautilus_traderProduction-grade Rust-native trading engine with deterministic event-driven architecture项目地址: https://gitcode.com/GitHub_Trending/na/nautilus_trader创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考