Commit Graph

553 Commits

Author SHA1 Message Date
claude_dev 5cc326dd4a fix(factor): output_dir建目录兜底——VPS(Windows)首跑/tmp/factor不存在tears静默失败 [vps]
CI/CD / test (push) Successful in 3s
CI/CD / nas-deploy (push) Successful in 11s
CI/CD / nas-verify (push) Successful in 13s
API路径output_dir硬编码/tmp/factor是容器/NAS约定;Windows解析为当前盘根
\tmp\factor,首跑不存在且tears/心跳open直写不建目录→FileNotFoundError
→tears标注json_error静默降级+心跳全丢。os.makedirs exist_ok幂等修复,
赶上统一推vps班车。factor全套测绿
2026-08-30 10:53:34 +08:00
claude_dev 51c400030b fix(web): 生成tears按钮任务状态化防重复提交(用户08-30补充) [nas]
CI/CD / test (push) Successful in 5s
CI/CD / nas-deploy (push) Successful in 12s
CI/CD / nas-verify (push) Successful in 7s
痛点:点击生成→progress→返回详情页按钮仍可点,重复生成同类任务。
方案:每因子记task_id(localStorage factorTearsTask.v1),按钮三态——
无任务「生成tears报告」/进行中「分析进行中·查看进度→」(跳progress复用)/
已完成「✓查看tears报告→」(跳result复用);failed或tears缺失(修复前旧
失败任务getTearsData探测404)自动清态恢复可重新生成;任务404(已清理)同。
mounted/watch factor刷新态;build绿
2026-08-30 10:48:45 +08:00
claude_dev ad2270821c fix(web): 进度页时间线越界+因子任务日志空(用户08-30验收两处) [vps]
CI/CD / test (push) Failing after 14m58s
CI/CD / nas-deploy (push) Has been skipped
CI/CD / nas-verify (push) Has been skipped
①时间线:原「末节点flex 0 0 auto+bar宽100%相对本节点」=4号点贴屏幕右缘、
3号bar越界伸出容器 → 全节点等宽flex:1(dot落各等分区中心),bar改
left:calc(50%+16px)/width:calc(100%-32px)精确连接相邻dot。
②因子任务日志空:log端点读的{db目录}/{tid}.log因子任务从不写 → 心跳
追加流水:_report_progress同时append [HH:MM:SS] stage·detail 到
{tid}.progress.log,/task/{id}/log factor_前缀优先返流水(行情加载i/N、
因子i/M、tears✓即用户要看的运行过程);189测+build绿
2026-08-30 10:46:05 +08:00
claude_dev 20be2d5152 fix(web): 因子分组双竖排平齐+排行榜主按钮观感对齐(用户08-30两项) [nas]
CI/CD / test (push) Successful in 5s
CI/CD / nas-deploy (push) Successful in 12s
CI/CD / nas-verify (push) Successful in 15s
①FactorPicker:左列=alpha101+builtin(小类拼列)右列=alpha158(大类独占),
两竖排大体平齐(原grid顺排builtin孤悬左下右下留白);flex双列,未知类别归左列。
②Leaderboard「发起新评估」:荧光青实底+冷白字对比不足(浅底浅字看不清)→
对齐el-button--primary观感(新建模拟盘同款):青软底+荧光青字+青描边。
npm run build绿
2026-08-30 10:24:29 +08:00
claude_dev 8f4f564733 feat(factor): 进度页心跳判活+因子列表默认折叠(用户08-30反馈两项) [vps]
CI/CD / test (push) Successful in 4s
CI/CD / nas-deploy (push) Successful in 11s
CI/CD / nas-verify (push) Successful in 7s
痛点:因子分析分钟级运行,进度条停着看不出进行中还是死掉;240因子罗列乱。
①跨进程心跳链路:analyzer._report_progress 写 {output_dir}/{tid}.progress
(stage/detail/ts;IO故障静默——锦上添花不能伤主流程),埋点=行情加载i/N逐只
+因子特征+逐因子i/M+tears✓+完成;runner._factor_worker 透传 task_id
(默认空串兼容旧调用);GET /task/{id} 合并 _read_factor_progress(factor_
前缀才读,age=距上次活动秒数)。
②Progress.vue终端风重构:心跳区=呼吸灯(绿≤30s/琥珀≤180s静默期/红更久,
prefers-reduced-motion停动画)+「Xs前·detail」+运行时长秒表+步骤%大数字;
因子步骤=行情加载→因子计算→逐因子分析→完成(心跳stage驱动);回测/优化
保持原5步推导+进度条;useTask/TaskStatus 透传 progress。
③FactorPicker默认折叠:groups max-height 128px两行预览+渐隐底边+
「展开全部N个因子▾」按钮,搜索时自动展开。
+5测试(_report_progress写/静默/心跳读roundtrip/非factor/损坏JSON),323绿+build绿
2026-08-30 10:17:19 +08:00
claude_dev 557479b848 feat(factor): New/Result两页终端风重构落地(方案B设计稿v2用户拍板'开工') [nas]
CI/CD / test (push) Successful in 3s
CI/CD / nas-deploy (push) Successful in 6s
CI/CD / nas-verify (push) Successful in 9s
后端3小端点(sanguo_factor/universe_pools.py+routes):/factor/universe/pools
池清单(白名单6指数+当前成分数,in_current=1池语义≠回测并集口径)/pool/{key}
成分(code+name读constituent_unified)/search?q=(代码前缀OR名称子句DISTINCT
LIMIT10);cfg=None兜底同analyzer;+6单测+2端点测(⚠️首版误覆盖batch_eval的
universe.py,git恢复后改名universe_pools,292测全绿)

