知识
← 返回

金融专家团队模拟交易方案

2026-05-17 金融
#金融 #githubfetch

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

九、风险和限制

  1. 数据时延:sina/tencent 实时行情有 3-5 秒延迟,对高频策略不够。不过我们的策略都是日线级别的(MACD 金叉、均线排列),3-5 秒完全不是问题。
  2. 非交易日:脚本必须在 get_trade_calendar 判断为非交易日时自动静默,不要浪费资源。
  3. 信号滞后:技术指标是滞后指标——金叉出现时往往已经涨了一段了。这是所有量化系统都面临的问题,回测阶段应该能发现。
  4. 模拟偏差:模拟交易以收盘价或触发时刻的实时价为成交价,实际交易会有滑点。保守估计在回测结果上打 0.5%-1% 的折损比较合理。
  5. 过拟合:回测表现好不代表实盘好。避免在回测上反复调参数追求最好看的数字。

十、跟你确认的问题

  1. 模拟初始资金定多少? 建议 10 万
  2. 盯盘范围是哪些股? 建议先选 3-5 只你常关注的(东阿阿胶、茅台等)+ 大盘 ETF
  3. 触发后要不要你先确认再分析? 选项 A:每次都问你 → 选项 B:低置信度跳过,高置信度自动分析
  4. 模拟交易的仓位规则: 每次买入仓位上限 20%?25%?
  5. 止损规则: 每只模拟持仓亏损超过多少自动卖出?建议 8-10%