Daily Notes — 2026-03-31¶
今日主要工作¶
1. clawtrading repo git 问题处理¶
- clawtrading/ 目录被 .gitignore 忽略,无法直接 commit
- 原因:clawtrading 本身是独立 git repo,不在 workspace 根 repo 的追踪范围内
- 已提交:增量 rehab→QFQ 逻辑、5委员 autovote 脚本、acc_id 修复
2. US SIM acc_id 错误(13470017 → 13470016)¶
- 根因:最初 commit 5331a61 写死默认值时打错(多了一位数)
ACC_ID_US_SIM改为必须从FUTU_US_SIM_ACC_ID环境变量读取FutuUSBroker.get_acc_id()已支持从secrets.local.json读取futu_us_sim_acc_id- 已写入
secrets.local.json:{"futu_us_sim_acc_id": "13470016"} - 后续代码不能 hardcode fallback 值
3. 5 委员自动投票¶
run_committee_autovote.py已删除(功能合并到run_committee.py --autovote)- cron
ct-investment-committee-uspayload 改为:run_committee.py --market US --autovote --force-trading-day - 不自动下单,只投票 + 生成 verdict JSON + Discord 摘要
4. 美股投委会 cron 触发(进行中)¶
- Job: ct-investment-committee-us, ID: a5783578-9622-4792-a601-cd6e3754f6e0
- Schedule: 21:10 CST (工作日)
- 今天 21:10 手动触发了两次(一次 acc_id 错误,一次成功后)
5. US 数据更新 cron 清理¶
- 删除了 3 个 legacy disabled jobs:
- ct-data-cache-am (0d45b332)
- ct-data-cache-pm-legacy-disabled (063c4045)
- ct-data-cache-pm (db584740)
- 保留活跃 jobs:
- ct-weekly-data-refresh
- ct-daily-data-hk (17:30 CST)
- ct-daily-data-us (05:30 CST) — 今天超时失败,已重新触发
6. MU 持仓决策¶
- 177 股,成本 415.11,现价 321.80(-22.48%)
- 持仓保留,暂不操作
待跟进¶
- US 数据更新(ct-daily-data-us)今天 05:30 超时失败,已重新触发,结果待 Discord
- clawtrading 根目录 .gitignore 仍然忽略 clawtrading/ 子目录(不影响运作,但注意)
- alpha158 reference 清理(之前 TODO,未完成)
- daily_data_update.sh --skip-up-to-date 逻辑未手动验证
关键文件改动¶
src/rebalance_v2_broker_futu.py: ACC_ID_US_SIM 移除 hardcoded fallbacksrc/ohlcv_cache_build.py: rehab 变化强制重建 QFQ(增量逻辑)scripts/daily_data_update.sh: --skip-up-to-date 参数config/secrets.local.json: 新增 futu_us_sim_acc_idconfig/openclaw_cron_jobs.export.json: 未同步(实际 jobs 在 ~/.openclaw/cron/jobs.json)
晚间更新(22:00-23:17)¶
投委会全自动化完成¶
- US cron 改为全自动:
--autovote --apply --auto-execute --lean - HK 已经是全自动模式
- 数据更新统一盘前:HK 09:00 / US 21:00
- 投委会统一盘前+10min:HK 09:10 / US 21:10
--lean 模式¶
- 跳过 reflection / OHLCV 缓存更新 / 行业研究
- 保留:VIX 风控 → plan 生成 → 持仓 → 技术面 → context → 5 委员投票
--reuse-context:如果当日 context 已存在则跳过生成
多模型路由¶
llm_client.py新增_PROVIDER_ROUTES:按 model name 前缀自动选 providergpt-*→ OpenAI APIMiniMax-*→ MiniMax API- 委员模型分配:Peter/Munger=gpt-5.4,Annie/Grace/Dalio=MiniMax-M2.7
- 以后加 Anthropic 只需加一条路由
Bug fixes¶
<think>标签 strip(MiniMax reasoning output 导致 JSON parse 失败)ACC_ID_US_SIM改为 lazy 读取(不在模块顶层 crash)- MiniMax model name 去掉
minimax/前缀 - LLM autovote
_call_member加重试 + stub fallback
清理¶
- 删除 3 个 legacy disabled cron jobs
run_committee_autovote.py已删(功能合并到--autovote)- cron export 文件已同步 push
代码重构(00:12-00:46)¶
execution_engine.py 重构¶
目标: 拆分 execute_plan() 740 行上帝函数
已完成:
1. 提取模块级 helpers(减少 ~80 行):
- l2_gate_check(code, side, cfg, market) — L2 门控检查
- get_counter_price(code, side, qty) — 订单簿对手价
- safe_reprice(code, side, est_price, new_price) — 改价安全检查
- 提取 SELL STAGE 函数(减少 ~130 行):
_execute_sell_stage(trd, env, acc_id, sell_results, current_positions, cfg, market)→float-
包含: 下单 + 轮询 + 自动改价 + 取消未成交
-
提取 BUY STAGE 函数(减少 ~170 行):
_execute_buy_stage(trd, env, acc_id, buy_results, buys, plan_buy_total, lot_map, lot_default, cfg, market)→bool- 包含: downsize + retries + 下单 + 轮询 + 自动改价 + 取消未成交
验证: plan 生成输出完全一致(只有时间戳不同)
结果:
- 文件: 763 行 → 802 行(净增 5%)
- execute_plan(): 740 行 → ~190 行(-75%)
ml_cross_sectional.py 重构¶
目标: 拆分 rolling_ml_scores() 372 行
已完成:
1. _try_load_precomputed_ml_scores() — 快速加载预计算分数
2. _prepare_ml_features() — 特征选择 + 剪枝 + NaN 处理
3. _compute_ml_sample_weights() — 样本权重(衰减 + regime 匹配)
4. _update_adaptive_ml_weight() — OOS IC 追踪 + 自适应权重
结果:
- 文件: 1631 行 → 1717 行(净增 5%)
- rolling_ml_scores(): 372 行 → ~245 行(-34%)
其他重构¶
- secrets/config 加载统一(3 个文件改用
config_loader.load_secrets())
收益¶
- 可读性大幅提升
- 每个函数单一职责
- 更容易单元测试
- bug 定位更快
Commits¶
1388281: unify secrets loading via config_loader18f943c: extract nested helpers to module level (execution_engine)9fdf4fe: extract _execute_sell_stage functionf0139b9: extract _execute_buy_stage function5f7bd86: extract helpers from rolling_ml_scores (first pass)1ae7bcf: extract _prepare_ml_features helper