Files
one_divine_lot/docs/04-迭代记录/23-计算字段判定型扩展/迭代复盘.md
T
kyugao ec02a791ee 迭代22+23: 策略tab静态化 + 计算字段(数字/判定型)+ 网格超市信号字段
- R-027 静态化:策略恒为内置两项(不可增删改名,保留显隐/排序);设置页移除「策略分组」;
  字段配置入口迁到策略 tab 内「列设置」旁(FieldConfigDialog + schema-update 单策略写入)
- R-026 计算字段:自写公式引擎(中文变量、四则/括号/round·abs·min·max、缺值短路→—)+
  变量目录(行情/合约/持仓/自定义字段)+ strategy-positions 逐行现算(只读内存缓存,不落库、列只读)
- R-028 判定型:比较运算 + and/or + inferResultKind + 结果类型一致性校验 + 判定列 ✓/— 渲染;
  网格超市落地 可下空单=涨停价>基准值+网格大小、可下多单=跌停价<基准值-网格大小
- 变量选择改标签平铺(老师反馈);公式手册 docs/99-其他材料/计算字段公式说明.md
- 约束同步:产品约束-002/003/004/009/013/014、技术约束-014/015/022/023/024、UI约束-002/003/005/008
- 回归:新增 test-r026/test-r027,更新 r011/r013/r017,17 个脚本全绿;typecheck/build 通过
2026-09-10 14:05:06 +08:00

2.9 KiB
Raw Blame History

迭代复盘:23-计算字段判定型扩展

结论

实现完成,待老师人工验收。计算字段由「只出数字」扩展为「数字 / 判定」双结果类型; 网格超市两条网格规则(可下空单 / 可下多单)已可用公式表达,行为与实盘数据一致(真实验证 5 只 / 2 只)。

事实记录

  • 引擎src/formula/evaluator.js):多字符运算符识别 + 全角 ≥ ≤ ≠ 归一; 优先级 or < and < 比较 < 加减 < 乘除;比较/逻辑求值(缺值短路);normalizeResult 布尔直通; 新增 inferResultKind(ast)
  • 存储src/settings.js):fieldSchema.resultKindnumber|boolean,默认 number+ normalizeFields 归一;
  • 校验src/api/strategies.js):结果类型一致性校验(声明 vs inferResultKind),不一致抛 field-validation
  • 现算src/formula/FormulaService.js):computed 布尔直通;
  • 前端StrategyFieldsEditor 结果类型下拉 + 判定时隐藏小数位 + 运算符提示 + 判定试算(✓ 满足 / — 不满足); StrategyTab 判定列渲染 ✓ 字段名(绿)/ (灰,含缺值与 false);列表类型显示 计算(判定)
  • 验证test-r026 48 → 71 条(新增第 7 节判定型 15 条、第 8 节真实夹具端到端 8 条); typecheck 0 错;build 通过(client bundle 197794 bytes);全量 17 脚本全绿。

设计与实现要点(沉淀)

  1. 布尔必须先判:渲染分支若先做 Number.isFinite(Number(raw))false 会被当成 0 格式化成 0.00—— 实现中显式把 typeof raw === 'boolean' 放在最前(代码注释标注);
  2. 判定型「不满足」= 而非「否」:缺行情与条件不满足在视觉上同形,避免把「数据缺失」误读为「不可以」;
  3. 结果类型显式声明 + 静态推断校验:避免「公式悄悄变成判定」导致列渲染与语义脱节; 推断只看顶层运算(neg 下钻),规则简单可预期;
  4. 阈值用字段引用而非字面量基准值 + 网格大小 让规则随字段可调(老师 Q5 拍板)。

偏差

  • 无功能偏差;范围按 Q1–Q5 收敛(方案 C 三态信号、not 取反未做,已记入「不做」)。

补记(2026-09-10 老师反馈)

  • 字段配置弹层的变量选择从「+ 插入变量 ▾」下拉改为标签平铺(分组成行、点选即插入公式框光标处); 已随迭代实施并重建 bundletypecheck/build/17 脚本回归全绿)。

遗留

  • 判定「不满足」与「缺数据」同显示为 :若老师希望区分(如缺数据显示 ? 或 tooltip「数据缺失」), 可后续加 hover 原因;
  • 由老师侧重载插件后手动添加两个字段(或授权我用 strategies/schema-update 端点直接写入 settings)。