Files
2026-08-29 20:37:06 +08:00

3.7 KiB

板块资金雷达实现依据

已选择的产品边界

用户选择 Tushare 独立生产 MVP,并确认具备 Tushare 权限。生产运行时不依赖 OneChartLab;公开 payload 只用于验证公开契约、构造固定样本和对账。未公开公式必须使用知行系统自己的策略名称与版本。

仓库复用点

  • 后端采用 modules/<bounded_context>/{domain,application,infrastructure,presentation},依据 docs/adr/0001-bounded-context-first-modular-monolith.md 和 .trellis/spec/backend/directory-structure.md。雷达应创建独立 bounded context。
  • market_data.infrastructure.tushare.RequestCoordinator 已实现供应商请求冷却、退避和有限重试;TushareAdapter 已使用注入的 pro_api(token) client。相关实现位于 zhixing-server/src/zhixing_server/modules/market_data/infrastructure/tushare.py:40-126,235-377。
  • SyncMarketData 已实现 advisory lock、批次审计、部分成功和定向重试,位于 zhixing-server/src/zhixing_server/modules/market_data/application/sync.py:150-165,255-261,408-532。
  • PostgreSQL 适配器已有连接池、事务、staging + COPY 和幂等 upsert 模式,位于 zhixing-server/src/zhixing_server/modules/market_data/infrastructure/postgres.py:26-57,296-401,769-925。
  • FastAPI 业务路由由 zhixing-server/src/zhixing_server/interfaces/http/router.py:10-18 统一挂载;浏览器固定使用同源 /api/v1。
  • 前端垂直切片、路由和页面状态模式分别见 zhixing-web/src/routes/route-tree.tsx:17-70、zhixing-web/src/features/home/api/、zhixing-web/src/features/home/pages/home-page.tsx。当前没有图表依赖,因此首个 MVP 不加入轨迹图。
  • .codegraph/ 不存在,跨文件影响分析只能使用源码、测试和 rg。

当前 Tushare 客户端核验

项目声明 tushare>=1.4.24,见 zhixing-server/pyproject.toml:7-16。2026-08-28 通过 Context7 解析 /waditu/tushare 与 /websites/tushare_pro,确认:

  • ts.pro_api(token) 创建 DataApi;客户端 query(api_name, fields, **kwargs) 把接口名、token、参数和字段列表发送到服务端。
  • 客户端本身不执行积分、权限、频率或行数限制;这些限制由 Tushare 服务端返回。因此采集 Job 必须记录安全错误类别、响应行数和覆盖率,并在返回数接近单次上限时分片重拉。
  • 不采用 set_token() 的用户目录持久化方式;项目继续通过 Settings 注入 token,避免凭据落盘或进入任务文档。

Context7 对具体板块接口的字段覆盖有限,接口字段、单位、历史边界和 2026-08-28 权限快照继续以 docs/research/onechartlab-tushare-data-requirements.md 所列 Tushare 第一方页面为实现依据。上线前由目标账号执行能力探测,不能把文档积分视为账号实测结果。

独立指标契约

  • zhixing_amount_net_bn_v1:对当日有效成员的 moneyflow_dc.net_amount 求和,由万元除以 10,000 转为亿元;它是待公开样本对账的独立聚合,不宣称原站等价。
  • zhixing_ratio_turnover_v1:先统一为元,再计算板块 sum(net_amount) / sum(daily.amount);分母为零或输入缺失时返回 NULL。
  • zhixing_swing_equal_3_10_v1:对窗口 3—10 个交易日分别计算 sum(net_amount) / sum(turnover),再对八个完整窗口等权平均。任何窗口不完整时该指标不可用。该公式是透明、可替换的知行独立实现,不是 OneChartLab 的 3—10 日权重或 Swing_Score。
  • 横截面排名按指标值降序、板块代码升序稳定打破并列;概念与行业独立成池。RankPct、TOP/BOTTOM 阈值和 PastRank - CurrentRank 复用公开确认算法。