Files
sanguo_vnpy_v2/tests
claude_dev 841ea1536e
CI/CD / test (push) Successful in 7s
CI/CD / nas-deploy (push) Successful in 23s
CI/CD / nas-verify (push) Successful in 11s
fix(live): 三策略定寸现金→总资产口径(卖后买现金窗口A修法,回原JQ语义) [vps]
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
..