kyugao
|
22ec732607
|
迭代15: 委托归属候选纳入近期清仓持仓(R-017)
- 交易记录 tab 归属候选只回当前持仓 → 清仓后当日委托失去下拉锚点无法补关联
(2026-09-07 大连热电实际发生: 盘中归属后被清为未关联,下拉已无做T候选)
- SqliteStore.getAttributionCandidates: 候选 = 该 code 当前持仓 + 近 7 天清仓的持仓
(closed 标记 + closedAt,排序 当前持仓在前 → 清仓行 closed_at DESC)
- AttributionSelect: 下拉 value 改 holdingId 键控(同策略多轮持仓不撞值)、
清仓选项「(已清仓 MM-DD)」后缀、已归属但候选缺失显示「当前归属」占位
- 回归: test-r017-candidates 12/12 + 存量回归全绿
|
2026-09-07 18:15:20 +08:00 |
|
kyugao
|
51c70c48fb
|
迭代14: 策略tab历史持仓展示(R-016)+ 今日已清仓默认层
- R-016 Q1-Q7: 两个策略 tab title 旁「历史持仓」开关 + 清仓范围筛选(近一周默认/1月/3月/半年/1年)
- SqliteStore.getHoldingsHistory(strategy_id + closed_at 非空 + sinceMs,closed_at DESC,只读)
- DataStore 门面透传 + strategy-holdings/history 端点(name 兜底 + 参数校验)
- 前端: 开关/范围下拉/历史行灰显+「已清仓」徽标/展开复用 R-010(rowKey 唯一化)
- R-016 二轮补充(Q8-Q9 老师拍板): 今日已清仓默认层
- range=today = 本地自然日 00:00 起(特判零点,不落回溯毫秒档)
- 当天已清仓的持仓默认恒显示、不受「历史持仓」开关控制(开关只控今天之前)
- rowsToRender 分层合成 + holdingId 去重;标题计数不含已清仓行;零写路径变更
- 回归: test-r016-history 24/24 + 存量回归全绿
|
2026-09-07 18:15:07 +08:00 |
|
kyugao
|
ed43ecae39
|
feat(UI): 展开箭头全站统一为 ExpandChevron 共享组件
- 新增 src/client/views/ExpandChevron.jsx:14x14 chevron-right、success 绿、展开旋转 90°(源自策略 tab 表格行图标)
- 设置页策略分组行首 ▸/▾ 文字箭头改用该组件,并修复箭头与策略名的水平对齐(基线 trick 改 flex 精确居中)
- StrategyTab / TradeRecordsTab 两处重复内联 SVG 收敛为共享组件
- 去掉字段编辑器展开区冗余「收起」按钮(行首箭头/「收起字段」已可收起),清理 onClose prop
- docs: 新增 UI约束-006(展开/收起箭头全站统一)
|
2026-09-03 17:39:49 +08:00 |
|
kyugao
|
d793d2cf35
|
迭代13: 盘口内存快照(QuoteSync/QuoteHub)+ 同步指示灯 + 行情列
- QuoteSync/QuoteHub 替换 MarketFeed/MarketDataHub(方案A 删除重写):
5s REST 同步 watch 集合 + 涨停/跌停经 /data/instrument 按交易日内存缓存
+ 读穿透走适配层 getTicks(修正旧 hub 绕适配层的层级破洞)
- WS 数据通路移除(从无生效结论;ingest 留 source 标签回归口子)
- market_quotes_cache 表退役 DROP(幂等);价格单一入口 = QuoteHub
- 数据同步指示灯组: QMT连接|持仓数据|行情数据(绿/黄/灰,点击即同步/即时探测)
+ sync-status 端点(吸收 market-stats)+ sync-now;修复 runtime 漏传 positionSync 致持灯恒灰
- 策略持仓表行情列: 涨停价/跌停价/今开/最高(COLUMN_META defaultVisible=false,纯价格)
- 回归 test-quote-sync.mjs 27 项(含 DROP 幂等真实 SQLite 验证)
- 文档链: R-015 + PLAN-014 + 迭代三件套 + 技术约束-010/012变更、018新增 + 产品约束-012
需求: R-015(老师五拍板: 替换/WS移除/纯内存DROP/watch现状/指示灯)
|
2026-09-03 13:26:25 +08:00 |
|
kyugao
|
245fcad95c
|
迭代12: 持仓内存快照(PositionSync 10s 定时同步,请求不再穿透 QMT)
- PositionSync: 内存快照 + 10s 定时全量同步 + 失败保留旧快照 + 空快照双重确认
(/health + getAsset 账户身份)+ 幽灵持仓自动清仓(连续3轮消失 + 账户身份守卫防误清)
- PositionManager.getAllPositions 改读快照,空则读穿透兜底;未注入 sync 时兼容旧穿透
- 回归 test-position-sync.mjs 35 项(纯内存 mock,含 kept 分支刷新 syncedAt 防灯灰)
- 文档链: R-014 + PLAN-013 + 迭代三件套 + 数据存储设计 §11(内存不落库决策与三问标准)
需求: R-014(老师拍板: 内存不落库/读穿透兜底/幽灵自动清仓/不显示同步时间)
|
2026-09-03 13:25:50 +08:00 |
|
kyugao
|
39b135fa36
|
fix(持仓): strategy-positions 返回 values 按当前 configSchema 过滤(防字段收窄后残留键混入展示)
|
2026-09-02 18:14:36 +08:00 |
|
kyugao
|
329ac67a71
|
docs(迭代11+归档): R-013 归档完成 + 迭代 11 复盘
- 迭代 11 复盘:实施事实(R-013 自定义字段 + 列显隐 + 单元格编辑 + unit)+
经验教训(JSX 未导入白屏 / z.dict dts / SQLite 关键字列 / map this 丢失 / 列宽稳定)
- R-013 归档至 已完成/(归档头:日期/状态/实现迭代/讨论记录)
- 索引 R-013 → 已实现(已归档);PLAN-012 → 已完成
|
2026-09-02 17:34:51 +08:00 |
|
kyugao
|
aac16b904c
|
feat(R-013): 策略自定义字段完整实现 + 列显隐配置 + 单元格编辑
功能实现(迭代 11):
- 数据层: strategies.configSchema 自定义字段定义(text/number/boolean/enum + def + unit 单位可空)
+ strategy_holdings "values" JSON 列(幂等 ALTER)+ readValues/writeValues + 归一化
- API: holdings/values-update 端点(服务端按 configSchema 校验: number有限/enum在选项/boolean布尔)
- 设置页: 「策略分组」策略行展开配置字段(StrategyFieldsEditor 独立组件)
- 持仓表: 自定义字段列化 + 列显隐/排序(ColumnSettingsPopover,每策略独立 strategyColumns 配置)
- 单元格点击编辑(FieldCellEditor): 文本/数字输入框、布尔开关、枚举下拉 + ✓ 确认
- UI 细节: ✎ 可编辑标记(值后)、编辑列宽稳定、数字输入框固定 5 位宽
修复:
- SettingsSection Fragment/StrategyFieldsEditor 未导入导致的配置页白屏
- z.dict schema dts 推断 cosmokit 引用(显式类型注解)
- 自定义字段从展开交易明细移出(字段已列化)
文档: R-013/迭代11 技术方案/验收标准/迭代目标 同步(D6 演进 + unit + 列配置)
回归: test-r013-custom-fields 21/21 + test-r013-columns 16/16 + tabs 23/23
|
2026-09-02 17:21:41 +08:00 |
|
kyugao
|
6f74ed4a79
|
docs(结构约束同步): 活动文档路径对齐新目录结构
归类重构(技术约束-016)落地后同步活动文档旧路径:
- 数据存储设计.md: 三处对应实现表 12 处 src/component/* → storage/position/market/trades
- R-013 / PLAN-012 / 迭代11技术实现方案: SqliteStore/PositionManager 路径更新
- 迭代11程序结构设计: 补后续动作记录(历史档案按追加式原则不改写)
|
2026-09-02 15:43:26 +08:00 |
|
kyugao
|
a4902bb730
|
feat(R-013+重构): 策略自定义字段需求文档 + 结构归类优化
需求与文档:
- R-013 策略自定义字段配置(定义随策略 configSchema 存 settings、值落
strategy_holdings.values JSON、类型化文本/数字/布尔/枚举)定稿并进入
PLAN-012 / 迭代 11(含目标数据模型 + 端到端示例 + 技术方案 + 验收标准)
- R-011(Tab设置)/ R-012(UI主题适配)归档至 已完成/,索引标记已归档
- 沉淀约束: 产品约束-010 / 技术约束-015 / 技术约束-016 / UI约束-005
结构重构(技术约束-016):
- src/component/ 平铺还原为语义分域目录: data-source/ storage/ position/
market/ trades/(git rename 保留历史)
- 清理死代码: 删除 AllocationStorage.js(0 引用)、DataStore
setDataset/removeDataset(无调用方)
- 同步更新 src/index.js / scripts/*.mjs / tsdown.config.ts 引用
- typecheck + build + test-r009 回归 14/14 通过
|
2026-09-02 15:38:51 +08:00 |
|
kyugao
|
f1e7e785a1
|
docs(迭代09/10): Tab 设置统一管理 + UI 主题适配 全量文档
迭代09 (R-011 Tab 设置统一管理):
- 需求 R-011 (定稿 Q1-Q5) + 需求池索引
- 计划 PLAN-010 + 迭代09 四件套 (目标/技术方案/验收/复盘)
- 约束: 产品约束-009 / UI约束-003 / 技术约束-014
- UI约束-002 修订: 通用设置→Tab 设置
迭代10 (R-012 UI 适配 DSH 主题):
- 需求 R-012 (定稿: 暂定跟随系统) + 需求池索引
- 计划 PLAN-011 + 迭代10 四件套
- 约束: UI约束-004 (主题适配约定)
|
2026-09-02 14:01:08 +08:00 |
|
kyugao
|
4ac8a29805
|
feat(Tab设置+UI主题): 迭代09 Tab设置统一管理 + 迭代10 UI适配DSH主题
迭代09 (R-011): Tab 设置统一管理所有会话 tab
- settings.tabs 布尔对象 → 统一有序数组 (kind: builtin|strategy)
- 旧配置 schema union 兼容 + 读取归一化无感迁移
- strategies 收窄为 {id,name},策略行 name join 自动跟随改名
- 策略增删联动 tabs 条目 (add 追加末尾 / remove 联动删除)
- 客户端统一注册读 tabs 数组,内置与策略可任意混排
- 设置页 Tab 设置子 tab:混排表格 + 拖动手柄 + 显隐开关 + 落点立即持久化
- 策略分组瘦身:仅 新增/重命名/删除 + 指引提示
- 回归测试: test-r011-tabs (23) + test-r011-api (12)
迭代10 (R-012): UI 适配 DSH 浅色/深色/跟随系统主题
- 10 个视图文件 141 处硬编码色 → var(--dsw-alias-*, fallback)
- 语义映射: bg-layer/label/border/state/button-contrast 等
- 淡底 color-mix 自适应;遮罩 bg-mask-1;阴影 shadow-lv3
|
2026-09-02 14:00:56 +08:00 |
|
kyugao
|
35f2ad1a23
|
docs(归档): 迭代 07/08 归档整理(R-009/R-010 归档文件规范化)
- R-009 归档头更新为二次定稿结论(手动归属 + 冗余),清理重复标题
- R-010 归档头补充讨论记录,清理重复标题
- 需求池索引:R-009 描述与最终实现一致(手动归属,非零冗余推导)
|
2026-09-02 09:42:28 +08:00 |
|
kyugao
|
d122d88bce
|
feat(策略持仓): 表格加昨收/涨幅列(涨幅支持升降排序)+ 去掉总持仓列
- 昨收列:行情缓存 lastClose
- 涨幅列:(现价-昨收)/昨收,红涨绿跌着色
- 涨幅排序:点击表头降序/升序切换(▼/▲指示)
- 移除总持仓列
|
2026-09-02 09:23:02 +08:00 |
|
kyugao
|
2aacd8a25d
|
docs(迭代07/08): 交易记录本地存储 + 策略持仓展开全量文档 + 需求归档(R-009/R-010)
- PLAN-008/PLAN-009 计划(已完成)
- 迭代 07/08 四件套(目标/技术方案/验收标准/复盘)
- 设计约束:数据存储设计 §10/§10.1、技术约束-012/013、产品约束-008
- R-009/R-010 需求归档(含二次定稿:手动归属、Q4 成本价/成交价)
- 需求池索引同步
|
2026-09-02 01:21:10 +08:00 |
|
kyugao
|
859938c4f1
|
test(交易记录): 迭代 07/08 回归测试(独立数据目录)
- test-r009: 手动归属核心(建表/幂等/UPSERT 不覆盖归属/候选/持久化过滤)
- test-r009-sync: TradeSync 同步集成
- test-r009-normalize: QMT code 归一化
- test-r009-api: API 层端点集成
- verify-real-r009: 真实数据只读验证
- verify-real-attribution: 归属写闭环(被插件锁时跳过)
|
2026-09-02 01:21:04 +08:00 |
|
kyugao
|
2790b92378
|
feat(策略持仓): 持仓行展开关联交易 + 成本价/最后成交价 + 隐藏输入框(迭代 08,R-010)
- strategy-positions 附加 holding_id + avgPrice/lastTradePrice(无关联默认成本价)
- trades/by-holding 端点(按 holding 查委托汇总)
- StrategyTab 持仓行展开(懒加载 + 内嵌汇总表,含交易日/时间列)
- 神之一手 tab 激活时隐藏 AI 对话输入框(纯 CSS :has() 方案)
|
2026-09-02 01:20:58 +08:00 |
|
kyugao
|
b3526c7693
|
feat(交易记录): SQLite 本地存储 + 手动归属(迭代 07,R-009)
- trade_orders + trade_fills 两表(委托/成交,holding_id/strategy_id 手动归属)
- TradeSync 定时同步(启动预热 + 60s UPSERT,不覆盖归属列)
- 手动设置归属(candidates 候选 + set-attribution 端点 + 前端归属下拉)
- 历史查询 trades/history + 策略过滤
- QMT code 归一化(补后缀)+ tradeDate 兜底 insertDate
|
2026-09-02 01:20:50 +08:00 |
|
kyugao
|
dd98b4d45b
|
docs(迭代06): 数据存储SQLite迭代文档 + 需求归档(R-008)
- 新增 02-计划/计划-数据存储SQLite.md(PLAN-007)
- 新增 04-迭代记录/06-数据存储SQLite/ 五份文档(迭代目标/技术实现方案/验收标准/UI交互调用分析/迭代复盘)
- 归档 R-008 至 已完成/(含归档头 + 讨论记录索引),索引更新为已实现(已归档)
- 设计约束更新:技术方案约束-012 标注 SQLite 变更、数据存储设计.md 第 9 节变更预告
- 需求池说明.md 新增「归档与转正规范」;迭代记录说明.md 新增「实现经验沉淀」
- 验收标准修正 db 文件名笔误(one-divine-lot.db → store.db)
|
2026-09-01 18:04:28 +08:00 |
|
kyugao
|
9b719f13ba
|
feat(存储): JSON data store 升级 SQLite(迭代 06,R-008)
- 新增 SqliteStore(node:sqlite 封装):strategy_holdings 持仓生命周期表 + market_quotes_cache 行情缓存表
- DataStore 改造为门面委托 SqliteStore,保留兼容 API,启动检测自动迁移(幂等)
- PositionManager 适配单票生命周期(openHolding/addShares/reduceShares/closeHolding),清仓转历史保留
- 新增一次性迁移脚本 scripts/migrate-json-to-sqlite.mjs + pnpm migrate 命令
- 修复 addToStrategy 语义 Bug(新增量 vs 绝对目标量),真实 API CRUD 回归通过
- 移除策略 tab 一键清零按钮及 remove-all-shares 端点(clearStrategyShares 保留供删除策略联动)
- 插件 dispose 补充 storage.close() 关闭 SQLite 连接
|
2026-09-01 18:04:12 +08:00 |
|
kyugao
|
aef27dcd3f
|
docs: R-007 需求归档,迭代 05 完结
- R-007 移入已完成/(完整需求摘要+决策+实现记录)
- 需求池索引更新(已实现/已归档)
- 迭代 05 复盘更新(验收通过,老师确认完结)
|
2026-09-01 14:47:26 +08:00 |
|
kyugao
|
08c4ad3c58
|
style: 委托行展开箭头改为大号SVG(14px绿色+旋转动画)
|
2026-09-01 14:43:18 +08:00 |
|
kyugao
|
8caeb769ed
|
fix: 佣金按委托级合并计费(分笔成交只收一次佣金)
- calcOrderFees 委托层合并计费:同一委托分笔成交按总金额算一次佣金(最低5元一次)
- mapTrade 保留原始成交字段,不再逐笔算费
- 前端聚合调用 calcOrderFees,展开明细只展示成交本身
- 验证:200股拆两笔佣金5元(非10元);两笔独立委托各5元
|
2026-09-01 13:25:37 +08:00 |
|
kyugao
|
bb3f8bd28d
|
feat: 迭代03-05 交易记录接入、行情实时、QMT连接配置、data store 标准化
- R-004 QMT连接配置:多配置管理 + 会话头部快捷切换(03-QMT连接配置)
- R-005 WS盘中价格实时更新:服务端中转+缓存+前端轮询(04-WS盘中价格实时更新)
- R-006 策略数据 JSON data store 标准化(store.json/market.json/schema.json)
- R-007 交易记录接入:当日订单+成交单表合并(委托主行+展开成交明细)、时间段查询(今日/本周/本月+手动起止)、费用计算(佣金费率万m_dCommission+最低5元、印花税卖出万5、过户费双向万0.1)
- 架构治理:api 按领域拆分、component 目录、QmtHealthMonitor
|
2026-09-01 13:21:49 +08:00 |
|
kyugao
|
5a723d514e
|
docs: R003 归档整理(讨论记录整合入归档,根目录清理)
- 已完成/R-003.md 整合完整讨论记录(与 R-002 归档格式一致)
- 删除根目录 R-003.md(已完成需求从根目录移除)
- 需求池索引更新
- 新增 R-004 需求登记(老师新开需求)
|
2026-08-29 16:45:56 +08:00 |
|
kyugao
|
cba31428dc
|
init
|
2026-08-29 16:20:33 +08:00 |
|