OPENCLAW_BACKTRADER_WORKFLOW.md 5.9 KB

OpenClaw 跑 Backtrader 标准流程

目标:用 OpenClaw + Backtrader 稳定地做指数策略研究,避免“任务做完了但没人知道”“结果散落一地”“Codex 和回测执行混在一起”的问题。


1. 角色分工

A. Codex / 编码代理负责什么

只负责:

  • 新增/修改 Backtrader 策略
  • 改实验脚本
  • 加参数扫描逻辑
  • 改 summary / report 输出
  • 重构 backtrader-lab/ 内的代码

B. OpenClaw exec/process 负责什么

只负责:

  • 真正执行 Backtrader 回测
  • 跑参数扫描
  • 管后台 session
  • 读取日志
  • 确认是否完成
  • 主动反馈结果

C. 不要混用

原则:

  • Codex 写代码
  • Backtrader 脚本自己跑

不要把“让 Codex 干活”和“让 Codex 顺便当回测引擎”混成一件事。


2. 工作目录约束

所有 Backtrader 工作都限制在:

/home/erwin/.openclaw/workspace/cyb50-quant/backtrader-lab

规则:

  • 不碰 MEMORY.md / SOUL.md / AGENTS.md / USER.md
  • 不跑去 index-rotation/ 乱改
  • 量化实验只在 backtrader-lab/ 收口

3. 推荐目录结构

backtrader-lab/
├── chinext50.csv
├── chinext50_experiments.py
├── chinext50_experiment_summary.md
├── chinext50_dualthrust_optimization.md
├── results/
│   ├── latest.json
│   ├── latest.log
│   └── runs/
├── scripts/
│   ├── run_experiments.sh
│   ├── run_dualthrust_opt.sh
│   └── notify_summary.sh
└── OPENCLAW_BACKTRADER_WORKFLOW.md

最低要求:

  • 回测脚本
  • markdown summary
  • json 结果文件
  • log 文件

4. 标准执行方式

4.1 单次实验

直接执行 Backtrader 脚本:

cd /home/erwin/.openclaw/workspace/cyb50-quant/backtrader-lab
python3 chinext50_experiments.py

4.2 参数优化

cd /home/erwin/.openclaw/workspace/cyb50-quant/backtrader-lab
python3 chinext50_experiments.py --optimize-dualthrust

4.3 长任务后台运行

让 OpenClaw 用 exec + process 托管:

  • exec(background=true, pty=false/true 视需要) 启动
  • process poll/log 只做状态确认
  • 不搞 sleep loop

5. 输出产物规范

每次回测至少产出 3 类东西:

A. summary.md

给人看的结论:

  • 跑了哪些策略
  • 参数是什么
  • 年化 / 夏普 / 最大回撤 / 胜率
  • 推荐继续哪条

B. results.json

给程序看的结构化结果:

  • strategy name
  • config
  • metrics
  • startedAt
  • finishedAt
  • data range
  • command

C. run.log

给排错用:

  • stdout
  • stderr
  • traceback
  • 执行时长

规则:

  • 有 markdown,方便我直接汇报给用户
  • 有 json,方便后续自动比对/排序
  • 有 log,方便排错

6. 反馈优先协议(最重要)

后台任务默认执行这套:

开始

必须反馈:

  • 跑什么
  • 在哪跑
  • session 是什么
  • 大概多久

中间

出现以下情况必须主动反馈:

  • 第一批结果出来
  • 发现明显候选最优
  • 某个方向明显不行
  • 卡住 / 报错

结束

必须主动反馈:

  • 最优策略
  • 关键指标
  • 结果文件位置
  • 下一步建议

禁止

  • 不允许任务做完后沉默
  • 不允许等用户追问才汇报

7. 通知机制:不要单点依赖 system event

因为 openclaw system event 可能出现 websocket 1006 abnormal closure,所以不能只靠它。

三层通知方案

第一层:快路径

任务结束时尝试:

openclaw system event --text "Done: backtrader experiment finished" --mode now

第二层:状态落盘

每个任务写状态文件:

backtrader-lab/.task-watch/<task-id>.json

至少包含:

  • task id
  • session id
  • command
  • status: running / done / failed
  • summary path
  • updatedAt
  • announced: true/false

第三层:watchdog 兜底

如果:

  • 任务已完成
  • announced=false

则父侧必须:

  • 读取 summary
  • 主动发结果
  • 把 announced 标记为 true

结论

  • system event 是快路径
  • watchdog 才是兜底

8. OpenClaw 里更适合的使用姿势

情况 A:新增策略

用 Codex:

  • 写新策略类
  • chinext50_experiments.py
  • 加参数扫描

情况 B:跑实验

不用 Codex 代跑,直接:

  • python3 chinext50_experiments.py
  • python3 chinext50_experiments.py --optimize-dualthrust

情况 C:定时任务

cron isolated

  • 晚上自动跑回测
  • 跑完自动写 summary
  • 再显式投递到 Feishu 当前聊天

投递必须显式指定:

  • channel=feishu
  • to=ou_3923ae1d25c5056a9844718baf153e36
  • accountId=main

不要再用 last


9. 推荐的脚本化方式

建议补两个脚本。

9.1 scripts/run_experiments.sh

职责:

  • 运行基础实验
  • stdout/stderr 写入 results/latest.log
  • 结果写入 chinext50_experiment_summary.md
  • 同时生成 results/latest.json

9.2 scripts/run_dualthrust_opt.sh

职责:

  • 跑 DualThrust 参数搜索
  • chinext50_dualthrust_optimization.md
  • 生成 json 结果
  • 更新 task status

10. 推荐的节奏

日常研究

  • 白天:问答式、小范围单次回测
  • 晚上:批量参数扫描
  • 周末:统一做 shortlist 排名

研究顺序

  1. 先广撒网找候选
  2. 再缩到 Top 2~3
  3. 再做参数优化
  4. 再做样本外验证
  5. 最后才考虑实盘映射

11. 当前项目下的建议落地

基于当前 backtrader-lab/,建议后续这样走:

主线候选

  • DualThrustRegimeStrategy
  • DonchianRegimeStrategy
  • MomentumVolTargetStrategy

当前 DualThrust 优化候选

综合最强

  • range_period=20, k1=0.4, k2=0.4, regime=120

更稳版本

  • range_period=30, k1=0.3, k2=0.3, regime=120

下一步

  • 做样本内/样本外拆分
  • 做手续费敏感性
  • 做不同时间段稳定性验证

12. 一句话版本

Codex 写 Backtrader,OpenClaw exec 跑 Backtrader,cron 负责定时,watchdog 负责不漏反馈。