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 静态页面与历史归档

三个边界必须保持独立:

  1. 研究工具层:MCP、缓存和通达信细粒度数据只存在于本机。
  2. 公开数据层:Git 只保存经过裁剪和人工核验的日级派生结果。
  3. 展示层: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 和时区;休市、半日市、来源延迟和上一交易日数据均明确标注,不强行拼成“同一时刻”。

每日采集时序

默认按北京时间执行两次:

  1. 18:30 亚洲收盘采集
    • A 股、港股、日本、韩国、台湾的代表指数。
    • A 股市场宽度、成交额、板块和自选行情。
    • 通达信盘后选股策略及其所需的细粒度数据。
    • 生成未完成的当日复盘快照。
  2. 次日 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-review Skill。

这些改动属于本机配置,不提交到博客仓库。

阶段 2:数据契约与采集

  • 建立 provider 适配层、统一 symbol、市场日历和公开 schema。
  • 迁移现有 fetch-market / fetch-stocks 能力,保留兼容和分区降级。
  • 实现两阶段采集、公开裁剪、追加式历史和确定性校验。
  • 加入数据数量、日期、字段、异常值和敏感信息测试。

阶段 3:网页与历史档案

  • 改造股票总览。
  • 增加每日复盘、历史分页和数据状态。
  • 按实际需求引入时间序列图表;不先建空壳详情页。
  • 完成桌面、手机、亮色和夜读验证。

阶段 4:通达信策略

  • 根据作者后续提供的策略逐个登记契约和版本。
  • 建立确定性的策略运行、失败记录和公开输出。
  • 每个策略单独增加测试样本,不让修改后的策略重写旧日结果。

建议提交分组:

  1. docs: plan daily stock review architecture
  2. feat(data): add stock review schemas and provider adapters
  3. feat(data): add two-stage daily snapshot pipeline
  4. feat(site): add stock review archive and visualizations
  5. test: 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 门禁或生产部署。