基于 Agent 的 ETF 轮动系统
项目概述
| 项目 | 内容 |
|---|---|
| 项目名称 | 基于 Agent 的全自动 ETF 大类资产轮动系统 |
| 项目周期 | 2026年7月 — 至今(持续迭代) |
| 技术栈 | Python, Hermes Agent, Tushare Pro, Jinja2, Git |
| 我的角色 | 独立架构设计与开发 |
| 项目状态 | 已上线运行,每日自动执行 |
1. 项目背景
传统 ETF 投资策略存在两类典型缺陷:
- 纯主观决策型:依赖个人经验和盘感,没有系统化的判断框架,决策不可追溯、不可复盘
- 纯量化模型型:历史回测表现优异,但市场环境发生结构性变化时容易失效,缺乏识别"环境已变"的能力
核心诉求
构建一套 结合 Agent 推理能力与工程化执行 的自动化投资系统,将人的角色从"盘中决策者"转变为"策略迭代者"。核心差异在于:
- Agent 盘后做判断,盘中不参与实时决策
- 每次判断经过完整的多步推理流程,决策可追溯、可复盘
- 风控作为独立模块,优先级高于所有调仓判断
2. 系统架构设计
2.1 闭环流程
系统由三条链式衔接的定时任务驱动每日自动执行:
18:10 执行任务(按昨日计划模拟成交)
↓
18:15 复盘任务(校验执行正确性 + 体系健康度)
↓
18:20 计划生成任务(完整五步判断 → 输出下一交易日计划)
↓
次日09:15 推送任务(计划推送到飞书)
设计原则:计划、执行、复盘三段分离,职责边界清晰。Agent 仅在盘后执行判断。
2.2 候选池设计
系统锁定 6 只大类资产 ETF,覆盖权益、债券、商品、现金四大类,不做行业级轮动:
| 代码 | 名称 | 资产类别 | 场景定位 |
|---|---|---|---|
| 510300 | 沪深300ETF | A股大盘 | A股复苏、风险偏好上升 |
| 588000 | 科创50ETF | 科技成长 | 科创行情主导 |
| 511260 | 10年国债ETF | 利率债 | 避险、利率下行 |
| 518880 | 黄金ETF | 商品 | 通胀、美元走弱、地缘风险 |
| 513500 | 标普500ETF | 海外权益 | A股不明、美股趋势向好 |
| 511990 | 货币ETF | 现金 | 方向极度不明,持币观望 |
关键设计决策: 1. 现金是正式候选——与其他标的地位平等,不因"必须持有资产"而降低判断标准 2. 不做行业ETF轮动——行业轮动频率高、波动大、判断维度多,不适合 Agent 做稳定推理 3. 切换门槛明确分级——轻微占优/明显占优/压倒性占优,避免频繁切换
2.3 Agent 判断框架(五步推理)
每一步都按固定顺序执行,不跳过、不跳跃:
| 步骤 | 模块 | 核心逻辑 |
|---|---|---|
| Step 1 | 宏观环境评估 | 5维度(增长/风险偏好/流动性/避险/外部)各输出 2-3 级判断 |
| Step 2 | 候选统一排名 | 6只 ETF 在同一框架下横向比较,输出完整排名表 |
| Step 3 | 继续持有默认 | 当前持仓逻辑成立则不切换,不因"略好"就换 |
| Step 4 | 风控闸门 | 正常/审慎/冻结三级风控,优先级高于调仓判断 |
| Step 5 | 唯一结论输出 | 仅允许 3 种结论:继续持有 / 切换 / 转现金 |
输出规则:结论必须唯一,不允许"二选一""盘中再看""视情况而定"等模糊输出。
3. 技术实现
3.1 数据层
- 数据源:Tushare Pro(指数行情、ETF 日线、宏观指标、Shibor)
- 缓存层:自建
ts_cache.py,以天为单位过期,避免同日内重复请求 - 交易日历:
is_trading_day.py基于交易所trade_cal判断,自动处理长假、调休等复杂情况
3.2 调度层
基于 Hermes Agent 框架,每条 cronjob 为自包含的 prompt,指定 schedule、skills、model、workdir、deliver 目标:
# 核心调度链(3条 cronjob)
Job 1 - 18:10: 回放执行
Job 2 - 18:15: 复盘校验
Job 3 - 18:20: 计划生成(使用 stronger 模型)
# 辅助任务
09:15 - 全体系计划推送
15:00 - 收盘提醒
23:55 - 每日摘要聚合
链式衔接通过 context_from 机制保证顺序依赖:下游始终等待上游完成。
3.3 知识管理层
每次运行输出结构化 Markdown 文件(含 YAML Frontmatter),自动同步至:
- 知识图谱(KG)——建立文档之间的关联关系
- 云端 RAG(百炼)——支持历史判断检索回溯
- Git 版本管理——全版本可追溯
4. 技术难点与解决方案
| 问题 | 影响 | 解决方案 |
|---|---|---|
| 计划链条断裂 | 复盘要求建仓但计划文件缺失 | 统一监控目录 + 23:55 一致性校验 + 异常告警推送 |
| 分钟级数据缺失 | Tushare 偶发数据断点 | 记录异常,跳过执行。原则:宁可漏执行,不造假数据 |
| Agent 数据幻觉 | 编造或夸大数据表述 | prompt 强制约束:所有数据须经 API 查询核实,时间窗口精确到日期区间 |
| 交易日历复杂性 | 调休、长假等特殊情况 | 运行时查询交易所 trade_cal,不依赖硬编码判断 |
5. 运行成果
实际运行案例(2026-07-13)
市场背景:上证失守 4000 点,沪深300 两周跌 4.3%,科创50 两日振幅 16%
Agent 判定:
增长预期 → 模糊 风险偏好 → 下降分化 流动性 → 中性
避险 → 升温 外部扰动 → 存在但次要
结论:环境高度模糊,不应做方向性押注
最终决策:6 只候选标的全量排序后,认定无一显著优于现金 → 继续持有货币ETF,持币观望
该决策并非"未作判断"——而是经过完整五步推理框架得出的系统级结论,每个环节均可追溯可复盘。
6. 后续规划
| 周期 | 方向 | 目标 |
|---|---|---|
| 短期 | 量化辅助指标 | 引入动量、波动率、趋势强度等量化数据作为 Agent 判断实证 |
| 规则库反哺 | 自动识别重复判断偏差,提示规则收紧建议 | |
| 中期 | 多资产分仓 | 从单一持有扩展为动态比例配置 |
| 条件触发执行 | 支持"跌破 MA10 则次日转现金"等条件规则 | |
| 长期 | 跨体系联动 | ETF 轮动与回调低吸体系共享风险预算与资金池 |
7. 个人收获
- 独立完成从架构设计、编码实现到上线运维的全流程,工程化落地能力得到验证
- 深度实践了 Agent + 定时任务 + 数据管道 + 知识库的组合工程模式
- 系统已在真实市场环境中每日运行,积累了大量可追溯的决策数据和复盘经验