18 Commits
Author SHA1 Message Date
shy3130 6e1c178c24 docs(deploy): 补充 host.docker.internal 访问与 data 挂载保护说明 2026-10-22 21:51:09 +08:00
shy3130 c36fea348a test(index-sync): 钉死 ETF 日K测试的日K路由并补全 daily 契约文档 (#502 后续)
- test_etf_adj_factor 的 TickFlow 分支用例补路由钉死: #502 后指数/ETF
  同步跟随 daily_data_provider 偏好, 不钉死会被本机 preferences.json
  配置的自定义日K源干扰
- docs/custom-data-source.md 补全 daily 数据集的指数/ETF 路由说明:
  按契约传 asset_type(stock/index/etf), 仅支持股票的源对其他资产类型
  返回空数据, 该轮同步告警回退 TickFlow
2026-10-21 20:57:05 +08:00
shy3130 b63c17e9ec feat(custom): 自定义数据源支持五档盘口与财务数据接入
后端拉取/路由/能力增广链路此前已就绪, 本次补齐缺口:

- 编辑器新增「五档盘口」「财务数据」数据集 tab: 五档预填
  symbol/asks/bids; 财务预填骨架三列, 下拉可选五表全部 canonical
  列(带中文标注); 两者均为逐批代码参数快照型, 隐藏起止时间参数
- test_dataset 财务分支注入 table=metrics, 与生产同口径
- validate: depth5/financial 豁免起止时间重名检查; 新增映射目标
  重复拦截(运行时 rename DuplicateError 会整表拉空)
- mapper.map_rows 改全量推断: 默认 100 行采样把稀疏财务列推断成
  Null 列, 第 101 行数值 append ComputeError → 整表拉空(batch=100
  必现, 与 fuyao 插件同因)
- 契约文档: 五档/financial 字段契约与五表 canonical 列清单,
  映射一对一限制、缺失列跨批合并补 null 的降级语义
- 回归 6 条: table/latest 注入、validate 豁免与拦截、metrics
  探测、稀疏列推断修复

验证: 后端全量 2798 passed + 前端 155 passed + tsc 通过;
mock 接口 E2E 真连 + 浏览器 UI 用户旅程实测。
2026-10-17 22:05:56 +08:00
shy3130 ae9feb869c fix(sources): 自定义源全量分钟/分钟K amount 改为可选 + 保存先验后存
amount 按契约可空, 缺成交额的源此前被整体拒绝且保存静默失败;
现在校验不过返回 400 带原因, 不落盘。
2026-10-09 16:21:29 +08:00
shy3130 badab07619 feat(adj): 除权因子独立同步 + 事件明细扩列 + 按需窗口优化
- 扩列: adj_factor 表扩至 8 列(dividend/bonus/allot/allot_price/prev_close 明细, 可空), fuyao 从事件 dump 原始成分回填; merge 变更检测按 ex_factor diff>1e-9, 仅明细回填不计入受影响列表; 字段说明补齐
- 独立同步: /api/pipeline/adj-factor/run 端点(共用任务机制: 单飞+重任务槽+行情暂停), Data 页除权因子卡片设置齿轮弹窗(生效数据源/能力徽标/TickFlow 无明细提示), 因子变更个股自动 enriched 局部重算
- 按需优化: 独立同步事件窗口钳到本地日K起点(更早事件在前复权 cum/total 两侧抵消, 对已存价格零影响); fuyao 配价由全有或全无改为逐只按需(远古事件只拖累自己, 不再整轮回退单标的接口); 实测全市场因子阶段 15min+ → ~11s, 配价 3676/3676 走本地 dump 零回退
- 盘后管道步骤条显示各能力路由徽标(矩阵驱动); README 补桌面端 macOS 安装注意事项
- 测试: 明细列 merge 语义 4 例 / 独立同步联动 5 例 / 远古事件不连累全场回归; 全量回归通过(2 例历史遗留失败与本改动无关, 基线同样失败)
2026-10-07 21:45:40 +08:00
shy3130 490e95daa3 feat(data): 全量分钟 (full_minute) 数据集开放插件/自定义源接入
像其他能力一样可路由: 声明 full_minute 数据集并在设置页路由, 即接入
盘中全市场分钟落盘服务 (与 TickFlow Expert 同一能力键 intraday.universe)。

- policy: _DATASET_CAP_MAP 增补 full_minute → INTRADAY_UNIVERSE, 自定义源
  声明且被路由时自动补授能力, 服务门控对两类源统一口径
- capabilities 注册表: full_minute 从不可路由 (field=None) 改为
  full_minute_data_provider 偏好路由; preferences/settings API 收发新字段
- 插件契约: get_intraday_batch (修复轮, 未实现回退 get_minute 当日窗口) +
  get_intraday_latest (稳态增量, 可选; 未实现降级仅修复轮, 节奏下限 60s)
- YAML 声明式源: full_minute 数据集与 minute 同形, loader 白名单放行,
  源编辑器 UI 可配置; 仅修复轮语义
- kline_sync 边界: fetch_intraday_custom_batch / _fetch_intraday_custom_latest,
  帧过北京墙钟守卫, 与 TickFlow 边界函数同纪律
- minute_refresh: 删「自定义分钟源让位」逻辑, 改按路由取数;
  status 增 provider / provider_effective / repair_only
- 前端: 监控页卡片按能力驱动, 数据源页路由矩阵, api.ts 类型
- 测试: 门控/路由/降级/增广新增用例, 后端 1332 全过
- 文档: plugin-development / custom-data-source / configuration / features /
  CONTRIBUTING 契约细化 (AI 可照文档接入)
2026-08-31 22:53:24 +08:00
shy3130 1873c15616 feat(fuyao): 日K dump 链路强化与财务数据集适配
- 财务接入(股本除外): 三大报表多期 + 指标单期, 字段映射至项目 canonical 列
- metrics: bps 由估值 pb_mrq 反推, eps_basic 取自利润表, report 期由最新披露期反查
- financial_sync 报告期合并升级为逐列填空: 多源数据并集共存, 新值覆盖缺列保留
- 前序未入库工作一并提交: 10 年/10d 日K dump、除权因子事件推导与涨跌停自检
2026-08-30 19:05:26 +08:00
shy3130 e367ae3508 docs(data): 沉淀能力路由矩阵契约, 同步插件接入文档
- CONTRIBUTING §4 新增「能力路由矩阵契约」: 注册表单一权威、usable 统一
  门控、能力层中立原则、独立路由禁特殊值(same_as_daily 已下线)、
  分时/depth5 边界注记
- custom-data-source: 除权因子接入示例移除 same_as_daily
- plugin-development: manifest 字段表补 homepage 可选字段
2026-08-30 19:05:23 +08:00
shy3130 e8918cda90 fix(data): 自定义源比例字段单位改为显式声明 pct_unit 未声明 fail-closed
amplitude/turnover_rate 的百分制与小数制数值区间重叠(0.05 既可能是
0.05% 也可能是 5%), 截面中位数启发式不可判, 赌错即整体放大 100 倍,
违反 CONTRIBUTING §3.1 禁止启发式转换的约束。

- realtime 数据集新增 pct_unit: percent|decimal 显式声明, 声明即契约
  (percent 无条件 /100, decimal 无条件透传, 不受数值外观影响)
- 未声明时 change_pct 保留涨跌停 30% 上限的截面判定(物理可判),
  amplitude/turnover_rate 置 None 交 enriched 管道按价格/股本口径重算
  并记录 WARNING; 已配置 transforms 的列视为用户接管单位, 透传
- 配置解析/清洗/序列化全链路校验取值, 非 realtime 数据集声明即报错
- 契约测试重写覆盖声明优先、边界值、fail-closed 与 transforms 兼容
2026-08-30 19:05:20 +08:00
shy3130 d749733b2e fix(data): 自定义源实时行情百分制涨跌幅截面自动归一为小数制
契约要求 change_pct/amplitude/turnover_rate 小数制(0.0366=3.66%),
但 a-stock-data 等第三方接口返回 3.66 表示 3.66%, 原样透传导致行业/
概念统计与前端展示整体放大 100 倍(用户反馈)。get_realtime 摄取边界
按截面中位数判定(|值|中位数>0.31 必为百分制, 小数制受 30cm 涨跌停
约束不可能超过), 整批归一; 小样本退用最大值; 附 7 项回归测试与文档说明。
2026-08-24 17:14:55 +08:00
shy3130 3c853869a9 docs: 数据源口径对齐插件化
- configuration.md: "本项目基于 TickFlow 数据源" 改为内置默认 +
 插件化接入第三方, 链接两篇接入文档
- features.md: 「TickFlow 多源数据」节改为「数据源插件化」,
 补 YAML 自定义源/插件源(sources)与五数据集自由组合说明
- custom-data-source.md: 支持范围三类 → 五类, 补 minute/financial
 数据集契约 (与后端 DatasetName 和 provider 实现一致);
 仅 depth5 暂无数据集契约仍由 TickFlow 提供
2026-08-23 13:48:24 +08:00
shy3130 3f6eca6f1b fix(data-source): harden custom source testing 2026-07-25 22:51:27 +08:00
intfoo 1bcff8f71a feat(data-source): expose custom source timeout & request param names in UI
- backend: pass timeout through DatasetConfigIn / _config_to_dict / _sanitize_dataset
  (previously a hand-set YAML timeout was silently wiped on UI save, resetting to 30s)
- frontend: add per-dataset timeout input; collapsible 请求参数字段映射 with
  symbols/start/end_param (non-realtime) + asset_type/freq_param (minute);
  rename 字段映射 -> 响应参数字段映射; chevron at title end; realtime empty-state hint
- test: timeout config round-trip (custom value persists, default 30 not emitted)
- docs: document timeout in custom-data-source.md
2026-07-23 16:22:18 +08:00
shy3130 07556707ec fix: 完善自定义分钟数据源配置与异常处理
- 补齐资产类型和周期参数在 API、YAML 与前端编辑器中的保存回读

- 权限判断和分时监控统一复用安全的数据源解析边界

- 增加配置往返及解析异常回归测试
2026-07-19 17:01:33 +08:00
shy3130 001c65af06 docs: clarify Docker deployment behavior 2026-07-13 00:05:07 +08:00
wshyandGitHub 9c28dd4099 fix(realtime): unify turnover rate units (#93) 2026-07-09 19:14:50 +08:00
shy3130 fec3887107 docs: 自定义数据源新增 AI 映射 prompt 模板 2026-07-05 23:16:18 +08:00
shy3130 7b5d345910 feat: 自定义数据源扩展 + 限频集中化 (v0.1.80) 2026-07-05 22:57:46 +08:00