说明:本文发布自个人研究笔记;文中出现的
docs/...、sys...等文件名仅用于定位概念/实现位置,公开站点不提供对应仓库链接。
状态:stable
读者:开发 / 研究
定位:作为 carver-quick-reference.md、carver-blueprint.md、carver-implementation-guide.md 的数据侧补充,聚焦 Phase 0 数据工厂(roll calendars / multiple prices / adjusted prices / FX / costs)以及它如何喂给回测与生产系统。
安全约定:本文仅描述流程与接口,不会触发任何真实交易;涉及 production 的命令仅作为索引,需读者自行确认与执行。
前置知识:术语速查
完整术语表见
glossary.csv;本节只覆盖 Phase 0 / 数据侧最常用词。
| 术语 | 中文 | 一句话解释 |
|---|---|---|
per-contract prices | 单合约行情(OHLCV) | 每个具体到期合约的时间序列;常见为日线 OHLCV;PST 列名 OPEN/HIGH/LOW/FINAL/VOLUME,主干通常只用 FINAL(其它列默认不参与计算,除非自定义规则/研究代码) |
spot FX prices | FX 汇率 | 币种折算与风险/PnL 汇总;常见列 DATETIME/PRICE |
instrument config | 品种配置 | 点值、交易币种、region 等静态信息 |
roll parameters | 换月参数 | priced/hold cycle 与 offsets;用于生成 roll calendars |
spread costs | 交易成本 | 回测成本与执行约束 |
roll calendars | 换月日历 | 记录 current → next 切换日期;CSV 可读可手改 |
roll status | 展期状态 | production 中控制是否/如何展期(PASSIVE/FORCE/…);由 interactive_update_roll_status 维护 |
sampled contracts | 合约采样标记 | production 中决定要抓取/更新哪些合约的元数据;由 update_sampled_contracts 维护 |
multiple prices | 多合约对齐价 | 每日 PRICE/FORWARD/CARRY 及对应合约代码 |
adjusted prices | 连续价 | back-adjusted 后的连续序列,趋势信号常用 |
capital/account value | 资金/净值(Capital) | Layer 1 Risk and Capital 的输入;production 从 broker/账户系统获取,backtest 可用模拟序列;不属于 Phase 0 输入 |
📖 阅读导航
本文按 跟随数据流 组织:
| 章节 | 内容 |
|---|---|
| §0 坐标系 | Layer / Phase / Level 区分 |
| §1 端到端总览 | 全景图 |
| §2 原材料准备 | 需要哪些输入 |
| §3 数据工厂 | roll calendars → multiple → adjusted |
| §4 下游对接 | 回测与生产消费方式 |
| §5 扩展话题 | Universe、可追溯性、MVP |
| 附录 A | 数据资产速查表 |
| 附录 B | 数据流向图 |
如需“一张表看清要什么数据 / 从哪来 / 落到哪”,直接跳到 附录 B。
0. 坐标系:Layer / Phase / Level 别混用
| 维度 | 含义 | 参考文档 |
|---|---|---|
| Layer 1–4 | 自上而下的计算分层(风险 → 信号 → 组合 → 执行) | carver-blueprint.md |
| Phase 0–3 | 自左向右的工程流水线(数据 → 信号 → 组合 → 执行) | carver-implementation-guide.md |
| Level 0–3 | 横向策略分级(Benchmark / Core / Satellites / Research) | carver-quick-reference.md |
注:Level 0–3 是横向分层,不参与 Phase 0–3 / Layer 1–4 的纵向流水线;本文只把它作为“策略分级语境”的背景信息。
本文关注 Phase 0:把原始素材加工成系统可消费的数据资产。
1. 端到端总览:从素材到订单
| |
上图展示了从原始素材(Sources)到订单执行(Phase 3)的完整流程。本文聚焦 Phase 0 Data Factory 部分。
2. 原材料准备:Phase 0 需要什么输入
| |
注:端到端总览图将 Capital / account value(production: broker; backtest: sim)画在 Layer 1 Risk and Capital,因为它属于 Layer 1 的输入,不属于 Phase 0 数据工厂输入。
口径说明:本文将 Phase 0 Data Factory 视为“系统可消费数据资产的落盘与 QA 总称”。其中 roll calendars → multiple → adjusted 是核心三道工序;Spot FX / spread costs / instrument config 等属于 side stream:它们不参与三道工序,但需要在 Phase 0 阶段完成更新、校验与落盘,供 Layer 1 / 回测 / 生产消费。
Phase 0 的输入主要分为两类:静态配置与市场数据;此外本节补充 Spot FX 的命名约定与 base_currency。
2.1 静态配置(低频更新)
| 数据 | 关键内容 | 用途 |
|---|---|---|
| Instrument config(品种配置) | multiplier/point size、交易币种、region、交易时段等 | 风险度量、换汇、报告 |
| Roll parameters(换月参数) | priced/hold roll cycle、offsets、carry offset | 生成 roll calendar、计算 carry |
| Spread costs(点差/交易成本) | spread/fees 的统一口径 | 回测成本、Speed&Size 约束 |
补充:rollconfig.csv 的 ExpiryOffset(代码里常见叫 approx_expiry_offset)与 RollOffsetDays 用于粗略估算“合约名义到期日”与“理想 roll 日期”(详见 docs/data.md):
- Bund 示例:
ExpiryOffset=6、RollOffsetDays=-5⇒ 名义到期日为当月第1+6=7天,理想 roll 日为第1+6-5=2天 - SOFR 示例:
ExpiryOffset=18、RollOffsetDays=-1000⇒ 距离名义到期约 1000 天 roll(极端但真实存在)
2.2 市场数据(日更)
| 数据 | 关键内容 | 用途 |
|---|---|---|
| Per-contract prices(合约级 OHLCV) | 每个具体到期合约一条时间序列(常见为日线 OHLCV;PST 主要使用 FINAL,其它列默认不参与计算) | Phase 0 的核心上游 |
| Spot FX(FX 汇率) | 账户基准货币的 FX 序列 | 风险度量、PnL 换汇 |
2.3 Spot FX:命名约定与 base_currency
- FX code 格式:
GBPUSD这种 6 字符形式(CCY1CCY2),CSV 文件名同 code(如GBPUSD.csv),常见列为DATETIME/PRICE(见sysdata/csv/csv_spot_fx.py)。 - 数学语义:
CCY1CCY2的PRICE表示1 CCY1 = PRICE CCY2;将 CCY1 金额换算到 CCY2 用乘法,反向用倒数(例如V_USD = V_GBP × GBPUSD)。 - 默认货币与交叉汇率:PST 的 spot FX 默认基准货币为
USD(可通过config.base_currency配置);通常准备各币种对默认基准货币的序列(如GBPUSD)。当需要 cross 时,系统会推导;USDXXX会做反向。 - 基准货币:回测与生产都会用
config.base_currency作为 PnL/风险汇总的基准货币。
2.4 ⚠️ Baseline vs SSOT(生产必需)
提醒:PST 仓库自带的
data/futures/*_csv(multiple/adjusted/roll calendars/FX)通常只适合 demo/backtest baseline,用于“先跑通”。进入paper/sim/live前,应建立自己的 SSOT 数据集(建议 Parquet + Mongo),并具备日更/回补路径;展期事件由roll status驱动(需要登记/自动化),否则增量更新会报错或写入不一致数据。
3. 数据工厂:把单合约变成连续序列
Phase 0 的核心任务是通过三道工序,把离散的单合约价格加工成系统可消费的连续序列:
| 工序 | 一句话 |
|---|---|
| ① Roll calendars | 确立“什么时候切合约” |
| ② Multiple prices | 把三份合约对齐到同一时间轴 |
| ③ Adjusted prices | 缝合成“假想的连续 K 线” |
3.1 工序 1:确立切换时间轴(Roll Calendars)
| |
Roll calendars 的本质:一张表,记录每次从 current_contract 切换到 next_contract 的日期。
PST 官方文档的定位非常明确:只存 CSV、可读可手改、并且需要检查。见 docs/data.md。
注:官方也指出 roll calendars 在生成 multiple prices 后通常不会在日常运行中继续使用(主要用于冷启动/重建/修复);生产日更主要依赖 roll status + existing multiple/adjusted(见 §4.2)。
三种生成路径(从严谨到省事):
| 路径 | 数据量要求 | 维护成本 | 推荐场景 |
|---|---|---|---|
| ① 从 per-contract prices 生成 | 高 | 中 | 生产 / 完整回测(更可控) |
| ② 从 multiple prices 反推 | 低 | 低~中 | 快速验证 / 迁移 |
| ③ 使用项目自带 | 无 | 低 | Demo / 学习(通常会滞后) |
CSV 典型列:DATE_TIME, current_contract, next_contract, carry_contract
关键断言(QA gate):
- ✅ 单调性与有效性检查无异常(monotonicity / validity)
- ✅ roll 日必须能找到
current_contract与next_contract同日有价的匹配点 - ✅ 节假日/缺失交易日:允许自动寻找最近可交易日,但需记录可人工复核
本仓约定:除非明确要求,不覆盖根目录
data/的上游 baseline;roll calendars 的 SSOT 放在private/下。
3.2 工序 2:对齐三合约价格(Multiple Prices)
| |
Multiple prices 的本质:每个交易日保存三条价格序列及其对应合约:
| 列名 | 含义 | 来源 |
|---|---|---|
PRICE / PRICE_CONTRACT | 当前定价合约 | roll calendar 的 current_contract |
FORWARD / FORWARD_CONTRACT | 下一合约 | roll calendar 的 next_contract |
CARRY / CARRY_CONTRACT | carry 规则比较合约 | roll calendar 的 carry_contract |
注:构建阶段通常只用 per-contract prices 的 FINAL(收盘/结算;不使用完整 OHLC),细节见 docs/data.md 的 multiple prices / adjusted prices 说明。
常见失败模式(应在 Phase 0 解决,而不是带病进 Phase 1):
- ❌ roll calendar 指向了不存在的合约代码
- ❌ roll 日没有价格,或 current/next 缺少重叠
- ❌ 合约切换导致的价格跳变与预期不一致
3.3 工序 3:缝合连续序列(Adjusted Prices)
| |
Adjusted prices 的本质:一条“假想的连续 K 线”,通过 back-adjustment 消除合约切换的价格跳变。
趋势类策略(例如 EWMAC)通常在这条连续序列上计算。其正确性强依赖于:
- ✅ roll calendar 的合理性(切换点是否可交易、是否有重叠)
- ✅ multiple prices 的一致性(同日合约映射是否稳定)
3.4 Derived features:哪些落盘,哪些运行时计算
目标:避免读者在“到底存不存/存哪”上卡住;下表给出建议口径(可按性能与可追溯需求调整)。
| 特征/资产 | 计算依赖 | 默认口径(建议) | 持久化(可选/建议) | 更新与 QA(示例) |
|---|---|---|---|---|
returns | adjusted prices | 运行时计算 | (可选)Parquet:<parquet_store>/<data_type>/*.parquet(自定义,如 features_returns) | 与价格对齐;缺失/停牌处理 |
vol(EWMA 等) | returns | 运行时计算 | (可选)Parquet:<parquet_store>/<data_type>/*.parquet(自定义,如 features_vol) | spike checks;窗口参数需版本化 |
carry | multiple prices 的 CARRY 列 | Just-in-Time 提取(不单独落盘) | — | 依赖 roll calendar / multiple 的正确性 |
| Spot FX rates | spot FX prices | 建议落盘为 SSOT | Parquet:<parquet_store>/spotfx_prices/*.parquet(baseline CSV 仅用于 demo/backtest) | spike/missing gate;与交易日对齐 |
| FX conversion(instrument → base) | instrument currency + FX + multiplier + prices | Layer 1 运行时换汇/货币化 | (可选)仅用于 debug/审计输出 | 乘/除方向需明确(见 §2.3) |
4. 下游对接:回测与生产如何消费
Phase 0 产出的数据资产,分别被回测和生产两条链路消费:
| 维度 | 回测(Backtest) | 生产(Production) |
|---|---|---|
| 读取方式 | 一次性全量读取 | 每日增量更新 |
| 数据入口 | csvFuturesSimData | MongoDB + Parquet |
| 典型场景 | 策略研发、历史验证 | 日常交易、实时监控 |
4.1 回测如何消费(csvFuturesSimData)
sysdata/sim/csv_futures_sim_data.py 的 csvFuturesSimData 会组装以下数据类:
csvFuturesAdjustedPricesDatacsvFuturesMultiplePricesDatacsvFuturesInstrumentDatacsvFxPricesDatacsvRollParametersDatacsvSpreadCostData
官方回测入口与 CSV 目录约束见 docs/backtesting.md。
CSV 目录约束:PST 的 CSV 命名习惯通常以 INSTRUMENT_CODE.csv 为文件名;因此不同类型的数据必须放在不同目录,否则会发生文件名冲突。
Carry data 的来源:在 simData 接口里,carry data 是从 multiple prices 的 CARRY / CARRY_CONTRACT 列切出来的子集(Just-in-Time 提取),因此不需要维护独立的 carry 数据目录。
4.2 生产如何消费(日更 DAG)
PST production 的主干思想是:夜间跑一次带真实资本的 system run 产出 buffers/optimal positions,白天交易引擎按 buffers 执行;详见 docs/production.md。
数据存储范式:
- 状态/元数据:MongoDB
- 时间序列:Parquet
- roll calendars:CSV(可读可手改)
本仓本地落盘与目录约定见 local_data_management.md;IB 数据冷启动与日更 SOP 见 production_daily_data.md。
典型日更步骤:
| |
顺序不可交换的原因(最小因果):
update_sampled_contracts决定本次需要更新哪些品种/合约范围,直接影响update_historical_prices的更新集update_historical_prices是update_multiple_adjusted_prices的上游(没有最新 per-contract 就无法正确增量 multiple/adjusted)update_fx_prices需要在 nightly system run 前完成,否则 Layer 1 的换汇/风险与 PnL 汇总会使用旧汇率
冷启动/重建 vs 生产日更(官方口径)
- 冷启动/重建:按
docs/data.md从per-contract prices+roll parameters构建/校正roll calendars,再生成multiple/adjusted(这也是 roll calendars 最常用的场景)。- 生产日更:按
docs/production.md运行update_fx_prices → update_sampled_contracts → update_historical_prices → update_multiple_adjusted_prices做增量更新;是否发生展期由roll status控制,需要通过interactive_update_roll_status(见sysproduction/interactive_update_roll_status.py;或自动流程)登记,否则update_multiple_adjusted_prices会报 “roll has occurred but not registered properly”(见sysproduction/update_multiple_adjusted_prices.py)。
本仓约定:涉及 paper/sim/live 的任何实盘调度与券商连接,默认只在 runbook 中给出命令与说明,不在架构文档里固化可直接执行的
live操作。
5. 扩展话题
5.1 Universe 管理
PST 官方文档强调,instrument list 在不同阶段会被分层筛选:见 docs/instruments.md。工程上建议把 Universe 视为一级数据资产(可版本化、可审计),并与资金/成本约束联动:
官方 instrument sets 的最小总结(建议牢记):
- Superset:由
data/futures/csvconfig/instrumentconfig.csv定义所有“可能交易”的品种全集(通常包含很多你不会立刻交易的品种)。 - Sampling instruments(production):用于抓取/更新合约价格的品种集合,官方默认“以 multiple prices 已存在的品种为准”(这会影响
update_sampled_contracts/update_historical_prices)。 - Instruments with adjusted prices:用于回测与 production system backtest rawdata 的品种集合(常见入口
system.data.get_instrument_list())。 - System instrument list:从 “有 adjusted prices 的品种集合” 出发,再叠加
config.instruments与各种 exclude lists(duplicate/ignore/bad_markets/trading_restrictions 等)得到最终用于计算与优化的集合。
- Superset:由
CN 链路参考:
./cn_universe_and_capital_pipeline.md、./cn_futures_data_flow.md全局链路参考:
./global_universe_and_capital_pipeline.md分组机制参考:
./instrument_groups.md
5.2 可追溯与可复现
建议最小做到:
- 每次 system run 产出可回放的快照:config snapshot + 数据版本号 + buffers/positions 输出
- Phase 0 的派生数据可追溯:
adjusted/multiple -> roll calendar -> per-contract prices - 对数据异常采取“宁可停更也不写坏”的策略(spike checks / 人工复核门)
5.3 MVP 路线
建议按 Carver 的“先基准后叠加”:
- 先跑 Level 0 基准(S04),确认 Phase 0 数据资产闭环可用
验收标准:目标交易品种均具备adjusted/multiple/roll calendars,核心 QA gate 通过;Spot FX 覆盖config.base_currency与品种币种的换汇需求 - 上线 Core Engine(S09 Trend + S10 Carry),确保 forecast 标准化与
IDM上限受控
验收标准:forecast scaling/cap 生效;IDM上限生效;回测与 nightly system run 可稳定产出 buffers/optimal positions - 再逐步增加 Satellites / Research,并接入 Speed&Size 的横向约束
验收标准:成本/容量/执行约束能触发 throttle/kill(或等价的风控降档),并在日志/监控中可观测
6. 参考入口
Carver 三件套(本仓):
PST 官方文档(根 docs/):
docs/data.md(futures data objects、roll calendars、multiple/adjusted、存储范式)docs/backtesting.md(csvFuturesSimData、CSV paths 约束)docs/production.md(daily updates、夜间 backtest-style run、数据存储与备份)docs/instruments.md(instrument list 的分层筛选逻辑)
相关源码:
sysdata/sim/csv_futures_sim_data.py
附录 A:数据资产速查表
本节为参考手册,供开发时查阅字段定义和依赖关系。
A.1 最小可用数据资产(可回测 + 可生产的共同底座)
| 类别 | 数据资产 | 关键内容 | 更新频率 | 主要消费者 |
|---|---|---|---|---|
| 静态配置 | Instrument config | multiplier/point size、交易币种、region、交易时段等 | 低频 | Phase 0、风控/换汇、报告 |
| 静态配置 | Roll parameters | priced/hold roll cycle、offsets、carry offset 等 | 低频 | Phase 0(roll calendar / carry 相关) |
| 成本模型 | Spread costs | spread/fees 的统一口径 | 低频 + 定期校准 | 回测成本、Speed&Size 约束 |
| 市场数据 | Per-contract prices | 每合约历史日线(生产可附加日内) | 日更 | Phase 0(multiple/adjusted 的上游) |
| 市场数据 | Spot FX | 账户基准货币的 FX 序列 | 日更 | Phase 0(side stream)、Layer 1(换汇/风险度量)、PnL |
| 派生数据 | Roll calendars(CSV) | 每次从 current→next 的切换日期与合约映射 | 低频 + 事件驱动 | Phase 0(multiple/adjusted) |
| 派生数据 | Multiple prices | 同日的 PRICE/FORWARD/CARRY 价格与对应合约代码 | 日更 | Phase 0、Carry 信号 |
| 派生数据 | Adjusted prices | 单一连续价格(back-adjusted) | 日更 | Trend 信号、回测 rawdata |
A.2 依赖链
| |
A.3 Phase 0 工序断言汇总
| 工序 | 输入 | 输出 | 关键断言 |
|---|---|---|---|
| Roll calendars | roll parameters + per-contract prices | roll calendars(CSV 文件) | 需通过 monotonicity/validity 检查;roll 日 current/next 需同日有价 |
| Multiple prices | roll calendars + per-contract prices | multiple prices(PRICE/FORWARD/CARRY + *_CONTRACT) | 合约代码需存在于 per-contract prices;任何 warnings 都应回到 roll calendars 排查 |
| Adjusted prices | multiple prices | adjusted prices(单一连续 back-adjusted) | roll 切换点需可交易;合约映射需稳定 |
附录 B:数据流向总表(要什么数据 / 从哪来 / 落到哪)
目标:用一张表串起“要准备什么数据、可能从哪获取、与系统的关系、建议落盘位置”,避免为此反复翻
docs/production.md。
B.1 一页流向(从原始到消费)
| |
提醒:PST baseline CSV 通常只适合 demo/backtest baseline;进入
paper/sim/live前需建立自己的 SSOT(同 §2.4)。
备注:PST 早期版本曾使用 Arctic 替代 Parquet 存储时间序列(现已弃用;见
docs/production.md)。本仓统一使用 Parquet。
注:生产日更通常不会从 roll calendars 重新生成 multiple/adjusted,而是在已有 multiple/adjusted 上做增量更新;发生展期由 roll status 驱动。
B.2 数据资产总表(要什么 / 从哪来 / 落到哪)
B.2.1 静态配置(低频更新)
| 数据资产 | 用途(与系统关系) | 常见获取途径 | PST baseline | 推荐 SSOT 落盘(本仓) |
|---|---|---|---|---|
| Instrument config(品种配置) | 点值/币种/资产类等,用于风险度量与报告 | 手工维护(初始可用 PST 示例) | ✅ data/futures/csvconfig/instrumentconfig.csv | 若需自定义,放 private/ 管理(避免改 data/ baseline) |
| Roll parameters(换月参数) | 定义 priced/hold cycle、offsets、carry offset,用于生成 roll calendars | 手工维护(初始可用 PST 示例) | ✅ data/futures/csvconfig/rollconfig.csv | 同上;建议变更走 private/ |
| Spread costs(点差/交易成本) | 回测成本、生产风控/执行约束 | 手工维护 + 定期校准 | ✅ data/futures/csvconfig/spreadcosts.csv | 生产建议写入 Mongo(集合 spread_costs);CSV 仅作为输入/备份 |
base_currency(基准币种) | PnL/风险汇总的基准币种 | config.base_currency 配置项 | — | 配置 SSOT 在 private/private_config.yaml(或其引用链) |
B.2.2 原始市场数据(必须外部获取)
| 数据资产 | 用途(与系统关系) | 常见获取途径 | 依赖/注意 | 推荐 SSOT 落盘(本仓) |
|---|---|---|---|---|
| Per-contract prices(期货合约历史价格 / per-contract) | Phase 0 的根输入:构建 multiple/adjusted;生产日更也以它为上游 | broker(如 IB)/ 数据商 / 自建抓取 | 常见为日线 OHLCV;PST 列名 OPEN/HIGH/LOW/FINAL/VOLUME,且 roll 切换点需 current/next 同日有价 | Parquet:<parquet_store>/futures_contract_prices/*.parquet |
| Spot FX(FX 汇率 / Spot FX) | 换汇、风险与 PnL | broker / 数据商 / 自建抓取 | 文件/标识按 GBPUSD 等;常见列 DATETIME/PRICE | Parquet:<parquet_store>/spotfx_prices/*.parquet(或 CSV:data/futures/fx_prices_csv/ 作为 baseline) |
| Capital / account value(资金/净值) | Layer 1(生产)计算 DailyCashRisk;影响目标仓位规模 | production 从 broker/账户系统;paper/sim 可用模拟序列 | 不属于 Phase 0,但属于生产闭环必需 | Parquet/Mongo(随 production 配置);回测可用 backtest 资本序列 |
B.2.3 Phase 0 派生资产(你生成/维护)
| 派生资产 | 生成所需输入 | 产物用途 | PST baseline | 推荐 SSOT 落盘(本仓) |
|---|---|---|---|---|
| Roll calendars(换月日历) | roll parameters + per-contract prices(或从 multiple 反推后再人工校正) | 冷启动/重建/修复时用于生成 multiple/adjusted 的切换时间轴 | ✅ data/futures/roll_calendars_csv/ | CSV:private/data/futures/roll_calendars_csv/(SSOT;可追溯/可审计) |
| Multiple prices(多合约对齐价) | roll calendars + per-contract prices | carry/adjusted 上游;部分规则直接用 | ✅ data/futures/multiple_prices_csv/(通常过期) | Parquet:<parquet_store>/futures_multiple_prices/*.parquet |
| Adjusted prices(连续价 / back-adjusted) | multiple prices | trend 等信号常用连续序列;回测 rawdata | ✅ data/futures/adjusted_prices_csv/(通常过期) | Parquet:<parquet_store>/futures_adjusted_prices/*.parquet |
B.2.4 运行产物(系统运行生成)
| 产物 | 典型内容 | 落盘位置(概念) |
|---|---|---|
| Backtest results | 绩效、诊断、图表、日志 | private/data/runtime/backtests/(见 local_data_management.md) |
| Production state | sampled contracts、roll state、order stack、historic orders、limits 等 | MongoDB(按 sysdata/mongodb/* 约定的集合) |
| Time series outputs | optimal positions、capital snapshots、positions 等 | Parquet(按 sysdata/parquet/* 数据类型目录) |
| Logs/Reports | 运行日志、风险报告、监控输出 | private/data/runtime/logs/(以及配置指定目录) |
本仓的数据/产物目录建议遵循
local_data_management.md:配置进 Git、数据与产物出 Git。
B.3 典型问题:如何“更新 multiple prices”?
以 data/futures/multiple_prices_csv/ 为例:
- **生成/重建 multiple prices(从无到有)**通常依赖两样:
roll calendars(告诉系统某天 current/next/carry 是哪个合约)per-contract prices(这些合约在这天的价格;PST 通常用FINAL)
- **生产日更的增量更新(无展期)**通常依赖:
- existing
multiple prices+per-contract prices(官方入口为update_multiple_adjusted_prices,见sysproduction/update_multiple_adjusted_prices.py;会对现有 multiple/adjusted 做增量更新)
- existing
- 发生展期(roll)时:需要先更新
roll status(例如interactive_update_roll_status),再写入新的 multiple/adjusted;否则update_multiple_adjusted_prices会拒绝更新。 - 是否需要写回
data/futures/multiple_prices_csv/?- 一般不需要:该目录更适合作为上游 baseline 对照。
- 若你确实需要 CSV(例如纯 CSV 回测),建议写到
private/的数据目录,并在配置中指向它,而不是覆盖data/。
B.4 相关入口(进一步深挖时再点)
- Phase 0 细节与断言:
carver-data-pipeline.md - 数据/产物目录规范:
local_data_management.md - PST 官方数据对象与生成脚本索引:
docs/data.md - PST 生产调度全貌(详细但庞大):
docs/production.md