创建人员:Codex
文件职责:记录 project B 实验数据目录、结果包组织方式、表 schema、读取方式和审计入口。
管理规范/模板:../../common/exp-doc/实验存储体系创建指南.md。
引用文件:实验规范.md;实验审计规范.md;../../common/exp-doc/实验环境创建指南.md。
project B 当前使用文件系统保存实验输入、结果、图片、日志和审计证据。
本文件覆盖:
project B/
exp-doc/
目录导读.md
实验规范.md
实验审计规范.md
实验存储体系.md
实验审计报告.md
实验问题记录.md
实验总纲.md
实验设计.md
实验执行日志.md
exp-data/
raw/<run_id>/
result/<run_id>/
img/<experiment_id>/<run_id>/
tmp/
实验总纲
-> 实验设计
-> 执行脚本或人工步骤
-> exp-data/raw/<run_id> 输入快照
-> exp-data/result/<run_id> 结果包
-> exp-data/img/<experiment_id>/<run_id> 图片
-> 执行日志
-> 审计报告
结果包路径:
exp-data/result/<run_id>/
结果包至少包含:
| 文件 | 作用 |
|---|---|
| summary.json | 机器可读摘要 |
| readout.md | 人读版结论和边界 |
| output_manifest.csv | 结果包资产清单 |
| input_manifest.csv | 输入资产清单 |
| table_name | storage_backend | storage_path_or_table | table_role | row_grain | primary_key | producer | consumer | update_mode | official_flag |
|---|---|---|---|---|---|---|---|---|---|
| synthetic_timeseries_input.csv | csv | exp-data/raw//synthetic_timeseries_input.csv | raw_input | object + event_date | experiment_id + run_id + object_id + event_date | smoke runner | 实验脚本/审计员 | overwrite_snapshot | 是 |
| timeseries_signal_result.csv | csv | exp-data/result//timeseries_signal_result.csv | output | object + event_date | experiment_id + run_id + object_id + event_date | smoke runner | 审计员/后续实验 | overwrite_snapshot | 是 |
| synthetic_kline_input.csv | csv | exp-data/raw//synthetic_kline_input.csv | raw_input | object + event_date | experiment_id + run_id + object_id + event_date | kline smoke runner | 实验脚本/审计员 | overwrite_snapshot | 是 |
| kline_feature_panel.csv | csv | exp-data/result//intermediate/kline_feature_panel.csv | intermediate_feature_panel | object + event_date | experiment_id + run_id + object_id + event_date | kline smoke runner | 审计员/后续实验 | overwrite_snapshot | 是 |
| kline_ma5_breakout_result.csv | csv | exp-data/result//kline_ma5_breakout_result.csv | output | object + event_date | experiment_id + run_id + object_id + event_date | kline smoke runner | 审计员/后续实验 | overwrite_snapshot | 是 |
| kline_volume_pullback_result.csv | csv | exp-data/result//kline_volume_pullback_result.csv | output | object + event_date | experiment_id + run_id + object_id + event_date | kline smoke runner | 审计员/后续实验 | overwrite_snapshot | 是 |
| input_manifest.csv | csv | exp-data/result//input_manifest.csv | manifest | artifact | artifact | smoke runner | 审计员 | overwrite_snapshot | 是 |
| output_manifest.csv | csv | exp-data/result//output_manifest.csv | manifest | artifact | artifact | smoke runner | 审计员 | overwrite_snapshot | 是 |
| field_name | data_type | required | nullable | meaning | source | time_semantics | example |
|---|---|---|---|---|---|---|---|
| experiment_id | string | 是 | 否 | 实验事项 ID | runner | generated-time | EXP-20260601-TIMESERIES-SMOKE-001 |
| run_id | string | 是 | 否 | 执行 run ID | runner | generated-time | RUN-20260601-TIMESERIES-SMOKE-001 |
| object_id | string | 是 | 否 | 合成对象 ID | synthetic generator | event-time | OBJECT001 |
| event_date | date | 是 | 否 | 事件日期 | synthetic generator | event-time | 2026-05-01 |
| open | decimal | 是 | 否 | 起始值 | synthetic generator | event-time | 10.00 |
| high | decimal | 是 | 否 | 区间高值 | synthetic generator | event-time | 10.18 |
| low | decimal | 是 | 否 | 区间低值 | synthetic generator | event-time | 9.85 |
| close | decimal | 是 | 否 | 结束值 | synthetic generator | event-time | 10.00 |
| volume | integer | 是 | 否 | 活跃度示例值 | synthetic generator | event-time | 106500 |
| data_source | string | 是 | 否 | 数据来源 | runner | generated-time | SYNTHETIC_TIMESERIES_SMOKE |
| source_visible_at | datetime | 是 | 否 | 本行数据可见时间 | runner | as-of note | 2026-05-01 15:00:00 |
除输入字段外,新增:
| field_name | data_type | required | nullable | meaning | source | time_semantics | example |
|---|---|---|---|---|---|---|---|
| ma5 | decimal/string | 是 | 是 | 5 日均线;不足 5 日为空 | runner | event-time | 10.01 |
| ma5_breakout_flag | integer | 是 | 否 | 收盘上穿 MA5 的示例信号 | runner | after-close smoke | 1 |
| signal_rule | string | 是 | 否 | 信号规则名 | runner | generated-time | close_cross_above_ma5_after_pullback |
| field_name | data_type | required | nullable | meaning | source | time_semantics | example |
|---|---|---|---|---|---|---|---|
| experiment_id | string | 是 | 否 | 实验事项 ID | runner | generated-time | EXP-20260601-KLINE-MA5-BREAKOUT-001 |
| run_id | string | 是 | 否 | 执行 run ID | runner | generated-time | RUN-20260601-KLINE-MA5-BREAKOUT-001 |
| object_id | string | 是 | 否 | 合成对象 ID | synthetic generator | event-time | KOBJ001 |
| event_date | date | 是 | 否 | K 线日期 | synthetic generator | event-time | 2026-05-01 |
| open | decimal | 是 | 否 | 开盘价示例值 | synthetic generator | event-time | 10.00 |
| high | decimal | 是 | 否 | 最高价示例值 | synthetic generator | event-time | 10.18 |
| low | decimal | 是 | 否 | 最低价示例值 | synthetic generator | event-time | 9.85 |
| close | decimal | 是 | 否 | 收盘价示例值 | synthetic generator | event-time | 10.00 |
| volume | integer | 是 | 否 | 成交量示例值 | synthetic generator | event-time | 2100 |
除 synthetic_kline_input.csv 的部分字段外,保留:
| field_name | data_type | required | nullable | meaning | source | time_semantics | example |
|---|---|---|---|---|---|---|---|
| experiment_id | string | 是 | 否 | 实验事项 ID | runner | generated-time | EXP-20260601-KLINE-MA5-BREAKOUT-001 |
| run_id | string | 是 | 否 | 执行 run ID | runner | generated-time | RUN-20260601-KLINE-MA5-BREAKOUT-001 |
| object_id | string | 是 | 否 | 合成对象 ID | synthetic generator | event-time | KOBJ001 |
| event_date | date | 是 | 否 | K 线日期 | synthetic generator | event-time | 2026-05-01 |
| close | decimal | 是 | 否 | 收盘价示例值 | synthetic generator | event-time | 10.00 |
| volume | integer | 是 | 否 | 成交量示例值 | synthetic generator | event-time | 2100 |
| ma5 | decimal/string | 是 | 是 | 5 日均线;不适用或不足窗口为空 | runner | after-close smoke | 10.01 |
| ma10 | decimal/string | 是 | 是 | 10 日均线;不适用或不足窗口为空 | runner | after-close smoke | 21.18 |
除 synthetic_kline_input.csv 字段外,新增:
| field_name | data_type | required | nullable | meaning | source | time_semantics | example |
|---|---|---|---|---|---|---|---|
| ma5 | decimal/string | 是 | 是 | 5 日均线;不适用或不足窗口为空 | runner | after-close smoke | 10.01 |
| ma10 | decimal/string | 是 | 是 | 10 日均线;不适用或不足窗口为空 | runner | after-close smoke | 21.18 |
| signal_type | string | 是 | 是 | 示例信号类型 | runner | generated-time | MA5_BREAKOUT |
| signal_flag | integer | 是 | 否 | 示例信号是否命中 | runner | after-close smoke | 1 |
| signal_reason | string | 是 | 是 | 示例信号命中原因 | runner | generated-time | close_cross_above_ma5 |
| field_name | data_type | required | nullable | meaning |
|---|---|---|---|---|
| artifact | string | 是 | 否 | 资产文件名 |
| path | string | 是 | 否 | 资产路径 |
| artifact_role | string | 是 | 否 | 资产角色 |
| row_count / row_count_or_count | integer | 是 | 否 | 行数或资产数量 |
| sha256 | string | 是 | 否 | 文件 hash |
人读:
exp-doc/目录导读.md
-> 实验总纲.md
-> 实验设计.md
-> 实验执行日志.md
-> exp-data/result/<run_id>/readout.md
-> exp-doc/实验审计报告.md
AI 读:
实验总纲
-> 实验设计
-> output_manifest.csv
-> summary.json
-> 关键结果表 / 图片
-> 审计报告
exp-data/tmp/ 只存临时脚本和临时文件。临时文件不能作为正式结论入口。
如果临时脚本用于正式实验,应在执行日志和 output_manifest 中记录脚本路径和 hash。