跳转至

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-us payload 改为: 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 fallback
  • src/ohlcv_cache_build.py: rehab 变化强制重建 QFQ(增量逻辑)
  • scripts/daily_data_update.sh: --skip-up-to-date 参数
  • config/secrets.local.json: 新增 futu_us_sim_acc_id
  • config/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 前缀自动选 provider
  • gpt-* → OpenAI API
  • MiniMax-* → 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) — 改价安全检查

  1. 提取 SELL STAGE 函数(减少 ~130 行):
  2. _execute_sell_stage(trd, env, acc_id, sell_results, current_positions, cfg, market)float
  3. 包含: 下单 + 轮询 + 自动改价 + 取消未成交

  4. 提取 BUY STAGE 函数(减少 ~170 行):

  5. _execute_buy_stage(trd, env, acc_id, buy_results, buys, plan_buy_total, lot_map, lot_default, cfg, market)bool
  6. 包含: 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_loader
  • 18f943c: extract nested helpers to module level (execution_engine)
  • 9fdf4fe: extract _execute_sell_stage function
  • f0139b9: extract _execute_buy_stage function
  • 5f7bd86: extract helpers from rolling_ml_scores (first pass)
  • 1ae7bcf: extract _prepare_ml_features helper