claude_dev
6c2c217e22
fix(web+api): 组合回测max_pool默认30→0——用户拍板「前端页面肯定要改」(回测口径与实盘对齐,f214e2f只翻了live/paper链漏了回测) [nas]
...
CI/CD / test (push) Successful in 12s
CI/CD / nas-deploy (push) Successful in 42s
CI/CD / nas-verify (push) Successful in 9s
你印象中改过的是6ecdaab#95标的池pool→all(三表单+后端四处),max_pool当时没动。本次三处对齐: PortfolioBacktest表单默认30→0+过时提示(「MVP验证用,默认30」)清理+routes_portfolio Field default=30→0(防API直调口径分裂,#95同款对齐法)。语义同全链:0=不限,策略层>0才截断。build绿+tests/api 165绿。
2026-08-24 20:54:56 +08:00
claude_dev
6ecdaab959
feat(front+api): #79+#94+#95验收三连——#79:策略库卡片收益格移除(用户'回测·最新10.44%没啥用',回测数字口径易误导,收益看各列表/全景;latestRet/retInfoOf孤儿函数随删,pct/retClass巡检仍在);#94:实盘列表标的列接poolLabel(all→全市场)+实例列建instanceNames映射显实例名(原绑row.instance但后端list_lives从未填恒'—',对齐模拟盘#71口径,兜底实例#id);#95:标的池默认值统一改all全市场——前端三表单(paper/live/PortfolioBacktest poolForm)+后端四处默认(routes_live setdefault/routes_portfolio Field/routes_paper/orchestrator runner)同步对齐防口径分裂,标签'全市场(慢,非MVP)'简化'全市场';936绿+build绿 [vps]
CI/CD / test (push) Successful in 11s
CI/CD / nas-deploy (push) Successful in 25s
CI/CD / nas-verify (push) Successful in 10s
2026-08-16 22:29:29 +08:00
claude_dev
d8d646fcd5
fix(#89+#90防线): 组合回测选实例不再预填标的池+vps-deploy僵尸API端口守卫——#89:prefillFromInstance删symbol_or_pool→form.pool预填(#86a定稿实例不选标的,老实例存的all不该悄悄改用户池选择;策略/max_pool/benchmark参数预填保留);#90防复发:API重启步在/end后netstat查8000持有PID强杀+端口未释放硬fail(2026-08-16实录uvicorn reload孤儿子进程17836跨两轮部署占端口,新实例静默抢不到,旧代码继续serve→500旧bug重现,人工taskkill+重拉后同请求200+task_id实证);build绿+yaml解析过 [nas]
CI/CD / test (push) Successful in 11s
CI/CD / nas-deploy (push) Successful in 31s
CI/CD / nas-verify (push) Successful in 15s
2026-08-16 19:08:26 +08:00
claude_dev
0453de9321
fix(portfolio): 收益单位口径统一小数+用户验收四问题——①1044%真因:bullet_trade返回百分数字面值(10.44=10.44%),组合结果页直显(对)但档案回写/策略库按小数×100(错1044%);_extract_metrics统一÷100归一小数(注释单位契约),组合结果页fmtPct改×100(与CTA/empyrical全平台一致;历史任务NAS一次性迁移)②回测灯/回测历史'找不到结果':done无task_id(老回测)兜底跳任务中心不过滤(instance过滤对老任务为空)③实走/实盘灯'还是参数页':三级fallback——同类型在跑直达监控,实例任何在跑(如只有影子)跳列表过滤,无在跑才发起④模式列折行:宽118+日终并入单chip(实走·日终,title悬浮说明)⑤模拟盘名加版本号={实例名}·{模式}v{N}(同实例同模式递增,对齐实盘);927绿+build绿 [vps]
CI/CD / test (push) Successful in 10s
CI/CD / nas-deploy (push) Successful in 26s
CI/CD / nas-verify (push) Successful in 10s
2026-08-16 10:06:12 +08:00
claude_dev
bab7c4d893
feat(strategy): TODO#68-#75八项全做+导航自测——#68灯职责拆分:实走/影子在跑=直达/paper/live/{aid}监控页,实盘在跑=/live/monitor/{aid},未跑=发起;回放灯done=直达/paper/result/{aid}(run_meta.replay.account_id);#69回测任务按实例过滤:backtest_stats加instance_id列(ALTER迁移)+_write_back落列+GET /task?instance=N+任务中心过滤条+策略库「回测历史」按钮;回测灯done=直达最新结果页(run_meta.backtest.task_id按前缀分流),跑过无结果=任务中心过滤;#70模拟盘创建后直接跳列表(不跳结果/监控页);列宽重排(策略/实例150模式96频率60操作250,折行实测消除);#71列内容对齐实盘:策略/实例列显示实例名(instances映射,#id退化)+持仓数列(list_papers顺带count volume>0)+删创建时间列(净值日期已含);#72实盘名自动生成={实例名}_v{YYYYMMDD}{minor}(同实例同日递增,listLives计数);模拟盘名={实例名}·{模式};#73术语统一档案→实例(全局8文件UI文案+后端409提示,精确短语防误伤,spec比喻保留文档);#74MonacoDiff v4:优先monaco原生diff(差异高亮),挂载450ms自检original栏占比<30%自动降级双只读编辑器(滚动联动)——全屏模态下大概率吃到原生diff;#75收益标签与数值同源(retInfoOf:运行ret优先含kind,fallback run_returns,标签跟随数值来源,根治影子1044%实为回测收益挂影子标签);927绿+build绿+dev浏览器自测:策略库6入口(回测历史/模拟历史/实盘历史/回测灯/实走灯直达监控/组合无回放)与模拟盘列表新列全过 [vps]
CI/CD / test (push) Successful in 13s
CI/CD / nas-deploy (push) Successful in 32s
CI/CD / nas-verify (push) Successful in 12s
2026-08-16 09:34:39 +08:00
claude_dev
23e1beb177
fix(frontend): 用户验收8项遗漏全补(并发中反馈漏处理对账)——①模拟/实盘改回必选档案(初始设计口径,提交拦截+必选文案)②backtest/new?class=all_weather.py&instance=1失败根治:档案类型按文件判非instance.type(老档案type不准)+组合页兼容class参数+CTA页组合档案自动重定向组合页(实测跳转+预填全通)③运行灯语义:有在跑→跳列表按档案过滤,无→创建页(用户'点带绿点按钮应看运行不该到参数页');组合档案隐藏回放按钮 ④代码编辑运行回测不好使:根因chain=dev缺GET file mock→读失败catch清code被当编辑→dirty卡死;三层修=补mock+catch走echoGrace+dirty改确认框(保存并跳/直接跳) ⑤模拟盘列表重设计对齐实盘(类型chip入名称行+新增策略/档案列+净值补日期) ⑥策略库去重复编辑代码按钮 ⑦模拟盘/实盘列表行加「快照」按钮→CodeSnapshotDrawer共享抽屉(发起时代码vs当前,MonacoDiff滚动联动);dev浏览器自验7项全过+927绿+build绿 [vps]
CI/CD / test (push) Successful in 16s
CI/CD / nas-deploy (push) Successful in 43s
CI/CD / nas-verify (push) Successful in 19s
2026-08-16 08:25:57 +08:00
claude_dev
1103ae85d5
refactor(frontend): 实例选择改级联——策略右边实例下拉(用户设计反馈「实例凌驾策略之上」)——四表单(个股回测/组合回测/模拟盘/实盘)统一:策略下拉旁并排「实例档案(可选·带出参数)」下拉,选中策略后只列该策略的档案(类名→code_file映射,组合按文件名);换策略档案不属自动清空防绑错;移除原顶部大下拉;CTA级联映射缺失(mock中文名/自输类名)退化为全量;布局一行「策略/档案」层级心明(策略→实例从属);build绿+实例测试绿 [vps]
CI/CD / test (push) Successful in 16s
CI/CD / nas-deploy (push) Successful in 34s
CI/CD / nas-verify (push) Successful in 11s
2026-08-15 23:21:04 +08:00
claude_dev
4da714d1c5
feat(frontend): 回测两页补实例档案下拉——回测/模拟/实盘三入口都能选档案(用户验收追问);CTA页instance预填提取applyInstance复用(跳转带入+下拉选择统一selectedInstanceId);组合页加下拉+预填(策略/max_pool/benchmark/pool)+getInstances加载;提交instance_id改用selectedInstanceId;build绿 [vps]
CI/CD / test (push) Successful in 14s
CI/CD / nas-deploy (push) Successful in 48s
CI/CD / nas-verify (push) Successful in 13s
2026-08-15 23:04:28 +08:00
claude_dev
2580b5c080
fix(strategy): 实例做实审计补漏6项——①回测表单提交透传instance_id(CTA/组合两页原只预填不传,四格回写链路断头;组合页补档案预填max_pool/benchmark/pool)②模拟盘/实盘列表支持?instance=N按档案过滤(策略库行加模拟历史/实盘历史按钮,过滤中提示条可退出)③live创建补D1快照(setting用档案参数,API直调不绕过)④实盘账户也标参数漂移角标(D2只亮不同步;account_params_drifted兼容live setting字段)⑤paper页PORTFOLIO_LABELS换STRATEGY_LABELS共享⑥同步生效时机实证标注(实走每日结算重读DB次晚生效;影子进程常驻内存需重启,实证live_step/runner.py均从DB读);921绿+build绿 [vps]
CI/CD / test (push) Successful in 14s
CI/CD / nas-deploy (push) Successful in 45s
CI/CD / nas-verify (push) Successful in 10s
2026-08-15 22:54:02 +08:00
claude_dev
5615b11640
feat(api): 回测参数校验—5提交入口统一拦截(2029结束日期可提交根治)——用户实况portfolio_ef8b655a零校验跑垃圾结果;sanguo_api/validation.py:L1静态(格式/先后/未来/区间≥30天/资金/费率0~1%)+L2数据最新日(600000日线锚定MAX(datetime),24h模块缓存,查库失败退化仅L1);接线CTA/组合/优化/因子/模拟盘回放5入口,400中文业务提示;前端5页日期控件禁选未来日期(disableFutureDate共享);+10测试含2029回归,API 115绿,前端build绿 [vps]
CI/CD / test (push) Successful in 19s
CI/CD / nas-deploy (push) Successful in 28s
CI/CD / nas-verify (push) Successful in 10s
2026-08-15 21:32:32 +08:00
claude_dev
5507058089
feat(frontend): 组合回测策略下拉加4个TET对照副本(all_weather_ex等,标注TET对照)——issue#19 Phase2副本可从页面直接选择跑(原仅API可达);仅回测页,模拟盘/实盘不加(那些runner未分发_ex) [nas]
CI/CD / test (push) Successful in 32s
CI/CD / nas-deploy (push) Successful in 37s
CI/CD / nas-verify (push) Successful in 16s
2026-08-15 12:51:35 +08:00
claude_dev
36db2ed5a6
feat(shadow-desk): 通路测试策略channel_test+模拟盘列表改造: 策略=每日等权轮换ETF/蓝筹(卖旧买新走全买卖通路)+T+1当日卖探针(两端应一致拒单,验证拒单通路),注册backtest/live/前端,默认universe 5只高流动ETF,4单测(坑:BrokerFacade是dataclass,子类方法被父类__init__实例属性遮蔽须实例注入); 模拟盘列表:加类型列(个股/组合)+创建时间列,标的去JSON中括号,列宽重排,模式筛选加影子 [vps]
CI/CD / test (push) Successful in 12s
CI/CD / nas-deploy (push) Successful in 28s
CI/CD / nas-verify (push) Successful in 9s
2026-08-14 14:32:52 +08:00
claude_dev
861c7faa8c
feat(portfolio): P1-a 组合策略K线周期字段(前后端): 模拟盘新建组合卡显周期下拉(原v-if藏起,实走/影子用miniQMT档位); live组合分支不写死d(空=d默认,cta空=15m); 组合回测加interval(d=day,非d拒400+runner拒ValueError,分钟档等数据层); worker params存interval供回放预填; 前端组合回测表单加下拉(仅日线可选,其余disabled标注影子可用) [vps]
CI/CD / test (push) Successful in 11s
CI/CD / nas-deploy (push) Failing after 12s
CI/CD / nas-verify (push) Has been skipped
2026-08-14 12:05:23 +08:00
claude_dev
5850a60561
feat(api+web): 任务列表管理(验收四轮批1):历史任务→任务列表改名;DELETE /task/{id}单/批删除(进行中拒删);GET /task/{id}/params参数回放+点任务ID跳参数页预填;真创建时间+耗时列(提交即记,进行中活计时);进行中禁查看;组合任务params全量存 [nas]
CI/CD / test (push) Failing after 10m39s
CI/CD / nas-deploy (push) Has been skipped
CI/CD / nas-verify (push) Has been skipped
2026-08-14 08:29:20 +08:00
claude_dev
929f52e3c2
feat(portfolio): 组合回测加持仓变化图(daily_positions每日聚合count/value经worker/routes透传,柱=持仓数线=市值)+超额收益曲线(策略/基准净值-1,聚宽标配,前端算);2测试 [vps]
2026-08-13 20:40:03 +08:00
claude_dev
819198919c
feat(portfolio): 组合回测结果页加月度收益热力图(年×月+年度合计)+滚动夏普/波动双轴图(63日窗,业界标准);前端从equity_curve算零后端改动;strategy query预填 [nas]
CI/CD / test (push) Successful in 11s
CI/CD / nas-deploy (push) Successful in 27s
CI/CD / nas-verify (push) Successful in 9s
2026-08-13 19:40:24 +08:00
claude_dev
e2d118fa38
fix(frontend): CI vue-tsc -b 三处类型错(live List重复import/paper List initial_capital可空/组合净值series宽类型);本地改用 -b 模式校验对齐CI [nas]
CI/CD / test (push) Successful in 11s
CI/CD / nas-deploy (push) Failing after 12s
CI/CD / nas-verify (push) Has been skipped
2026-08-13 18:33:42 +08:00
claude_dev
08aec403f7
feat(portfolio): 组合回测结果增强: 基准对比曲线(对齐交易日+归一化)+回撤序列+扩展指标(波动/Sortino/Calmar/超额/Alpha/Beta), worker与API透传, 结果页净值对比+回撤图 [vps]
CI/CD / test (push) Successful in 15s
CI/CD / nas-deploy (push) Failing after 13s
CI/CD / nas-verify (push) Has been skipped
2026-08-13 18:22:10 +08:00
claude_dev
728b8ccec9
feat(portfolio): 任务中心UX(GitHub Actions模式)—提交后跳历史任务页+自动刷新运行中状态+发起新回测入口; PortfolioBacktest 回归表单/查看两态(治单任务跟踪丢失) [nas]
CI/CD / test (push) Successful in 14s
CI/CD / nas-deploy (push) Successful in 26s
CI/CD / nas-verify (push) Successful in 11s
2026-08-13 13:50:24 +08:00
claude_dev
15f132ccb5
feat(portfolio): 参数表单分块(策略与选股/时间与资金/基准与费用); 进行中页加「发起新回测」(治等待页无法新建) [nas]
CI/CD / test (push) Successful in 13s
CI/CD / nas-deploy (push) Successful in 25s
CI/CD / nas-verify (push) Successful in 9s
2026-08-13 11:36:35 +08:00
claude_dev
66b393df16
feat(portfolio): 组合回测接入A股费用(佣金/印花税/最低佣金/滑点)对齐个股回测; BulletTrade set_order_cost/set_slippage [vps]
CI/CD / test (push) Successful in 9s
CI/CD / nas-deploy (push) Successful in 25s
CI/CD / nas-verify (push) Successful in 10s
2026-08-13 10:32:49 +08:00
claude_dev
b48a3b5c75
feat(portfolio): 组合回测改 trackTask 三态+localStorage 持久(提交后可切页,回来续看进度/结果,治同步等待体验) [nas]
CI/CD / test (push) Successful in 17s
CI/CD / nas-deploy (push) Successful in 27s
CI/CD / nas-verify (push) Successful in 9s
2026-08-13 10:14:47 +08:00
claude_dev
c833c07fd6
fix(portfolio): 历史组合结果可查看(PortfolioBacktest查看模式+History跳转/筛选/标签); 回测等待加已耗时提示(治卡顿错觉) [nas]
CI/CD / test (push) Successful in 10s
CI/CD / nas-deploy (push) Successful in 24s
CI/CD / nas-verify (push) Successful in 8s
2026-08-13 08:34:34 +08:00
claude_dev
e07cf7cd81
fix(portfolio): 默认日期改最近1年+记忆; MOCK_ON=import.meta.env.DEV(NAS构建走真实,治组合回测2022日期/不在历史mock假象) [nas]
CI/CD / test (push) Successful in 16s
CI/CD / nas-deploy (push) Successful in 29s
CI/CD / nas-verify (push) Successful in 12s
2026-08-13 08:05:46 +08:00
claude_dev
93bd251cc9
fix(frontend): 组合回测基准下拉 + 新建回测改名个股回测(消除歧义) [nas]
CI/CD / test (push) Successful in 14s
CI/CD / nas-deploy (push) Successful in 27s
CI/CD / nas-verify (push) Successful in 9s
2026-08-12 23:32:15 +08:00
claude_dev
e22c8ee939
feat(portfolio): max_pool 字段透传(model+handler+前端,解除30硬编码)
...
CI/CD / test (push) Successful in 8s
CI/CD / nas-deploy (push) Successful in 21s
CI/CD / nas-verify (push) Successful in 3s
model 加 max_pool 字段(默认30,0=全市场不限);handler 用 req.max_pool 替换硬编码30;
前端加选股池上限 input + onSubmit 透传。下游 submit_portfolio→spec→argv--max-pool
链路异步化时已存在,本次只补入口。全周期验收可传 max_pool=0 对比 docker exec 旁证
2026-08-01 23:20:40 +08:00
claude_dev
7a14d7da82
feat(portfolio): strategy 字段全链透传(API→orchestrator→worker→runner_backtest + 前端选择器)
...
CI/CD / test (push) Successful in 10s
CI/CD / nas-deploy (push) Successful in 20s
CI/CD / nas-verify (push) Successful in 3s
后端: PortfolioBacktestRequest.strategy → submit_portfolio(strategy=) → spec →
portfolio_worker _build_argv --strategy(NAS local + Mac SSH 两分支)
前端: PortfolioBacktestReq.strategy? + 策略下拉(4选项) + 副标题动态 + onSubmit 透传
runner_backtest CLI 已支持 --strategy(choices 4 策略),本提交不动
2026-08-01 23:01:26 +08:00
claude_dev
e64b5906da
fix(portfolio-backtest): 净值曲线 echarts 空白 - watch漏触发手动兜底
...
CI/CD / test (push) Successful in 10s
CI/CD / nas-deploy (push) Successful in 22s
CI/CD / nas-verify (push) Successful in 3s
根因(浏览器实证): onSubmit 异步轮询 done 后 result/equityCurve 同帧赋值,
v-if result 块(含 chart-box div)此帧才挂载, watch(equityCurve, flush:post)
在该时序下漏触发 renderEquity → echarts 从未 init(chart-box 无 _echarts_instance_)。
手动 echarts.init+setOption 实证容器/echarts/数据全正常(37点),纯 watch 触发遗漏。
修复: equityCurve 赋值后 await nextTick()(等 chart-box 挂载)+ 手动 renderEquity()兜底。
watch 保留(双保险, ensureChart 幂等)。
2026-08-01 16:56:26 +08:00
claude_dev
4986e5c3c4
feat(portfolio): 组合回测异步化(接入 orchestrator task 框架)
...
CI/CD / test (push) Successful in 10s
CI/CD / nas-deploy (push) Successful in 21s
CI/CD / nas-verify (push) Successful in 3s
routes_portfolio 同步 subprocess.run(timeout=600) >10min 回测被 504 杀。
改异步复用现有 sanguo_orchestrator:submit_portfolio 仿 submit_factor,
子进程执行搬至 portfolio_worker.py(三机自适应保留,timeout 600→3600),
复用 _wait_future/_on_done 持久化。前端 onSubmit 改 POST 拿 task_id
→ 轮询 /task/{id} → done 取 /portfolio/task/{id}/result。
- runner.py: + submit_portfolio + _portfolio_worker(lazy import)
- portfolio_worker.py(新): 三机自适应 argv + 子进程 + stdout JSON → BacktestResult
- routes_portfolio.py: POST async 返 task_id + GET /portfolio/task/{id}/result
- 前端: postPortfolioBacktest 返 task_id + 轮询 status + 取 result(去 600s timeout)
不动策略逻辑/runner_backtest 核心/现有 task 接口。
2026-08-01 13:52:46 +08:00
claude_dev
ae6dde7778
fix(frontend): 组合回测副标题文案修正(本地执行,非VPS)
...
CI/CD / test (push) Successful in 10s
CI/CD / nas-deploy (push) Successful in 24s
CI/CD / nas-verify (push) Successful in 4s
CI/CD 测试改动:验证 nas-deploy 前端 build+rsync 链路对前端改动跑得通
2026-07-31 22:54:49 +08:00
claude_dev
286c0bd069
fix(portfolio-backtest): 净值曲线watch加flush:'post'
...
CI/CD / test (push) Successful in 8s
CI/CD / nas-smoke (push) Successful in 2s
CI/CD / vps (push) Successful in 22s
watch(equityCurve) 默认 flush:'pre' 在 DOM 更新前触发,
equityEl div(在 v-if=result 内)尚未挂载→echarts.init 拿不到 DOM→空图。
flush:'post' 让 watch 在 DOM 更新后触发,曲线正常渲染。
2026-07-31 13:21:16 +08:00
claude_dev
96b1924fd5
feat: 实盘模拟(live) + 组合回测MVP(portfolio)
...
[live] 实盘模拟 vnpy+miniQMT 直连(supervisor 轮询, 前后端):
- sanguo_live: LiveTradingEngine + AShareCtaTemplate(定寸/禁做空) + runner_supervisor(DB驱动) + persistence(4表WAL)
- sanguo_api/routes_live: 9路由(create/start/stop/positions/trades/account/status)
- frontend live: New/List/Monitor + api/live.ts; config/live.yaml
[portfolio] 组合回测 MVP(BulletTrade, 链路代码完成待验证):
- runner_backtest 加 JSON 入口(--json, BacktestEngine 顶层 import)
- sanguo_api/routes_portfolio: POST /portfolio/backtest SSH 触发 VPS 跑
- frontend PortfolioBacktest.vue + api/portfolio.ts: 表单+结果+净值曲线
- 路由/菜单注册(/backtest/portfolio 组合回测)
- 已知: MVP 链路未端到端验证, agent 改至中途被停; 待 Mac 起服务联调
2026-07-18 20:04:16 +08:00