迭代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 通过
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
# 计划:策略计算字段 + 策略 tab 静态化重构(阶段航点)
|
||||
|
||||
> 编号:PLAN-019 | 粒度:阶段航点 | 创建:2026-09-10 | 状态:**进行中(迭代 22 交互设计阶段)**
|
||||
> 派生自终极目标:目标-002(策略定义能力)、目标-003(按策略监控市场)
|
||||
> 依据需求:**R-027(已定稿,2026-09-10,重构·第一阶段)+ R-026(已定稿,2026-09-10,计算字段·第二阶段)** —— 均符合入范围门槛
|
||||
> 设计约束:沿用 技术约束-012(策略定义存储)、技术约束-015(configSchema)、UI约束-003/004/005/006/007;
|
||||
> 本次拟修订(实施时执行):产品约束-002/003/004/009、UI约束-002/003/005;新增计算字段约束条目
|
||||
|
||||
## 目标
|
||||
|
||||
**一句话**:策略字段能力升级为「可算」,并把字段配置的入口搬到它该在的地方。
|
||||
|
||||
- **第一阶段(R-027 重构)**:策略 tab **静态化**(插件内置、不可增删改名,保留显隐/排序);设置页「策略分组」移除;
|
||||
字段编辑功能迁到**主窗口策略 tab 内、「列设置」旁的「字段配置」弹层**,保存走单策略字段端点;
|
||||
- **第二阶段(R-026 计算字段)**:在迁移后的入口上新增第五种字段类型「**计算(formula)**」——用户写中文变量公式
|
||||
引用服务端缓存数据集,服务端按持仓行**实时计算**列值(不落库、列只读、缺数据显示 `—`)。
|
||||
|
||||
**为什么合并成一个迭代**:计算字段的公式表单必须落在字段配置入口上;若先按旧入口(设置页)实现再搬迁,等于白做一遍。
|
||||
|
||||
## 范围
|
||||
|
||||
**第一阶段 · 重构(R-027)**
|
||||
|
||||
1. **tab 体系**:`strategies` 常量化为内置两项(网格超市 / 手动做T);`settings.tabs` 中策略条目固定(不可增删);
|
||||
保留 Tab 设置的显隐 + 拖拽排序;`addStrategy / removeStrategy / appendStrategyTab / removeStrategyTab / generateStrategyId` 退役;
|
||||
2. **设置页**:移除「策略分组」子 tab(含策略新增/重命名/删除与确认弹窗)→ 设置页 = Tab 设置 + QMT 连接配置;
|
||||
3. **字段配置入口**:策略 tab 顶部新增「字段配置」按钮(列设置旁)→ 独立弹层(字段列表 + 添加/编辑/删除 + 保存);
|
||||
`StrategyFieldsEditor` 改造为弹层内容;保存改走新增端点 `strategies/schema-update { strategyId, configSchema }`;
|
||||
4. **存储归一化**:settings 只保留字段定义(按 strategyId)+ `strategyColumns` 覆盖;存量 settings 读取时归一化(无迁移脚本)。
|
||||
|
||||
**第二阶段 · 计算字段(R-026)**
|
||||
|
||||
5. **轻量变量目录**(服务端):数据集 → 中文变量名 → 取数函数(行情+合约 / 持仓账本 / 本行自定义字段值),T-006 数据池的第一块砖;
|
||||
6. **公式引擎**:自写小型表达式解析器(零依赖、支持中文标识符、四则 + 括号 + round/abs/min/max),含语法校验与求值;
|
||||
7. **数据/API**:`configSchema` 支持 `type='formula'` + 公式串 + 小数位;`strategy-positions` 逐行现算随行返回;
|
||||
字段保存校验(语法 / 变量存在性 / 变量命名规则)+ **试算端点**(取一行真实持仓试算);
|
||||
8. **UI**:字段配置弹层内公式分支(公式框 + 变量选择器 + 试算 + 单位/小数位);策略持仓表计算列只读渲染(`ƒ` 表头 + 悬停看公式 + 格式化 + 缺数据 `—`);
|
||||
9. 交互设计 → 技术方案 → 实现 → 回归脚本(独立数据目录,技术约束-011)→ 验收。
|
||||
|
||||
**不做**(本期边界):
|
||||
- 策略级聚合(跨行求和)——留二期;QMT 账户域 / 交易记录作为变量来源(用例不明确,后补);
|
||||
- 公式引用公式(变量目录排除 formula 字段);历史持仓行时点计算(显示 `—`);布尔型公式结果;公式框实时高亮/自动补全;
|
||||
- 完整 T-006 数据池中间层(本期只落变量目录);
|
||||
- 策略的重命名 / 增删 / 归档(静态化后不存在);自建策略数据迁移(实测无自建策略)。
|
||||
|
||||
## 涉及文件(技术方案阶段细化)
|
||||
|
||||
```
|
||||
src/
|
||||
├── settings.js # strategies 常量 + tabs 固定 + 字段定义/列配置归一化;退役 CRUD 辅助
|
||||
├── api/strategies.js # 策略 CRUD 端点退役;新增 strategies/schema-update(单策略字段)
|
||||
├── formula/ # 新增:公式引擎(第二阶段)
|
||||
│ ├── variables.js # 轻量变量目录(数据集 → 中文变量名 → 取数函数)
|
||||
│ └── evaluator.js # 表达式解析 + 校验 + 求值
|
||||
├── position/PositionManager.js # strategy-positions 行内公式现算
|
||||
├── client/views/SettingsSection.jsx # 移除「策略分组」子 tab;Tab 设置保留
|
||||
├── client/views/StrategyTab.jsx # 顶栏「字段配置」+「列设置」;计算列只读渲染
|
||||
├── client/views/FieldConfigDialog.jsx # 新增:字段配置弹层(复用/改造 StrategyFieldsEditor)
|
||||
└── client/views/StrategyFieldsEditor.jsx # 改造为弹层内容 + 单策略保存 + 公式分支
|
||||
scripts/
|
||||
└── test-r026-formula-fields.mjs # 回归脚本(第二阶段)
|
||||
```
|
||||
|
||||
## 实现步骤
|
||||
|
||||
1. **文档骨架**:PLAN-019 + 迭代 22(迭代目标 / UI交互设计),R-026 + R-027 定稿 —— 本步;
|
||||
2. **交互设计过审**(老师拍板)→ 出技术实现方案(两阶段规格)+ 验收标准;
|
||||
3. **第一阶段实现**:tab 静态化 + 设置页收敛 + 字段配置弹层 + 单策略端点 + 存量归一化 → 回归(策略 CRUD 相关用例退役);
|
||||
4. **第二阶段实现**:变量目录 + 公式引擎 + 现算/校验/试算端点 + UI(公式表单 / 只读列)→ 回归;
|
||||
5. **验证 + 老师人工验收 + 迭代复盘**。
|
||||
|
||||
## 验收要点
|
||||
|
||||
**第一阶段(重构)**
|
||||
- 设置页只有「Tab 设置 / QMT 连接配置」,无「策略分组」;无新增/重命名/删除策略入口;
|
||||
- 策略 tab 恒为「网格超市 / 手动做T」两个:不可增删改名;Tab 设置里仍可显隐 + 拖拽排序(现有偏好生效);
|
||||
- 策略 tab 顶部「字段配置」按钮打开弹层:可添加/编辑/删除字段并保存;保存后表格列同步跟随;重启后定义仍在;
|
||||
- 服务端只接受内置两个 strategyId;`strategy_holdings` / 归属数据零影响(13 / 3 行不变)。
|
||||
|
||||
**第二阶段(计算字段)**
|
||||
- 字段类型可选「计算」:写中文变量公式、选择器插入、试算可算出结果;非法公式/未知变量被拒并提示;
|
||||
- 策略持仓表计算列只读,按单位/小数位格式化,悬停可见公式;缺数据/除零显示 `—`,不炸表;
|
||||
- 计算字段不落库(公式存 settings、值每次现算);四式用例(浮动盈亏 / 盈亏比例 / 距涨停 / 网格占用)可算出;
|
||||
- 既有四类字段与手填值编辑、列设置、历史持仓展示零回归;
|
||||
- typecheck + build + 回归脚本通过;老师人工验收。
|
||||
|
||||
## 关联
|
||||
|
||||
- 需求:**R-027**(重构·第一阶段)、**R-026**(计算字段·第二阶段);上游 R-013(字段模型/列机制)、R-011(Tab 显隐排序)、R-015(行情/合约缓存)、R-010(最后一笔成交价)、R-018(份额账本);
|
||||
- 取代:R-003、R-011(部分)、R-013(入口条款)——由 R-027 取代;
|
||||
- 延展:T-006(数据池中间层草稿)——变量目录为其起点;
|
||||
- 迭代:22-策略计算字段与策略tab静态化(两阶段)。
|
||||
Reference in New Issue
Block a user