金融专家团队模拟交易方案
title: 金融专家团队自动化模拟交易方案
date: 2026-05-17T18:30:00+08:00
lastmod: 2026-05-17T18:30:00+08:00
金融专家团队自动化模拟交易方案
基于现状:已有 4 个金融专家(调研/策略/风控/短线)+ 真实数据接口(sina/tencent/akshare)+ 持仓管理(portfolio.json)+ SiYuan 落档
一、核心思路
不重写,只串联。
专家团队现有的能力完全够用——策略专家会算 MACD/RSI/布林带,风控管家管仓位,调研专家找新闻。缺的只是一个「调度层」,让这些专家从被动问答变成主动运转的模拟交易系统。
┌─────────────────────────────────────────────────────────────┐
│ 调度引擎 │
│ (监控脚本 + cron 定时任务) │
│ Token 消耗 ≈ 0 │
└──────────────┬──────────────┬──────────────┬──────────────┘
│ │ │
┌─────────▼──┐ ┌──────▼──────┐ ┌───▼─────────┐
│ 回测引擎 │ │ 实时盯盘脚本 │ │ 绩效统计 │
│ (一次性) │ │ (cron 每分钟) │ │ (cron 每日) │
└─────────────┘ └──────┬──────┘ └─────────────┘
│ 命中条件时唤醒
┌────────▼────────┐
│ 策略专家(LLM) │
│ Token ~2000/次 │
│(仅条件被触发时) │
└────────┬────────┘
│ 建议 → 登记
┌────────▼────────┐
│ 风控管家(LLM) │
│ 检查风险、登记 │
│ 模拟持仓 │
└─────────────────┘
Token 成本: 盯盘脚本每分钟跑一次,零 LLM 调用。只有「策略条件被触发」时才调一次策略专家(约 2000 token/次)。如果一天触发 3-5 次,日 token 成本约 $0.05-0.10。
二、回测引擎(一次性搭建)
在实盘模拟跑之前,先用历史数据回滚验证专家策略的胜率。
2.1 怎么回测
策略专家的 prompt 里规定了技术分析流程:取 60-120 天历史 → 算 MACD/RSI/布林带/均线 → 给出方向判断和置信度。
回测就复现这个过程——但区别是:
不需要 LLM 参与。 策略专家做判断的核心逻辑其实是工具函数算出来的技术指标。一个 Python 脚本就能完成同样的事:
- 取过去两年的日线数据
- 在每个交易日,回头看前 120 天数据
- 算技术指标(MACD 金叉/死叉、RSI 超买超卖、均线排列、布林带位置)
- 根据策略专家 prompt 里的置信度规则(≥3 个同向指标→高置信度)算出「建议」
- 对比 5 天/10 天/20 天后实际涨跌
- 统计胜率、盈亏比、最大回撤
2.2 回测对象
选 3-5 只你常关注的股(东阿阿胶、茅台等),以及大盘 ETF(510300)。
2.3 回测产出
一份报告,包含:
- 每个策略信号的胜率(金叉买入 vs 死叉卖出 vs RSI 超卖买入)
- 高/中/低置信度判断的实际准确率——这个最有用,可以验证专家是不是真的有判断力
- 最佳参数:均线取多少天?RSI 阈值 70/30 还是 80/20?
2.4 存放位置
作为 Python 脚本放在 /opt/agent/financial-team/tools/backtest.py,单独运行,不依赖 LLM。
三、实时盯盘脚本(核心)
这是一个零 LLM 的轻量 Python 脚本,每分钟跑一轮,判断策略条件是否被触发。
3.1 触发条件设计
基于策略专家 prompt 里的技术指标体系,定义可量化的策略条件:
条件类型 A:技术信号
- MACD 金叉/死叉 — 计算当前 DIFF 和 DEA 的交叉状态,相比上一个交易日是否变化
- RSI 进入超买(>70)或超卖(<30)区间
- 价格突破布林带上轨/跌破下轨
- 均线多头排列/空头排列变化(MA5 > MA20 > MA60 或相反)
- 成交量突然放量(>20 日均量的 1.5 倍)
条件类型 B:价格触发
- 价格触及某个水平(支撑位/压力位)
- 单日涨跌幅 > 预设阈值(如涨超 5% 或跌超 4%)
条件类型 C:组合扫描(每日一次)
- 对持仓股全量扫描技术面变化
- 对比当前组合与 risk_limits 的偏离度
3.2 脚本流程
每分钟循环:
1. 读取策略配置(哪些股票、哪些条件)
2. 并行请求 sina spot 获取实时价量(2-3 个并发)
3. 对每只股票判断:
a. 是否触发价格类条件 → 触发 → 记录 trigger 事件
b. 每 N 分钟(可配置):拉一次历史数据,计算技术指标
c. 指标是否触发策略条件 → 触发 → 记录 trigger 事件
4. 如果有 trigger:
- 写入 trigger 队列文件(`.triggers/YYYMMDD.jsonl`)
- 触发策略专家分析(见第四节)
5. 如果无 trigger:silent 循环(写一次 heartbeat,不输出任何东西)
每日收盘后(一次):
1. 对持仓股做全量技术面扫描
2. 生成每日行情简报
3.3 避免重复触发
同一个信号在 24 小时内只触发一次。比如今天 MACD 金叉了,触发一次分析后,24 小时内不再重复提醒同一只股票的同类型信号。
3.4 存放位置
/opt/agent/financial-team/tools/monitor.py,通过 cron 每分钟调动一次。
3.5 OpenClaw cron 配置
{
"cron": [
{
"name": "金融监控-每日收盘扫描",
"schedule": { "kind": "cron", "expr": "30 15 * * 1-5", "tz": "Asia/Shanghai" },
"payload": {
"kind": "systemEvent",
"text": "每日收盘扫描:运行 monitor.py --daily-scan,检查持仓组合策略信号"
}
}
]
}
每分钟触发不适合用 OpenClaw cron(会产生大量 session 事件),应该用系统级别的 crontab 直接跑 Python 脚本,只有触发条件时才通知我。
# crontab
* * * * 1-5 /opt/agent/financial-team/tools/monitor.py --tick
30 15 * * 1-5 /opt/agent/financial-team/tools/monitor.py --daily-scan
四、专家介入层(LLM 触发)
当盯盘脚本检测到策略条件被触发时,才调用 LLM。
4.1 触发流程
盯盘脚本检测到条件命中
│
▼
写入 .triggers/ 队列(含:股票代码、触发类型、当前技术指标快照、价格数据)
│
▼
发送通知到 Matrix 房间:
「⚠️ 茅台触发 MACD 金叉信号,要分析一下吗?」
│
▼
你回复「分析」或「看看」
│
▼
策略专家以当前触发数据为输入:
- 不用重新取数据(monitor 已经提供了技术指标快照)
- 重点做带带逻辑判断和长篇分析
- 输出结构化报告
│
▼
报告推送到你的 Matrix 并保存到 SiYuan
4.2 可选的「全自动模式」
如果你不想每次都被问,可以设置全自动模式——低风险信号(如 RSI 中性区间、均线缠绕)自动跳过;高置信度信号(如 MACD 金叉 + 放量 + 均线多头排列)自动调策略专家分析,结果自动推送。
4.3 调用哪个专家
| 触发类型 | 优先调用的专家 | 说明 |
|---|---|---|
| 技术信号(金叉/死叉/超买超卖/突破) | 策略专家 | 做完整技术面分析+判断 |
| 价格大幅异动 | 调研专家 + 策略专家 | 先调研找原因,再做策略判断 |
| 组合扫描(集中度超限) | 风控管家 | 风险审查 |
| 板块/热点异动 | 短线猎手 | 板块分析和机会捕捉 |
| 无明显触发(每日复盘) | 策略专家 | 批量扫描持仓,出组合健康报告 |
五、模拟交易系统
5.1 模拟持仓 vs 真实持仓
新建一个模拟持仓文件 shared/portfolio_sim.json,结构跟现有的 portfolio.json 完全一样,但加几个额外字段:
{
"mode": "simulation",
"start_date": "2026-05-18",
"initial_capital": 100000,
"cash": 100000,
"holdings": [],
"risk_limits": { "max_single_position_pct": 0.3, "warn_single_position_pct": 0.25 },
"transactions": [],
"last_updated": "..."
}
初始资金:10 万元(可调)。
5.2 交易规则(重要——全自动执行,你提前确认规则即可)
规则就是策略专家 prompt 里的那套,加上你的确认:
买入规则:
- 策略专家给出「买入」建议,置信度为「高」
- 风控管家检查模拟组合,确认不超风险限制
- 自动执行买入:用建议价 × 建议仓位,减少 cash,增加 holdings
- 记录交易原因:直接引用策略专家报告的关键段落
卖出规则:
- 策略专家给出「卖出」建议,置信度为「高」
- 或盯盘脚本检测到止损/止盈条件(如持仓股价格跌破 MA60 或跌破买入价的 8%)
- 自动执行卖出:全部或按建议比例
不自动执行的情况(需要你确认):
- 置信度为「中」或「低」的任何建议
- 仓位调整幅度 > 总资产的 20%
- 连续同一个方向被触发(买入信号后 3 天内又出现买入信号——避免追高)
5.3 交易计入方式
由风控管家执行 write_portfolio,但操作的是 portfolio_sim.json 而不是 portfolio.json。所有交易记录中 mode: "simulation",方便区分。
5.4 触发失败处理
- 数据源不可用 → 跳过该轮,记录到
.triggers/errors.jsonl - 专家调用超时 → 标记为「分析超时」,不执行交易
- 非交易日 → 脚本自动跳过(用
get_trade_calendar判断)
六、绩效统计
6.1 每日统计(自动,零 LLM)
每天收盘后,一个 Python 脚本读取 portfolio_sim.json + 所有交易记录 + 实时行情,计算:
- 当日模拟组合总市值
- 日收益率
- 累计收益率(vs 开始时的 10 万)
- 同期大盘(沪深 300)涨幅对比
- 持仓明细 + 每只股的浮盈/浮亏
- 最大回撤(running 计算)
6.2 每只交易的绩效归因
每笔模拟交易关闭(卖出)后,计算:
- 该笔盈亏(元/%)
- 持仓天数
- 信号来源(MACD金叉/RSI超卖/突破/新闻驱动等)
- 策略专家随附的置信度
- 实际结果 vs 当时判断(方向正确/错误)
6.3 定期报告
- 日报:推送到 Matrix,简短的三句话
- 周报:存到 SiYuan,含完整的收益曲线和交易清单
- 月报:全套归因分析——哪个专家表现最好、哪种策略信号最赚钱
6.4 存放位置
日报脚本:/opt/agent/financial-team/tools/daily_performance.py
周报/月报:通过策略专家调用 save_to_siyuan
七、需要新建的文件清单
/opt/agent/financial-team/
├── tools/
│ ├── backtest.py # 回测引擎(新)
│ ├── monitor.py # 实时盯盘脚本(新)
│ ├── performance.py # 绩效统计(新)
│ └── strategy_config.json # 策略条件配置(新)
├── shared/
│ ├── portfolio_sim.json # 模拟持仓(新)
│ ├── portfolio.json # 真实持仓(已有,不受影响)
│ └── .triggers/ # 信号队列目录(新)
│ ├── 2026-05-17.jsonl
│ └── errors.jsonl
│ users/
│ └── ywz/
│ └── portfolio.json # 已有
├── agents/ # 已有,不动
└── prompts/ # 已有,不动
不改任何现有代码。 所有新功能都是新增文件,跟现有系统并存。
八、实施步骤
| 阶段 | 工作 | 工期 | 依赖 |
|---|---|---|---|
| Phase 1 | 写回测脚本 backtest.py,对东阿阿胶/茅台/沪深 300 跑历史回测 | 1-2 天 | 无 |
| Phase 2 | 建模拟持仓 portfolio_sim.json,设初始资金 10 万 | 5 分钟 | Phase 1 |
| Phase 3 | 写盯盘脚本 monitor.py,先在非交易时段空跑验证 | 1-2 天 | Phase 1 |
| Phase 4 | 写策略条件配置 strategy_config.json,定义你关心的信号阈值 | 30 分钟 | Phase 3 |
| Phase 5 | 联调:monitor 触发 → 通知 Matrix → 手动调专家分析 → 模拟交易登记 | 半天 | Phase 3-4 |
| Phase 6 | 写绩效统计 performance.py + cron 日报 | 半天 | Phase 5 |
| Phase 7 | 实盘模拟跑(至少 1 个月),观察收益 | 持续 | Phase 6 |
| Phase 8 | 月结:出完整归因报告,决定是否优化或调参数 | Phase 7 后 | Phase 7 |
九、风险和限制
- 数据时延:sina/tencent 实时行情有 3-5 秒延迟,对高频策略不够。不过我们的策略都是日线级别的(MACD 金叉、均线排列),3-5 秒完全不是问题。
- 非交易日:脚本必须在
get_trade_calendar判断为非交易日时自动静默,不要浪费资源。 - 信号滞后:技术指标是滞后指标——金叉出现时往往已经涨了一段了。这是所有量化系统都面临的问题,回测阶段应该能发现。
- 模拟偏差:模拟交易以收盘价或触发时刻的实时价为成交价,实际交易会有滑点。保守估计在回测结果上打 0.5%-1% 的折损比较合理。
- 过拟合:回测表现好不代表实盘好。避免在回测上反复调参数追求最好看的数字。
十、跟你确认的问题
- 模拟初始资金定多少? 建议 10 万
- 盯盘范围是哪些股? 建议先选 3-5 只你常关注的(东阿阿胶、茅台等)+ 大盘 ETF
- 触发后要不要你先确认再分析? 选项 A:每次都问你 → 选项 B:低置信度跳过,高置信度自动分析
- 模拟交易的仓位规则: 每次买入仓位上限 20%?25%?
- 止损规则: 每只模拟持仓亏损超过多少自动卖出?建议 8-10%