- USAGE 新增 §6.3.1「归档的日常操作」:查看 / 筛选(回写 URL)/ 导出完整 JSON / 以此参数再跑 / 删除(写明「删除即失去结果,结果只存归档一份」)/ 历史归档用 restore_experiment_from_job 按原 id 重建;并说明归档完整度如何标注 - USAGE/README 更正技术栈与图表基座:TradingView Lightweight Charts 4.2.3 为唯一 图表基座(ECharts 已从 package.json、pnpm-lock.yaml、node_modules、文档与 架构图标注中全部清除),并记录实测证据(个股页图表根节点为 div.tv-lightweight-charts,页面 canvas 无一来自其它图表库) - ARCHITECTURE 更正「当前数据库」(原写 SQLite/未来 MySQL):现为本机 MariaDB 10.11, §6 补目标库硬约束;USAGE 补服务器身份与实测连接证据 - AGENT.md 新增 §0.1:数据库目标只允许本机 MariaDB,禁止 192.168.1.10, 由 config.py::assert_db_target_allowed 硬拦截(命中直接抛错,不静默降级) - DEV_PLAN_DIVIDEND_BACKTEST 记录三轮实施与验证、归档恢复边界(§12.5)、已知限制 - DEV_PLAN v2/v3 标注为历史记录(避免把当时的远端库地址当现状照抄); ROADMAP 更正 M3 图表选型
373 lines
7.9 KiB
JSON
373 lines
7.9 KiB
JSON
{
|
||
"schema_version": 1,
|
||
"diagram_type": "dataflow",
|
||
"meta": {
|
||
"title": "A股量化研究平台 · 数据流水",
|
||
"quality_profile": "showcase",
|
||
"viewBox": [
|
||
1300,
|
||
693
|
||
],
|
||
"views": [
|
||
{
|
||
"id": "main-path",
|
||
"label": "主研究数据流",
|
||
"focus": [
|
||
"tushare",
|
||
"provider",
|
||
"parquet",
|
||
"dataset",
|
||
"factor",
|
||
"backtest",
|
||
"experiment",
|
||
"api",
|
||
"web"
|
||
],
|
||
"note": "行情从 Tushare 一路流转到可复现的实验与可视化。"
|
||
},
|
||
{
|
||
"id": "future-free",
|
||
"label": "防未来函数口径",
|
||
"focus": [
|
||
"provider",
|
||
"sqlite",
|
||
"parquet",
|
||
"dataset"
|
||
],
|
||
"note": "财务数据按 announce_date 控制可见性,查询一律带 as_of_date。"
|
||
},
|
||
{
|
||
"id": "agent-path",
|
||
"label": "AI 研究助手消费",
|
||
"focus": [
|
||
"experiment",
|
||
"api",
|
||
"web"
|
||
],
|
||
"note": "结果经 API 提供给 Web UI;AI Agent(Phase 5)仅经受控 Tool 经 API 消费研究数据。"
|
||
}
|
||
]
|
||
},
|
||
"stages": [
|
||
{
|
||
"label": "数据接入"
|
||
},
|
||
{
|
||
"label": "数据落地"
|
||
},
|
||
{
|
||
"label": "特征构建"
|
||
},
|
||
{
|
||
"label": "研究计算"
|
||
},
|
||
{
|
||
"label": "回测 · 实验 · 消费"
|
||
}
|
||
],
|
||
"nodes": [
|
||
{
|
||
"id": "tushare",
|
||
"type": "external",
|
||
"label": "Tushare",
|
||
"sublabel": "日线 / 财务 / 交易日历",
|
||
"tag": "首选",
|
||
"stage": 0,
|
||
"row": 0,
|
||
"height": 36,
|
||
"yOffset": -2
|
||
},
|
||
{
|
||
"id": "provider",
|
||
"type": "backend",
|
||
"label": "Data Provider",
|
||
"sublabel": "归一化 / 校验 / 审计",
|
||
"tag": "MarketDataProvider",
|
||
"stage": 0,
|
||
"row": 2,
|
||
"width": 130,
|
||
"height": 36,
|
||
"yOffset": -2
|
||
},
|
||
{
|
||
"id": "sina",
|
||
"type": "external",
|
||
"label": "新浪财经",
|
||
"sublabel": "缺失兜底 / 交叉验证",
|
||
"tag": "备用",
|
||
"stage": 0,
|
||
"row": 4,
|
||
"height": 36,
|
||
"yOffset": -2
|
||
},
|
||
{
|
||
"id": "sqlite",
|
||
"type": "database",
|
||
"label": "SQLite",
|
||
"sublabel": "股票 / 日历 / 因子定义 / Job",
|
||
"tag": "业务库",
|
||
"stage": 1,
|
||
"row": 0,
|
||
"height": 36,
|
||
"yOffset": -2
|
||
},
|
||
{
|
||
"id": "parquet",
|
||
"type": "database",
|
||
"label": "Parquet",
|
||
"sublabel": "历史行情 / 复权 / 财务时序",
|
||
"tag": "时序库",
|
||
"stage": 1,
|
||
"row": 2,
|
||
"height": 36,
|
||
"yOffset": -2
|
||
},
|
||
{
|
||
"id": "dataset",
|
||
"type": "database",
|
||
"label": "Qlib Dataset",
|
||
"sublabel": "data/qlib 特征集",
|
||
"tag": "研究数据",
|
||
"stage": 2,
|
||
"row": 2,
|
||
"height": 36,
|
||
"yOffset": -2
|
||
},
|
||
{
|
||
"id": "factor",
|
||
"type": "backend",
|
||
"label": "因子研究",
|
||
"sublabel": "Alpha158 / 自定义因子",
|
||
"tag": "IC · 分层测试",
|
||
"stage": 3,
|
||
"row": 0,
|
||
"height": 36,
|
||
"yOffset": -2
|
||
},
|
||
{
|
||
"id": "model",
|
||
"type": "backend",
|
||
"label": "模型训练",
|
||
"sublabel": "LightGBM",
|
||
"tag": "预测信号",
|
||
"stage": 3,
|
||
"row": 2,
|
||
"height": 36,
|
||
"yOffset": -2
|
||
},
|
||
{
|
||
"id": "backtest",
|
||
"type": "backend",
|
||
"label": "选股回测",
|
||
"sublabel": "调仓 / 成本 / 涨跌停 / 停牌",
|
||
"tag": "低频策略",
|
||
"stage": 4,
|
||
"row": 0,
|
||
"height": 36,
|
||
"yOffset": -2
|
||
},
|
||
{
|
||
"id": "experiment",
|
||
"type": "database",
|
||
"label": "Experiment",
|
||
"sublabel": "参数 / 结果 / 数据与代码版本",
|
||
"tag": "可复现",
|
||
"stage": 4,
|
||
"row": 1,
|
||
"height": 36,
|
||
"yOffset": -2
|
||
},
|
||
{
|
||
"id": "api",
|
||
"type": "backend",
|
||
"label": "FastAPI API",
|
||
"sublabel": "业务 API(Pydantic DTO)",
|
||
"tag": "REST / SSE",
|
||
"stage": 4,
|
||
"row": 3,
|
||
"height": 36,
|
||
"yOffset": -2
|
||
},
|
||
{
|
||
"id": "web",
|
||
"type": "frontend",
|
||
"label": "Web UI",
|
||
"sublabel": "Next.js · Lightweight Charts",
|
||
"tag": "结果可视化",
|
||
"stage": 4,
|
||
"row": 4,
|
||
"height": 36,
|
||
"yOffset": -2
|
||
}
|
||
],
|
||
"flows": [
|
||
{
|
||
"id": "raw-tushare",
|
||
"from": "tushare",
|
||
"to": "provider",
|
||
"label": "行情 / 财务 raw",
|
||
"variant": "emphasis"
|
||
},
|
||
{
|
||
"id": "raw-sina",
|
||
"from": "sina",
|
||
"to": "provider",
|
||
"label": "兜底 raw",
|
||
"variant": "dashed"
|
||
},
|
||
{
|
||
"id": "to-sqlite",
|
||
"from": "provider",
|
||
"to": "sqlite",
|
||
"label": "股票 / 日历 / 元数据",
|
||
"labelAt": [
|
||
212,
|
||
256
|
||
]
|
||
},
|
||
{
|
||
"id": "to-parquet",
|
||
"from": "provider",
|
||
"to": "parquet",
|
||
"label": "行情 / 财务时序",
|
||
"route": "straight",
|
||
"labelAt": [
|
||
212,
|
||
426
|
||
]
|
||
},
|
||
{
|
||
"id": "calendar-to-dataset",
|
||
"from": "sqlite",
|
||
"to": "dataset",
|
||
"label": "交易日历 / 股票池",
|
||
"labelAt": [
|
||
422.5,
|
||
276
|
||
]
|
||
},
|
||
{
|
||
"id": "series-to-dataset",
|
||
"from": "parquet",
|
||
"to": "dataset",
|
||
"label": "行情特征输入",
|
||
"route": "straight",
|
||
"labelAt": [
|
||
452,
|
||
426
|
||
]
|
||
},
|
||
{
|
||
"id": "dataset-to-factor",
|
||
"from": "dataset",
|
||
"to": "factor",
|
||
"label": "特征矩阵",
|
||
"variant": "emphasis",
|
||
"labelAt": [
|
||
637.5,
|
||
268
|
||
]
|
||
},
|
||
{
|
||
"id": "dataset-to-model",
|
||
"from": "dataset",
|
||
"to": "model",
|
||
"label": "训练 / 预测特征",
|
||
"route": "straight",
|
||
"labelAt": [
|
||
610,
|
||
426
|
||
]
|
||
},
|
||
{
|
||
"id": "factor-signal",
|
||
"from": "factor",
|
||
"to": "backtest",
|
||
"label": "因子信号"
|
||
},
|
||
{
|
||
"id": "model-signal",
|
||
"from": "model",
|
||
"to": "backtest",
|
||
"label": "预测信号",
|
||
"labelAt": [
|
||
852.5,
|
||
298
|
||
]
|
||
},
|
||
{
|
||
"id": "factor-archive",
|
||
"from": "factor",
|
||
"to": "experiment",
|
||
"label": "因子测试归档",
|
||
"fromSide": "top",
|
||
"toSide": "right",
|
||
"via": [
|
||
[
|
||
745,
|
||
98
|
||
],
|
||
[
|
||
1060,
|
||
98
|
||
],
|
||
[
|
||
1060,
|
||
258
|
||
]
|
||
],
|
||
"labelAt": [
|
||
1060,
|
||
176
|
||
]
|
||
},
|
||
{
|
||
"id": "backtest-archive",
|
||
"from": "backtest",
|
||
"to": "experiment",
|
||
"label": "回测结果归档",
|
||
"variant": "emphasis"
|
||
},
|
||
{
|
||
"id": "query-result",
|
||
"from": "experiment",
|
||
"to": "api",
|
||
"label": "结果查询 DTO"
|
||
},
|
||
{
|
||
"id": "to-web",
|
||
"from": "api",
|
||
"to": "web",
|
||
"label": "REST / SSE"
|
||
}
|
||
],
|
||
"cards": [
|
||
{
|
||
"dot": "emerald",
|
||
"title": "主研究数据流",
|
||
"items": [
|
||
"Tushare → Data Provider(归一化 / 校验 / 审计)→ SQLite 与 Parquet 分流",
|
||
"Qlib Dataset 汇总日历与行情 → 因子 / 模型 → 回测 → Experiment 全量归档",
|
||
"每条拉取记录 source / 行数 / 时间,来源可追溯"
|
||
]
|
||
},
|
||
{
|
||
"dot": "violet",
|
||
"title": "防未来函数口径",
|
||
"items": [
|
||
"财务数据区分 report_date / announce_date,仅 announce_date 后可见",
|
||
"研究查询一律带 as_of_date,禁止未来成分 / 行业 / 财务数据",
|
||
"新浪仅作缺失兜底与交叉验证,禁止静默切换"
|
||
]
|
||
},
|
||
{
|
||
"dot": "amber",
|
||
"title": "结果消费",
|
||
"items": [
|
||
"Experiment → FastAPI API → Web UI(REST / SSE)可视化",
|
||
"AI Agent(Phase 5)仅经受控 Tool 经 API 读取研究数据与实验",
|
||
"历史实验含数据与代码版本,可一键复跑"
|
||
]
|
||
}
|
||
]
|
||
} |