Lean · 第 5 章 数据流与时间同步 章节摘要:本章钻取第 5 层——数据流与时间同步(Engine/DataFeeds 121 文件,Lean 最大子模块)。QCAlgorithm 的 OnData 收到的 Slice 是怎么来的?答案是一条"生产者-消费者"链:DataFeed(多线程生产数据)→ SubscriptionCollection(缓冲)→ Synchronizer(单线程消费,产 TimeSlice 流)→ AlgorithmManager(单线程喂算法)。核心是 ISynchronizer 接口的 StreamData() 返回 IEnumerable ,回测用 Synchronizer(按数据时间推进),实盘用 LiveSynchronizer(按墙钟等待)。
章节摘要:本章钻取第 5 层——数据流与时间同步(Engine/DataFeeds 121 文件,Lean 最大子模块)。QCAlgorithm 的 OnData 收到的 Slice 是怎么来的?答案是一条"生产者-消费者"链:DataFeed(多线程生产数据)→ SubscriptionCollection(缓冲)→ Synchronizer(单线程消费,产 TimeSlice 流)→ AlgorithmManager(单线程喂算法)。核心是 ISynchronizer 接口的 StreamData() 返回 IEnumerable,回测用 Synchronizer(按数据时间推进),实盘用 LiveSynchronizer(按墙钟等待)。TimeSlice 是引擎内部数据包(含 Slice+SecurityChanges+各种更新数据),Slice 是用户可见部分(Bars/QuoteBars/Ticks/OptionChains+Splits/Dividends)。本章共 3 节,前置依赖为第 1-4 章。
本章钻取"数据流层"——多品种多频率数据怎么统一成时间序列 Slice。
阅读完本章,你应当能够:
FileSystemDataFeed(回测读磁盘"incredibly fast");LiveTradingDataFeed(实盘实时);DataManager 中介者(同时管 DataFeed 与 SubscriptionManager 订阅生命周期,挂 UniverseManager.CollectionChanged 监听 universe 增删);Subscription/SubscriptionCollection/SubscriptionDataReader;生产者消费者模式。
ISynchronizer 接口(就一个 StreamData 返回 IEnumerable);Synchronizer.StreamData 回测(SubscriptionSynchronizer.Sync 合并所有订阅按数据时间推进);LiveSynchronizer.StreamData 实盘(用 ITimeProvider 墙钟等待下一秒);回测实盘第二个分叉点(Engine.cs L113 _liveMode?LiveSynchronizer:Synchronizer);TimeSlice 引擎内部包(Time/Slice/SecurityChanges/SecuritiesUpdateData/ConsolidatorUpdateData/IsTimePulse)。
Slice 用户可见(ExtendedDictionary:Bars TradeBars/QuoteBars/Ticks/OptionChains/FuturesChains + Splits/Dividends/Delistings);slice["SPY"]或slice.Bars["SPY"]索引;Fill-Forward 缺失数据前向填充(保证时间序列连续);Enumerators 子目录(填充/刷新/裁剪等多种枚举器);Transport/Queues/WorkScheduling 数据传输调度。
前置知识:第 1-4 章。
后续延伸:第 6 章钻取数据从磁盘读取的格式(LEAN zip+CSV)与多资产支持。