blog-demo · 归档与说明
股票复盘模块说明
股票日级复盘的数据契约、研究边界、市场矩阵与策略版本约定。
- 状态
- 维护中
- 最后核对
- 源码修订
e0d3baa2
股票复盘模块说明
本文保留股票数据复盘功能已经确认的产品边界、数据来源、架构取舍和实施依据。每天怎样采集、校验与落盘,见股票复盘维护手册;功能是否已经公开上线,仍以 Release 与 ECS 验收记录为准。
当前进度(2026-09-13)
- 首轮实现已合入
v1.0.0冻结候选;是否已生成 Release 制品及公开上线,仍以版本工作流和 ECS 验收记录为准。 - 本机已隔离安装并登记
eltdx 3.1.9与stock-sdk 2.4.4;两个 stdio server 均已完成 MCP 握手与工具清单验证。新工具需要重启 Codex 或新开任务后才会载入当前会话。 - 已安装窄范围本地 Skill
tdx-daily-review。它只编排采集、校验和公开快照生成,不提交、不推送、不发布,也不给出买卖建议。 - Skill 已加入
tdx-b1@1.0.0的确定性本机 runner,按通达信的 EMA、SMA、REF、HHV / LLV 递推语义计算完整公式,并在任何 provider 异常时把整次策略运行标为失败,不公开残缺命中。 - 仓库已加入 11 个指数的市场注册表、统一自选代码、严格公开 schema、亚洲/美股两阶段合并、隐私字段拒绝和追加式日级目录。
- 已加入最近复盘、历史筛选、日期直达页和构建期小倍图;网页只读取仓库中的公开日级数据。
- 已登记
tdx-b1@1.0.0,固定前复权、沪深京 A 股、250 个交易日门槛、ST / 退市整理 / 停牌过滤和成交额降序;完整公式只保留在本机 Skill。 - 每日复盘与跨市场走势统一从
2026-09-11开始统计;不再保留此前由旧快照迁移出的历史底稿。 - 东方财富批量接口已验证日经 225、KOSPI、台湾加权、恒生科技、标普 500 和纳斯达克 100 的代码。
- 尚未自动安装 18:30 / 07:00 的本机定时任务;先通过数日手动采集验证交易日、幂等与失败降级,再单独接入
launchd。 - 本分支已通过公开快照校验、Astro 检查、99 页构建、130 条单元测试、全站 Edge 冒烟测试,以及股票总览/归档/详情/策略页的 16 张 Edge 视觉回归。
2026-09-11已作为首份公开复盘写入仓库:11 个指数全部取得,12 只自选股有日行情,A 股板块宽度覆盖 496 个行业板块,整份记录状态为complete。- B1 已在通达信服务端确认的真实交易日
2026-09-11完成全沪深京扫描验收:股票池 5,570 只,处理 5,366 只,命中 11 只,provider 错误 0;公开投影已经人工核验,并通过仓库 staging dry-run 与本机公开 schema 校验。 - 当前任务没有注入新安装的 MCP 工具;上述真实验收由固定版本的本机
eltdx环境和同一 Skill runner 执行。这证明数据访问、公式计算、失败门禁与公开投影闭环可运行,但不把“本任务可直接调用 MCP”写成已验证事实。
目标与边界
股票栏目从“最近一份行情快照”扩展为可按日回看的市场与自选股档案,同时保留现有 Astro 静态站、纸墨档案视觉语言和诚实的数据状态。
已确认的范围:
- 复盘对象是市场、自选股和后续提供的通达信盘后选股策略。
- 不记录或公开持仓、成本、买卖、仓位、盈亏金额、止盈止损和其他具体操作。
- 自选范围包括 A 股、港股、美股、ETF 和基金。
- 日本、韩国、台湾只展示市场指数,不维护当地个股自选。
- 复盘频率为每日;亚洲盘和美股分两次采集。
- 创业板指是跨市场比较的统一基准。
eltdx只用于本机、非商业研究,不部署到 ECS,不把其分钟、逐笔、盘口等原始数据发布到网页。
明确不做:
- 不把站点改造成实时交易终端,不在浏览器中直接请求行情供应商。
- 不迁移到 React、Next.js 或其他前端框架,不为看板引入完整后台和数据库。
- 不自动生成买卖建议,不把策略命中描述为收益承诺。
- 不在构建、Release 或生产容器中启动 MCP,也不让第三方行情失败拖垮整站构建。
现有基础
仓库已经具备可以复用的实现:
dbc171a:股票兴趣页、自选股清单和东方财富构建时抓取。77ec30b:大盘水温、指数、板块宽度和市场复盘卡片。2611541:指数与板块分区降级。ac05058:板块行情切换到批量接口并保留失败回退。f5a00e8:指数与板块分别记录真实数据时间。src/pages/interests/stocks/index.astro、src/components/MarketPulse.astro:现有股票页面与市场概览。scripts/fetch-stocks.mjs、scripts/fetch-market.mjs、scripts/market-lib.mjs:抓取、标准化和纯逻辑测试入口。src/data/stocks.json、src/data/market.json:可重建的已保存快照。tests/market.test.mjs与股票页视觉基线:数据逻辑和桌面/移动展示回归。
历史内容架构文档已把股票页定义为“真数据、每天变化的内容”,因此本次是在原栏目上补齐历史、策略和跨市场能力,而不是另建一套仪表盘产品。
总体架构
本机 Codex
├── eltdx MCP
│ └── A 股分钟、逐笔、竞价、复权、资金流和策略输入
├── Eastmoney MCP
│ └── A/H/美股、ETF、基金、指数、板块及公开行情
└── tdx-daily-review Skill
└── 编排采集、校验、策略运行与公开结果生成
│
▼
本机私有细粒度缓存
│
标准化、裁剪、校验
│
▼
仓库内公开日级派生快照
│
▼
Astro 静态页面与历史归档
三个边界必须保持独立:
- 研究工具层:MCP、缓存和通达信细粒度数据只存在于本机。
- 公开数据层:Git 只保存经过裁剪和人工核验的日级派生结果。
- 展示层:Astro 构建只读取仓库数据,不在构建或访问页面时抓取外网。
本地 MCP 规划
通达信:eltdx
首选 electkismet/eltdx。它提供标准 stdio MCP,覆盖行情快照、五档、分钟线、逐笔、集合竞价、复权、资金流、涨跌停、题材和 F10,粒度足以承载后续盘后选股策略。
实施约束:
- 使用独立 Python 环境并固定经过验证的版本,不污染博客的 Node 依赖。
- 注册为本机 stdio MCP,不开放 HTTP 服务,不进入生产容器。
- 修复本机 Python/PyPI CA 证书链后再安装,不使用
--trusted-host跳过 TLS 校验。 - 遵守其 Research-Only License:只作个人、非商业研究;网页不发布原始分钟、逐笔、盘口或可重构原始数据的数据集。
- 是否可以公开特定派生指标仍以许可证、数据源条款和实际字段为准;不确定的字段默认不发布。
东方财富:stock-sdk
首选 chengzuopeng/stock-sdk。它是 Node/TypeScript 包,内置 MCP、统一代码模型、错误分类、重试、限流和熔断,已覆盖 A 股、港股、美股、ETF、基金以及日线/分钟线等常用能力。
实施约束:
- 固定具体版本并安装到独立工具目录,不在长期配置里使用未固定版本的
npx -y ... latest。 - MCP 初始只开放每日复盘需要的工具,不一次暴露全部工具。
- 复用其代码标准化、请求治理和 MCP 接口;公开数据仍经过本站自己的 schema 与质量检查。
- 日本、韩国、台湾只需要指数。先验证东方财富全球指数接口的代码、历史和时间字段;覆盖不足时通过同一 provider 适配层补一个指数来源,不增加第三套网页运行时。
本地 Codex Skill
使用 skill-creator 建立 tdx-daily-review,而不是安装一整套宽泛的“投资分析”提示词。
Skill 只负责:
- 根据采集阶段调用正确的 MCP 工具。
- 检查交易日、市场时区、复权方式、来源时间和缺失字段。
- 调用已经登记版本的通达信选股策略。
- 将策略结果转换为公开 schema,并保留策略版本、参数摘要、输入数据时间和可核验依据。
- 生成待人工核验的快照,不直接提交、推送、发布或给出买卖建议。
建议结构:
tdx-daily-review/
├── SKILL.md
├── references/
│ ├── market-map.md
│ ├── public-schema.md
│ └── strategy-contract.md
└── scripts/
└── validate-public-snapshot.*
后续收到具体策略时,每个策略需要登记:稳定 ID、版本、适用股票池、运行时点、所需字段、参数、输出字段、失败条件和公开解释。历史结果不随新版本回算覆盖。
市场与指数
默认市场矩阵如下:
| 市场 | 代表指数 | 用途 |
|---|---|---|
| 中国内地 | 创业板指 | 统一比较基准 |
| 中国内地 | 上证指数、沪深 300、科创 50 | 市场风格与宽度补充 |
| 中国香港 | 恒生指数、恒生科技指数 | 港股市场观察 |
| 美国 | 标普 500、纳斯达克 100 | 美股市场观察 |
| 日本 | 日经 225 | 仅市场指数 |
| 韩国 | KOSPI | 仅市场指数 |
| 中国台湾 | 台湾加权指数 | 仅市场指数 |
跨市场走势从 2026-09-11 起,统一换算为各指数相对首个有效收盘的累计收益,并以创业板指为基准比较。不同市场必须保留自己的 sessionDate、asOf 和时区;休市、半日市、来源延迟和上一交易日数据均明确标注,不强行拼成“同一时刻”。
每日采集时序
默认按北京时间执行两次:
- 18:30 亚洲收盘采集
- A 股、港股、日本、韩国、台湾的代表指数。
- A 股市场宽度、成交额、板块和自选行情。
- 通达信盘后选股策略及其所需的细粒度数据。
- 生成未完成的当日复盘快照。
- 次日 07:00 美股补全
- 补充对应美股交易日的标普 500、纳斯达克 100 和美股自选。
- 完成跨市场归一化比较和公开快照。
复盘主键使用亚洲交易日 reviewDate。每个市场同时保存自身的 sessionDate,避免美股跨自然日后被错误归到下一份复盘。节假日不伪造数据:记录 closed、stale 或 failed,并保留最近成功记录的真实时间。
公开数据契约
建议按日期追加,不覆盖历史:
src/data/stock-review/
├── markets.json
├── watchlist.json
└── daily/
└── YYYY/
└── YYYY-MM-DD.json
每日记录至少包括:
schemaVersion
reviewDate
generatedAt
status
sources[]
provider / dataset / sessionDate / asOf / status / errorCode
benchmark
markets[]
market / index / close / percent / normalizedReturn / turnover
breadth
up / down / flat / total / temperature / leaders / laggards
watchlist[]
symbol / market / name / close / percent / amplitude / turnover / relativeToBenchmark
strategies[]
strategyId / strategyVersion / runAt / universe / inputAsOf / parametersHash / matches[]
策略结果只描述“命中规则、排序、证据和数据时点”,不出现买入、卖出、仓位、目标价或止损建议。
本机私有缓存、MCP 配置、策略原始中间表、Token、服务地址和完整细粒度数据都必须位于 Git 忽略范围之外。提交前需要自动扫描公开快照,拒绝未知字段和疑似凭据。
当前仓库命令:
# 只验证仓库里已有的所有公开快照
npm run stock-review:validate
# 预览一次本机 Skill 生成的标准化阶段输入,不写仓库
npm run stock-review:stage -- --input /absolute/path/to/capture.json --dry-run
# 校验并原子合并到 src/data/stock-review/daily/YYYY/YYYY-MM-DD.json
npm run stock-review:stage -- --input /absolute/path/to/capture.json
阶段输入使用 captureVersion: 1,并显式指定 stage: asia | us。脚本只接受标准化后的日级公开字段,不联网,也不读取 MCP 原始缓存。
已登记策略:B1
tdx-b1@1.0.0 的公开契约位于 src/data/stock-review/strategies.json,网页入口为 /interests/stocks/strategies/tdx-b1/。执行口径固定为:
- 使用前复权日线,在亚洲盘后阶段运行,股票池为沪深京 A 股。
- 排除 ST、
*ST、退市整理、当日停牌或成交额为零的证券。 - 排除有效历史不足 250 个交易日,以及开高低收、前收盘、当日及前两日成交量、成交额、流通股本或证券状态缺失的证券。
- 使用作者确认的
N1=13、N2=0、N3=7与M1=14、M2=28、M3=57、M4=114;收盘变化上限为 2%,流通市值下限为 50 亿元。 - 九日最高价与最低价之差不大于零时直接判为不合格,不用人为替代值制造低 RSV 命中。
- 全部命中先按当日成交额从高到低排序,再写入从 1 开始的连续公开名次。
完整通达信公式和逐股拒绝过程保存在本机 tdx-daily-review/references/strategies/,不进入 Git;公开仓库只记录策略 ID、版本、口径、参数摘要哈希、公式哈希和日级公开证据。公式、参数、股票池、复权方式或其他实质逻辑变化时必须升级版本,不能用新规则覆盖旧快照。
B1 真实交易日验收
2026 年 9 月 12 日,本机 runner 对通达信服务端最新已收盘交易日 2026-09-11 做了两层验证:先用 12 只真实 A 股完成小批量联调,再扫描完整沪深京股票池。完整扫描结果如下:
- 股票池共 5,570 只;名称过滤后处理 5,366 只,其中 170 只历史不足、8 只停牌,名称规则排除 204 只。
- 策略状态为
fresh,provider 错误为 0,最终命中 11 只。 - 11 条命中均使用
2026-09-11T15:00:00+08:00的输入时间,按成交额严格降序,公开名次从 1 到 11 连续。 - 本机公式文件 SHA-256 与登记的
sha256:be147a9f755b4ab71b145493d1345b7c547983cee7c8584adb222fb544f5ec5e一致,runner 自测通过。 - 只提取
strategyRecord与日级来源元数据合入标准化 capture;仓库 staging dry-run 和独立公开 schema 校验均通过。全市场诊断、完整公式、原始日线与逐股拒绝详情没有进入公开快照。 - 市场、自选股与美股补全经人工核验后,已经合并为
src/data/stock-review/daily/2026/2026-09-11.json;真实策略候选只有经过公开字段裁剪、完整性检查和人工复核后才可进入仓库。
页面信息架构
/interests/stocks/
- 最近完成的复盘日期与各数据源状态。
- 全球市场收盘矩阵。
- 以创业板指为基准的归一化走势。
- A 股水温、市场宽度、成交额、领涨和领跌板块。
- 按市场分组的自选股日行情。
- 最新通达信策略观察结果。
- 历史复盘和数据说明入口。
/interests/stocks/reviews/YYYY-MM-DD/
- 一天一条稳定链接。
- 亚洲盘与美股分别标注 session、来源和保存时间。
- 市场事实、相对基准、自选表现和策略命中按阅读顺序排列。
- 自动生成的事实与作者后来补充的文字明确区分。
/interests/stocks/history/
- 静态分页,默认按日期倒序。
- 可按市场、数据状态和策略筛选,筛选状态保留在 URL。
- 无 JavaScript 时仍可访问全部复盘。
/interests/stocks/strategies/[id]/
- 在收到第一份策略后启用。
- 展示策略公开说明、当前版本、所需数据、运行时间和历次命中。
- 不展示私有参数、账户数据或操作建议。
可视化原则
- 保留现有“纸墨档案”排版、纸色、藏青、朱红和克制圆角,不做霓虹交易终端。
- 全球指数用归一化折线回答“谁相对创业板更强”;不用双 Y 轴。
- 市场宽度使用分段条或小倍图;行业多时优先排序条形图,不用多切片饼图。
- 自选表格是精确数据主入口,趋势图只补充时间关系。
- 保留 A 股红涨绿跌习惯,同时使用正负号、直接标签、线型或纹理,不能只靠颜色区分。
- 每张图提供文字摘要和语义化表格;键盘、触摸和窄屏都能获得相同信息。
- 普通走势优先构建期 SVG。只有分钟/K 线需要缩放、十字线或区间查看时,才引入
lightweight-charts客户端岛。 - 若使用 TradingView Lightweight Charts,安装并使用其仓库自带 Agent Skill,同时按许可证要求保留归属说明。
失败与降级
- 两个 MCP 分别失败、分别记录,不以一个
stale覆盖所有市场。 - 通达信失败不影响全球指数、自选快照或整站构建。
- 美股补全失败时保留亚洲盘完成状态,页面明确显示美股尚未补齐。
- 上游返回数量骤降、字段口径变化、时间倒退或价格异常时拒绝覆盖上次成功数据。
- 上一次数据可以作为降级展示,但必须显示它自己的真实时间和来源。
- 构建成功、快照采集成功、Git 提交、Release 制品和 ECS 上线是五个独立状态。
实施阶段与提交边界
阶段 0:接入审计
- 修复 Python CA 证书链。
- 在临时隔离环境安装固定版本候选,核对 MCP 工具清单和返回 schema。
- 验证各市场指数、分钟线、复权、交易日和失败行为。
- 确认许可证与可公开字段边界。
阶段 1:本地研究工具
- 备份本机 Codex 配置。
- 安装并注册
eltdx与 Eastmoney MCP。 - 重启本地 Codex 客户端,在新会话验证工具真实可调用。
- 创建并验证
tdx-daily-reviewSkill。
这些改动属于本机配置,不提交到博客仓库。
阶段 2:数据契约与采集
- 建立 provider 适配层、统一 symbol、市场日历和公开 schema。
- 迁移现有
fetch-market/fetch-stocks能力,保留兼容和分区降级。 - 实现两阶段采集、公开裁剪、追加式历史和确定性校验。
- 加入数据数量、日期、字段、异常值和敏感信息测试。
阶段 3:网页与历史档案
- 改造股票总览。
- 增加每日复盘、历史分页和数据状态。
- 按实际需求引入时间序列图表;不先建空壳详情页。
- 完成桌面、手机、亮色和夜读验证。
阶段 4:通达信策略
- 根据作者后续提供的策略逐个登记契约和版本。
- 建立确定性的策略运行、失败记录和公开输出。
- 每个策略单独增加测试样本,不让修改后的策略重写旧日结果。
建议提交分组:
docs: plan daily stock review architecturefeat(data): add stock review schemas and provider adaptersfeat(data): add two-stage daily snapshot pipelinefeat(site): add stock review archive and visualizationstest: cover stock review data and browser behavior
验收门槛
- 每个市场和数据集都能回答“哪一个交易日、什么时间、来自哪里、是否新鲜”。
- 创业板基准与各指数归一化计算有固定样例测试。
- 不同市场休市或单一来源失败时,其他内容仍可生成。
- 公开快照不含 MCP 配置、密钥、服务地址、持仓、交易或细粒度原始数据。
- 页面在无脚本、窄屏、键盘和 reduced-motion 条件下可读可用。
- 相关改动依次通过
npm run check、npm run build、单元/浏览器测试和 Edge 视觉回归。 - 全部快照先核验再提交;普通提交不等于数据已上线。
外部参考与取舍
| 仓库 | 参考内容 | 处理方式 |
|---|---|---|
electkismet/eltdx |
标准 stdio MCP、通达信 7709/7615、细粒度数据与字段边界 | 计划采用;严格限本机研究,遵守 Research-Only License |
chengzuopeng/stock-sdk |
Node MCP、统一 symbol、A/H/美股/ETF/基金、请求治理 | 计划采用为 Eastmoney MCP 候选;固定版本并二次校验输出 |
chengzuopeng/stock-dashboard |
总览、热力、榜单、自选、尾盘选股和详情的信息架构 | 只借鉴任务划分;不迁移其 React、ECharts、Framer Motion 栈 |
OpenBB-finance/OpenBB |
“connect once, consume everywhere”的 provider 适配思想 | 只借鉴架构;不复制 AGPL 代码,不引入完整平台 |
tradingview/lightweight-charts |
金融时间序列、十字线、缩放和官方 Agent Skill | 交互式分钟/K 线确有需求时采用;保留许可证要求的归属说明 |
openstockdata/stock-data-mcp |
多数据源故障转移与来源状态工具 | 作为降级设计参考;初期不引入其宽依赖和随机请求补丁 |
adambbhe/TDX-finance-mcp-plugin-v3 |
通达信工具分类和策略 Skill 列表 | 不采用运行时;OpenClaw 专用,且默认用明文 HTTP 传 Token;仅审阅其任务分类 |
meission/eastmoney |
东方财富查询、搜索和选股 Skill 分类 | 不安装;仓库主要是二次整理的提示说明,没有 MCP 实现 |
portfolio-performance/portfolio |
多资产绩效与历史归档思路 | 当前不采用;本项目不记录持仓与交易绩效 |
ghostfolio/ghostfolio |
隐私、数据所有权和移动端投资信息展示 | 只参考边界意识;账户、交易、数据库和持续运行后台均超出范围 |
外部项目只提供设计证据和候选实现。真正接入前仍需检查固定版本的源码、依赖、许可证、网络目标和实际返回,不能仅凭 README 或 Star 数决定采用。
Git 与发布边界
- 功能分支:
codex/feature/stock-daily-review。 - 分支基线:创建时的本地
main,实施前仍需 fetch 并确认与期望上游一致。 - 本机 MCP/Skill 配置与仓库源码分开;真实配置、缓存和拓扑不入 Git。
- 本文档属于 prepare 阶段。页面、策略和数据范围可以继续评审;未得到作者明确批准前,不进入完整 Release 门禁或生产部署。