前端:①New.vue终端风重写——FactorPicker(搜索+三色分组点选+已选托盘,
240因子弃下拉)+UniversePicker(三层输入:预设池一键选[跨行业30前端常量+
6指数池走后端]/搜索combobox防抖250ms带名称候选/chips池可删+复制+清空,
批量粘贴折叠兜底)+原生date input禁未来+跨度显示+校验前置(禁用+原因文案);
要素零变化(query.factor预填/hydrate回填/≥1因子+≥2标的/混合分隔)。
②Result.vue外壳——5格metric-strip(最优ICIR正红负绿/最优因子青)+IC明细
终端表格(右对齐tabular-nums,|t|≥2加粗,最优因子行青标+左青条)+tears区
tabs终端化(TearsPanel本体不动)。③factorSamples.ts常量:跨行业30只
(code+name)详情页一键直达与New页预设共用同源(LeaderboardDetail改引,
删本地重复清单)。npm run build绿(vue-tsc+rolldown)
2026-08-30 09:59:38 +08:00
claude_dev 271adedbb5 docs(factor): 设计稿v2——标的池textarea改三层输入(用户反馈'太原始') [nas]
CI/CD / test (push) Successful in 1s
CI/CD / nas-deploy (push) Successful in 6s
CI/CD / nas-verify (push) Successful in 8s
参考聚宽/万得选股器+收件人式tags input,把'手打代码'变'点选':
①预设池一键选:跨行业30/沪深300/中证500/1000/2000/全A主板+创业板(cs_rank族
因子300+只才不失真,手贴不现实)
②搜索加自选:代码/名称模糊→候选下拉(代码·名称·行业·已选标记)点选加入
③chips已选池:600519贵州茅台✕可删标签+计数徽标+复制清单+清空;
批量粘贴收进折叠兜底入口(能力保留不再是主入口)
配套说明:后端3小端点(池清单/池成分读constituent_unified/标的搜索),
New.vue拆UniversePicker.vue组件,预估1天
Chrome实测:池载入54只+按钮点亮/搜茅台候选带已选标/chips渲染/校验联动全通
2026-08-30 09:48:09 +08:00
claude_dev d1d48896a9 docs(factor): New/Result两页终端风设计稿v1(可交互,任务#12方案B) [nas]
CI/CD / test (push) Successful in 2s
CI/CD / nas-deploy (push) Successful in 6s
CI/CD / nas-verify (push) Successful in 8s
照 tears-compare-mockup 流程先出稿拍板再实现。三tab:
①提交页New:因子多选从Element下拉改「搜索+分组点选」面板(240因子下拉翻页难)
+三类别色chip(101青/158紫/builtin琥珀)+已选托盘chips可删/清空(同对比托盘交互)
+标的池mono textarea实时计数徽标+跨行业30只预设(与详情页一键直达同样本便于复现)
+区间禁未来+跨度显示+提交校验前置(未满足禁用+原因文案)
②结果页Result外壳:5格metric-strip(最优ICIR红/最优因子青)+IC明细终端表格
(右对齐tabular-nums,IC/ICIR/t正红负绿,|t|≥2加粗,全局最优行青标+左青条)
+tears区块虚线占位示意(新版TearsPanel已上线本次不动)
③实现说明:范围/交互变化/拆分预估(New半天+Result1-2小时,纯前端零后端)
种子合成数据mulberry32;charset声明防file://乱码;本机Chrome实测两tab+交互OK
2026-08-30 09:41:49 +08:00
claude_dev 8eba3e1cf1 fix(factor): tears对秩类离散因子必空根治(qcut duplicates+quantiles=10) [vps]
CI/CD / test (push) Successful in 1s
CI/CD / nas-deploy (push) Successful in 6s
CI/CD / nas-verify (push) Successful in 8s
alpha16实锤(08-30用户验收factor_b7f3a2e8无图表):cs_rank(ts_cov(cs_rank,cs_rank,5))
截面值高度并列(中位日25值仅6唯一,-19.5×12/-5×9)→alphalens quantize_factor的
pd.qcut(x,q)不传duplicates(默认raise)→Bin edges must be unique→no_raise吞成全NaN
→binning丢100%(303/303日期全抛)→merged空→IC全'No valid IC values'+tears
IndexError+报告空=页面无图表。该形态下此类因子tears永远不可能成功。

修复三件:
①tears_data.py加pd.qcut duplicates='drop'幂等patch(与demean pandas2 patch同位,
_SANGUO flag防重入)——并列值并入少数分位,quantile_keys动态短化前端已容错
②analyzer get_clean调用前import tears_data激活模块级补丁(原import在IC后=补丁
晚到)+quantiles默认5→10显式传参(对齐tears页D1..D10设计与排行榜decile口径)
③build_tears_data qkeys防御:<2组多空退化零序列/0组空Series,不再IndexError

+回归测试:离散并列因子走真实alphalens binning(原测试自合成factor_quantile
绕过该路径=漏掉此bug的原因);RED→GREEN双向验证(无patch merged空(0,3)97.5%
bin丢/有patch绿)。factor+api 123绿;NAS容器30只股端到端:binning丢0.0%、
merged 7732行、tears三周期出数(ic_mean 5D=-0.0014)
2026-08-30 09:36:21 +08:00
claude_dev 32d17676b3 fix(factor): 排行榜详情「查看tears报告」跳分析提交页的断点改一键直达 [nas]
CI/CD / test (push) Failing after 13m54s
CI/CD / nas-deploy (push) Has been skipped
CI/CD / nas-verify (push) Has been skipped
用户08-30验收:对比页已见,但点tears仍跳原因子分析页(旧桥接=带预填跳/factor/new手动提交,方案A上线后成了断点)。改:按钮「生成tears报告」直接submitFactor(30只跨行业样本×2024-01~2026-06,分钟级)→progress→完成即新版ECharts tears页;原桥接降级为「自选样本分析」次按钮。npm run build绿
2026-08-30 08:57:17 +08:00
claude_dev 0dd81d709f feat(factor): tears报告方案A原生重构+「加入对比」做实(用户08-29拍板) [vps]
CI/CD / test (push) Successful in 5s
CI/CD / nas-deploy (push) Successful in 8s
CI/CD / nas-verify (push) Successful in 8s
①后端tears序列化:sanguo_factor/tears_data.py新模块,alphalens已算分层序列(日度IC/月度聚合/十分组累计净值/多空Q10−Q1净值+最大回撤/去重叠年化/因子秩自相关)在分析时序列化为{factor}_tears.json,与tearsheet同源;FactorReport加tears_paths,GET /task/{id}/tears/{factor}端点(token header),_persist_factor同步落DB
②前端tears页:TearsPanel.vue按设计稿tab①——指标条7格+月度IC柱(红正绿负)/累计IC线双轴+月度IC热力图(年×月,CSS格)+分组累计净值Q1/Q5/Q10+多空净值(琥珀+面积+○最大回撤标注)+十分组年化(±5%虚线)+IC衰减(1/5/10D),1/5/10D全页联动;Result.vue的iframe→原生渲染;旧任务404自动回退iframe旧alphalens报告
③加入对比(设计稿tab②纯前端):factorCompare store(localStorage持久化,2~6个)+排行榜行内「+对比/✓已选」列+详情页死按钮做实(选中青色态)+全局底部托盘CompareTray(chips可删/清空/对比N因子→)+对比页Compare.vue(指标并排·行最优青色高亮/累计IC叠加多线/月度IC序列Pearson相关性矩阵前端算/十分组小倍数SVG)

测试:tears_data纯函数5+全链真实alphalens6(合成因子IC>0/分层单调/JSON可序列化)+analyzer写盘/容错2+端点401/404/200共3;factor+api+orchestrator 317全绿;npm run build绿
2026-08-29 08:45:10 +08:00
claude_dev 7add8149af docs(factor): tears报告页+加入对比终端风设计稿v1(可交互)——用户08-29拍板:tears=方案A原生重构+对比按稿②做实;设计稿三tab:①tears页(指标条+月度IC柱/累计线+热力图+分组/多空净值+IC衰减,1/5/10D联动)②对比(排行榜行内多选+托盘+对比页:指标并排/累计IC叠加/相关性矩阵/十分组小倍数)③实现说明;图表种子化示意数据形态对齐08-25批次;补charset声明修file://直开乱码 [nas] 2026-08-29 08:24:33 +08:00
claude_dev 64cb460748 fix(live): 08-28复盘根治三连(003011守恒120股+600818废单+day_count5连日day=0)——①EOD补插失效修复:守恒缺口非空不再一天一跑,15:05-23:00每轮重查(QMT当日视图晚间才补全:003011实锤15:05快照缺第10笔/用户22点导出已齐全=当晚自愈窗口,23:00后记日放弃防无效轮询)+缺口标的QMT原始行直接打进告警取证(当时没dump事后只能猜)+同签名重试轮降INFO防60s刷屏;②当日废单告警入EOD汇总(600818形态:filled=0废单盘中只有ERROR日志躺文件里,复盘才发现当日缺仓~8万);③small_cap day_count持久化(runtime/state_{实例env}/small_cap_day.json,08-24~28连续5交易日重启归零day=0全量调仓根治,tc=5周期跨重启保持;隔日重启+1/同日不加/停摆跨多日只+1自洽;回测无实例env不落盘=旧内存语义;原版+_ex同接all_weather共享helper,TET副本diff契约不破);+测试:003011十笔孪生vs九行台账复现补插/缺口重试到视图补全即闭环/废单告警+部分成交与跨日不进清单/持久化4态;顺手修tests/test_live_api预存红9个(B3 f9b6d77只给两文件播种快照漏了本文件,照抄同款修法;空账号断言改create即400新契约);全量1333绿 [vps]
CI/CD / test (push) Successful in 9s
CI/CD / nas-deploy (push) Successful in 17s
CI/CD / nas-verify (push) Successful in 15s
2026-08-29 08:22:14 +08:00
claude_dev a62bdbabc1 fix(web): 因子详情「查看完整 tears 报告」从裸跳老页改为带因子名预填——原占位跳转不带上下文,用户看到的像部署了旧页;现经 query.factor 预填老分析页因子选择器(排行榜深挖单因子的正路);npm run build 绿 [nas]
CI/CD / test (push) Successful in 10s
CI/CD / nas-deploy (push) Successful in 18s
CI/CD / nas-verify (push) Successful in 0s
2026-08-28 23:02:49 +08:00
claude_dev 9c33af5d45 fix(live): 孪生成交判重+订单守恒双修(08-27 001234实锤)——①EOD对账五元组判重set→Counter计数感知:同分钟同价同量仅成交编号不同的孪生成交,第二笔原被吞成'已覆盖'→台账短100股幻影(事件路径vt_tradeid=哈希不携带成交编号,tid匹配永远落空全靠元组,集合式判重天生分不开孪生);计数后超出部分补插,001234场景在15:05即自愈②守恒校验新增:本实例当日终态订单filled合计vs台账当日成交量合计(前缀6位码归一/跨日订单不计),不平即告警——连QMT流水都缺行的极端形态最后防线③影子撮合价差对齐(用户拍板费率已齐只留撮合差):新增SanguoFundamentals.get_realtime_price(get_full_tick单次RPC+thread超时保护,裸价),build_price_getter实时tick优先/回退昨收fq=pre→raw(除权日不再跳分红因子,08-27 600988实锤47.12 vs 46.85);+3 provider测试+4定价测试+2守恒测试,全量792绿 [vps]
CI/CD / test (push) Successful in 13s
CI/CD / nas-deploy (push) Successful in 37s
CI/CD / nas-verify (push) Successful in 12s
2026-08-28 00:30:13 +08:00
claude_dev c0dd91e8d2 fix(web): 监控页表格五修(用户验收08-26晚)——①整表挤左根治:五张表全部固定width→min-width(08-20四修治折行时全列定宽,合计~600px<卡片宽,Element固定列不拉伸→右侧大片空白;min-width保下限不折行+剩余宽度按比例分配铺满整卡)②小数位统一(非设计初衷,原始浮点透出14.6/23.577/200.0混杂):均价/价格/成本统一fmtPrice两位小数,数量/持仓/冻结/可卖num()取整千分位,时间列fmtTradeTime兼容空格式与ISO'T'两种落库路径;npm run build绿 [vps]
CI/CD / test (push) Successful in 9s
CI/CD / nas-deploy (push) Successful in 30s
CI/CD / nas-verify (push) Successful in 5s
2026-08-26 23:06:30 +08:00
claude_dev a7c2dd6f59 fix(ci): vps_restart_resident schtasks /run 加3次重试——run756实锤三连部署短时海量ssh连接可被sshd单发重置(kex reset),拉起命令没送到=影子舰队整夜静默需手动补拉 [nas]
CI/CD / test (push) Failing after 11m54s
CI/CD / nas-deploy (push) Has been skipped
CI/CD / nas-verify (push) Has been skipped
2026-08-26 22:49:06 +08:00
claude_dev c16f5e2248 fix(provider): get_fundamentals_df整步本地化根治small_cap选股2/3十八分钟——fields全落本地可供列(market_cap/circulating_market_cap/eps)直接委托unified parquet跳过xt;xt路径=download_financial_data(3226)卡满120s超时被弃+get_financial_data逐股0.3s×全池≈16min(08-26 live_20 delay=+1084s实锤),unified全池88s(VPS实测3226只);eps随之与回测同源(LPP年报BASIC_EPS),live原走miniQMT最新一期本就是双轨漂移;本地异常回退xt老路径fail-open;白名单外列(roic等)不走快路不混合;7新测试+1老测试拆双路径 [vps]
CI/CD / test (push) Successful in 17s
CI/CD / nas-deploy (push) Successful in 22s
CI/CD / nas-verify (push) Successful in 10s
2026-08-26 20:46:44 +08:00
claude_dev 97403c2d9e refactor(strategy): 定寸口径全量统一_ex总资产语义(用户08-26拍板「都要统一ex的」)——回测侧四原版per_value现金→_total_value(momentum/value/small_cap同款total<=0守卫+all_weather两处:补跌加仓n_pick/月度铺余位空槽数),all_weather_ex同步(08-25 A修法时被排除的两处补齐,移交文档「_ex已全部用」与实际不符);value_selection_ex交集定序list→sorted对齐fa04475(原版已sorted,_ex副本漏带=原版↔_ex同参一致的最后一处差);8策略类inspect验证零残留现金口径;测试参数化原版+_ex双跑(12绿=统一验收)+aw两现场新增;顺修test_live_reconcile写死日期跨午夜翻红(08-26实锤,改动态今天);524全绿;回测历史结果将变(目的=回测↔实盘对齐) [vps]
CI/CD / test (push) Successful in 17s
CI/CD / nas-deploy (push) Successful in 28s
CI/CD / nas-verify (push) Successful in 13s
2026-08-26 20:38:03 +08:00
claude_dev df008b985c feat(web): 对账中心上线——恒等式B5只读端点+前端恒等式区块,双轨对账页升级为对账中心(issue#42-A) [nas]
CI/CD / test (push) Failing after 23s
CI/CD / nas-deploy (push) Has been skipped
CI/CD / nas-verify (push) Has been skipped
- API: GET /paper/reconcile/identity?date&refresh——缺省读 supervisor 15:10/23:27
  已存 identity_reconcile 行,无存行现算并落库(与 build/save 同套幂等);
  路由置于 /paper/{aid} 前,与既有 reconcile 端点同组
- 前端: Reconcile.vue 顶部新增恒等式卡片(账户级红绿/未归因±/占比vs容忍0.5%/
  可展开逐票缺口+实例市值拆分),页面与菜单更名为「对账中心」;
  api/paper.ts 补 IdentityReport 类型族
- 测试: 绿线(50/10050=0.497%pass)+存行复用+refresh强制重算(200=1.96%红)+
  snapshot_missing 如实标注,12/12 绿
- 附: docs/session_prompts/ 两份 session 移交提示词入库(fundamentals 18min→
  数据session / 统一ex定寸→策略session,用户08-26拍板)
2026-08-26 20:31:42 +08:00
claude_dev 0c81f5b04b fix(orchestrator): worker被OOM击杀后ProcessPoolExecutor永久破损——BrokenProcessPool让任务中心瘫痪到容器重启(factor批次连撞两次500实锤);submit_work捕获后重建池重试一次 [nas] 2026-08-26 20:19:07 +08:00
claude_dev 1539e678f6 fix(factor): fast_ops大窗口OOM根治——>60窗shift展开物化window列×10M行(250窗≈20GB)必被内核击杀,卡死24/227六次自愈全撞alpha19的统一根因;sum/min/max/mean/std/corr改原生rolling(min_samples=1截断窗与展开逐点恒等,13等值测试锁定NaN/null语义差异:min须fill_nan(None),max不fill因NaN视作最大两路同步毒化) [vps] 2026-08-26 20:19:03 +08:00
claude_dev c40c6f3216 feat(api): 批量评估submit支持run_id断点续跑透传——docker exec会话被DSM约20min处决,评估改走uvicorn子进程不受exec收割,API带run_id无缝续 [vps] 2026-08-26 19:03:50 +08:00
claude_dev 2838b3938e perf(factor): close_wide同款pandas pivot快路——parquet缓存后它成了每条命15min的残留大头(_eval_one同款修法) [vps] 2026-08-26 07:42:08 +08:00
claude_dev be50d6c555 perf(factor): universe parquet缓存——外部~20min杀手 regime下每条命15min冷加载翻转为秒级复载,20min寿命=纯计算15-20因子;key含窗口/symbols/limit防串池,写失败静默 [vps] 2026-08-26 06:37:33 +08:00
claude_dev 62673ea329 fix(factor): load内存根治v2——类型转换下沉chunk级(dt解析/vt_symbol常量列/列裁剪),字符串三列活不过2100行小块,concat仅碰精简类型列;前轮lazy化未压住的6.6GB峰值源头即Utf8多份拷贝 [vps] 2026-08-26 05:27:28 +08:00
claude_dev 6eb977a0d0 fix(factor): load段内存峰值根治——chunks在concat后即清+transform链lazy单次物化,RSS监控实锤6.6GB被kernel周期性OOM击杀,eager逐步链3-4倍峰值收敛到~1.5倍 [vps] 2026-08-26 05:03:45 +08:00
claude_dev 9977ff6e2e perf(factor): 评估内存减负——bars原始帧派生后即释放(~1G)+alpha_df弃无引用open_interest列(80M),NAS 8G盒防周期性OOM [vps] 2026-08-26 03:53:30 +08:00
claude_dev 38df909b92 perf(factor): fast_ops 双操作数join改按位拼接——ts_corr/cov每次调用对10M行帧hash join分钟级(py-spy第五查),同父df全算子保长保序前提下按位等价零成本 [vps] 2026-08-26 01:57:05 +08:00
claude_dev d995962425 perf(factor): 落库buffer 20→1逐因子即存——重启风暴下单次最多丢在途1因子(曾一次丢6个未攒满批) [vps] 2026-08-26 00:25:57 +08:00
claude_dev 75f824341b perf(factor): 因子矩阵宽表化polars pivot改pandas pivot——py-spy实锤10.4M行polars pivot单次10+分钟,唯一键下pandas=factorize+reshape秒级;索引/列语义与后续切窗掩码不变 [vps] 2026-08-25 23:56:44 +08:00
claude_dev 919fa50d0f fix(live): 迟到成交对账根因修——引擎16s超时弃跟踪后迟到fill永不进engine.get_trades(08-25幻影500+700股/-18060不自愈):a窄修=下单返回非终态挂进程内待对账名单,归因轮询按券商订单号直查QMT原始成交行(broker.get_trades,绕开引擎视图)见一笔记一笔,终态出名单/隔夜出清;b宽修=15:05 EOD全量对账(QMT当日成交vs live_trades,trade_id或时间+代码+方向+价+量五元组对齐,缺失补插带eod:前缀),赶在15:10恒等式前收敛;三路径同一deal_no幂等;新增live_reconcile模块+账本seen_trade_ids快照,适配器_done挂钩孤立加载已验,21新测试+全量1100绿(9红=test_live_api前后端session既有) [vps]
CI/CD / test (push) Successful in 18s
CI/CD / nas-deploy (push) Successful in 23s
CI/CD / nas-verify (push) Successful in 2s
2026-08-25 23:56:29 +08:00
claude_dev 7bbba554f8 perf(factor): fast_ops v2 去over化——rolling.over(vt_symbol)在10M行分组滚动分钟级/算子(py-spy实锤ts_mean),改符号内shift展开统一模式(ts_mean/std/min/max/sum/corr/cov),等价性测试对齐原版+1M行速度护栏 [vps] 2026-08-25 22:15:40 +08:00
claude_dev a2fe51b4b0 fix(nas): bs_5m失败股尾部补扫一轮——03:0x同步链持写锁60s busy_timeout耗尽database is locked(每晚1-5只)+偶发网络错(600247),原形态=该片窗口永久小洞;修=_sweep返failed清单,run尾部(07:40+同步链早已收工)chunk/inc各自失败集各补扫一轮自愈,补扫query计入swept配额、rlr并入exit语义;+2测试(双窗口失败→双retry=6调用自愈/零失败无retry回归);venv310 644绿 [nas]
CI/CD / test (push) Successful in 29s
CI/CD / nas-deploy (push) Successful in 33s
CI/CD / nas-verify (push) Successful in 2s
2026-08-25 21:32:28 +08:00
claude_dev 7ad0cbea76 fix(nas): merge_increment计数免疫并发写者——inserted改用Connection.total_changes(只计本连接INSERT生效行),原after-before会被03:00合并窗口并发的bs_5m写入污染(08-25实锤skipped(dup)=-4881,5m插的行被记成merge的inserted);+2测试钉计数契约(新/dup/混掺/他源行不计入);venv310 644绿 [nas] 2026-08-25 21:32:28 +08:00
claude_dev 41495b0c08 fix(live): 卖出闸门无价透传改fail-closed拒单——issue#38修复一A收尾 [vps]
CI/CD / test (push) Failing after 11m5s
CI/CD / nas-deploy (push) Has been skipped
CI/CD / nas-verify (push) Has been skipped
08-24 300059 跨实例互卖定罪(issue#38):闸门虽有台账硬顶,但两处「无有效价格」
路径透传引擎原函数=数据源退化回全账户视图(引擎按账户算target,账户有量会替
别家卖到目标值/按账户卖出)——正是「账户可卖视图放行18归属4400股」的变体洞。

改动(_instance_order_wrappers):
- otv value>0 无价(市价拿不到且账本无此票无成本可回退)→ 拒单fail-closed,
  不再透传bt_otv引擎target语义(宁可少买不可互卖,策略session定夺=拒单语义)
- 负order_value无价 → 拒单,不再透传bt_ov按全账户卖出
- 事故主洞(同窗双卖吃到60s归因间隙)已由191270c即时归因关闭:新增钉死测试
  「双卖窗口阻断」——第一笔4400即时归因(on_order_done钩子)→第二笔闸门读
  账本可卖0拒单;闸门每调用现读positions_view的B链路行为从此有回归锚

测试:test_live_instance_orders +3(双卖窗口阻断/otv无价拒单/负ov无价拒单),
17/17绿;portfolio+data_platform+api全量819绿。B2 closeable口径已走账本
(InstancePosition直读账本info,无改动);账本bootstrap/重归=15:10恒等式
reconcile既有runbook。issue#38验收(恒等式连续3日PASS)按issue标准观察。
2026-08-25 21:30:49 +08:00
claude_dev 894c547297 feat(factor): 批量评估断点续跑——run_id复用+已落库因子跳过+空续跑免load直收尾;跨session CI容器重启只损失在途1因子,重挂即续 [vps] 2026-08-25 20:56:22 +08:00
claude_dev 3304ff46b2 perf(data): 四热路径日期区间SARGable化——substr(datetime,1,10)对索引列套函数打不进复合索引datetime列,每股扫全量日线史取短窗——08-25晨9:30生产实锤:momentum选股1/2(RPS池)174s未达<60s验收,阶段日志精确定罪(过滤段含双seek仅7.8s);病根=PanelFetcher的30天窗SQL每只股扫~5000行日线史取~22行,3226只≈1600万行=174s量级吻合。修=裸列datetime>=start AND datetime<end+1天排他上界(与按日期前10位比较在d裸日期/15m·5m时间戳两格式下语义严格等价,含end当日全部行排除次日),区间打进复合索引第4列每股只扫窗口行。四处同病同修:PanelFetcher宽表/PriceFetcher逐只get_price/limit-status近2根90天窗(原substr版90天下界同样打不进索引)/datareader CTA回测K线。+3测试:防回潮扫描(三文件钉死禁substr谓词)+双格式边界行为(d裸日期与15m时间戳end当日含次日排)+get_price同语义;portfolio+data_platform 644绿;待VPS探针终验计时 [vps]
CI/CD / test (push) Successful in 3s
CI/CD / nas-deploy (push) Successful in 21s
CI/CD / nas-verify (push) Successful in 8s
2026-08-25 20:54:40 +08:00
claude_dev 841ea1536e fix(live): 三策略定寸现金→总资产口径(卖后买现金窗口A修法,回原JQ语义) [vps]
CI/CD / test (push) Successful in 7s
CI/CD / nas-deploy (push) Successful in 23s
CI/CD / nas-verify (push) Successful in 11s
08-25 9:30 事故(前后端session移交):small_cap同轮「全卖19只→马上全买20只」,
台账现金只被runner_live 60s归因轮询更新(唯一cash入口),买入定寸落在两轮之间
→卖出回款不可见→20笔买入全部目标0全天空仓;momentum同型撞运只入账首笔
79k/6≈13.2k/只(44%仓)。B修法(191270c,下单返回即时归因)已做;本A修法=
防御纵深第二层:定寸口径回总资产,归因异常/漏单时定寸也不再依赖未入账现金。

改动:
- all_weather.py 共享helper _total_value:B2 InstancePortfolio.total_value
  (=台账equity,实时价缺价回退成本)/jq原生total_value直接读;缺属性回退
  现金+Σ持仓市值(同语义)
- momentum_timing_ex/small_cap_ex/value_selection_ex 三处轮动定寸
  per_value=cash/N→total/N,守卫cash<=0→total<=0
- momentum 尾部卖出+买入抽独立方法 _rotate_positions(纯移动零逻辑变化,
  便于回归直接钉死)
- 原JQ语义per_value=stock_value/len本就是总资产口径,cash口径是移植失真;
  all_weather/channel_test的cash读取(递增建仓/现金铺余位语义)按移交指示不动
- 清三文件因此孤儿化的_available_cash import

测试:tests/portfolio/test_sizing_total_value.py 5条——helper 2(直读/回退)
+每策略1条「卖出未入账时定寸不缩水」(fake现金旧值+持仓仍显示旧仓→per_value
=总资产/3=3500而非现金/3≈333;目标3>旧仓2=事故真实形状,防买守卫提前break)。
portfolio+data_platform+api全量811绿。验收=08-26 9:30 momentum补仓满额
(~490k/6);与191270c同车推VPS(NAS恢复后)。
2026-08-25 20:49:01 +08:00
claude_dev 0ede4e967e chore: 191270c 标签补正说明——[vps]误写在正文末行,enforce-label按subject行匹配故run741红;改动本身无新增(空commit),B修法实体在191270c [nas]
CI/CD / test (push) Successful in 5s
CI/CD / nas-deploy (push) Successful in 15s
CI/CD / nas-verify (push) Successful in 3s
2026-08-25 20:43:28 +08:00
claude_dev 191270c884 fix(trader): 卖后买现金窗口B修法——下单返回即时归因入账,台账cash不再等60s轮询
CI/CD / test (push) Failing after 6s
CI/CD / nas-deploy (push) Has been skipped
CI/CD / nas-verify (push) Has been skipped
2026-08-25 事故:small_cap同轮「全卖19只→马上全买20只」在两轮归因轮询间隙
读台账现金,卖出回款不可见→20笔买入全部目标0、全天空仓;momentum同型撞运
只入账首笔79k/6=13.2k缩水44%仓;value无卖后买序列满额(反证)。QMT无责
(0.5s filled/券商现金即时/下单线程同步见filled),gap=runner_live.py归因
poller 60s一轮才调ledger.apply_trade(唯一cash更新入口,DB落库时间戳恰差60s
铁证)。

修法(B,治本现金新鲜度):
- LiveInstanceLedger.on_order_done钩子+notify_order_done(未注入/抛错静默,
  绝不阻断下单;漏单由轮询兜底);apply_trade幂等判定整体移入锁内——钩子
  (策略线程)与轮询(poller线程)并发同步同一笔成交时恰好一笔入账,防双计
- live_strategy._instance_order_wrappers:所有真实委托(bt_order/透传)返回后
  _done()触发即时归因;决策层不下单的路径不触发
- runner_live:engine装配后注入on_order_done=_sync_instance_trades闭包;
  60s轮询保留兜底(部分成交后续/异步路径)

测试+8:钩子三态(nop/触发/吞异常)+8线程同trade_id并发恰入账一次(竞态回归)
+wrapper卖出/买入/透传触发+不下单不触发;portfolio 459绿+api 170绿

[vps]
2026-08-25 19:47:13 +08:00
claude_dev f438c6cd65 perf(factor): metrics热路径numpy/scipy化——rank_corr/quantile_mask/decile的pandas rank改scipy rankdata(axis=1)C实现,宽矩阵压力下分钟级→秒级;接口与数值不变,测试原样全绿+速度护栏 [vps] 2026-08-25 10:29:43 +08:00
claude_dev a8f9199dab fix(factor): mount_alpha101 docstring 100→82(实测数)+_quantile_mask 未用形参收敛为top布尔 [vps] 2026-08-25 06:53:05 +08:00
claude_dev 23d7b6e02e fix(web): 详情页换手率改读metrics顶层+批量页删失实'剔ST'文案(实现不做ST过滤,无point-in-time名称史) [nas] 2026-08-25 06:53:04 +08:00
claude_dev 5fdcd8b5d7 perf(factor): 原生polars快速算子库覆盖vnpy慢rolling_map——ts_corr/ts_rank/ts_decay_linear/ts_quantile/ts_cov/ts_slope族共8算子shift展开或rolling原生,EXPRESSION_FUNCTIONS官方扩展点注册,等价性测试精确对齐原版;ts_argmax/argmin并列场景原生恒等式不成立留原版(25因子另批处理) [vps]
CI/CD / test (push) Successful in 8s
CI/CD / nas-deploy (push) Successful in 37s
CI/CD / nas-verify (push) Successful in 12s
2026-08-25 06:29:31 +08:00
claude_dev 0b3f6bb87c perf(factor): 逐因子join砍除——pivot全表后pandas切窗口+预热cutoff广播掩码置NaN(NAS实测94.5万行join+pivot 11.4s/因子是全量8h瓶颈;NaN语义与join剔除等价,指标层自动剔缺失) [vps]
CI/CD / test (push) Successful in 8s
CI/CD / nas-deploy (push) Successful in 34s
CI/CD / nas-verify (push) Successful in 5s
2026-08-25 01:43:52 +08:00
claude_dev c09cdee519 perf(factor): 股票池枚举改递归CTE松散索引扫(573s→70s)+数据查询逐symbol四列全等前缀(补exchange直落日线子树,免扫15m/5m条目)——NAS 2核26G库实测两处慢点根治 [vps] 2026-08-25 01:33:04 +08:00
claude_dev 0d038548ae perf(factor): 股票池枚举改无过滤DISTINCT覆盖索引扫——带WHERE(interval/datetime/LIKE)版本在26G库退化全表扫NAS实测>5min不归,前缀python侧滤,周期/窗口由数据查询天然过滤(语义不变,15m-only股锁定测试) [vps] 2026-08-25 01:01:48 +08:00
claude_dev cdaa88fea1 feat(web): 批量评估页——股票池/因子集/时间窗三步提交进任务中心;CI门禁加tests/factor [nas]
CI/CD / test (push) Successful in 12s
CI/CD / nas-deploy (push) Successful in 34s
CI/CD / nas-verify (push) Successful in 11s
2026-08-25 00:42:57 +08:00
claude_dev 77e12f4fe0 feat(web): 因子详情页——表达式卡+6格指标+月度/累计IC双系列图+十分组柱状(echarts终端暗色)+排行榜页色值清理走token [nas] 2026-08-25 00:40:26 +08:00