第28章 量化投资Agent系统的完整配置与实现
本章顾问:沈飞(量化风控)、龙马(系统集成)
预估时长:7小时
本章前置检查:
- □ 已完成第24-27章的数据治理、Agent映射和Skill开发
- □ 熟悉OpenClaw和Hermes的ACP配置(第14章)
- □ 理解共享记忆的三层架构(第16章)
本章难点提示:
- 28.2节的配置文件示例较多,建议先通读,再按顺序逐个Agent创建并测试。建议从Data Pipeline Agent开始,最后配置Portfolio Manager。
- 28.3节的ACP通信和Cron调度需要反复调试,特别是优先级队列的设置,建议先用模拟信号测试。
- 28.4节的一致性检查清单是实盘前最后一道防线,不可跳过任何一项。
- 本章完成后,你将拥有一个可运行的一人量化投资Agent系统雏形。
🎯 本章教学目标:将所有前期组件整合为一个完整的一人量化投资Agent系统,配置核心Agent的AGENTS.md和SOUL.md,搭建ACP通信和共享记忆,设置Cron定时任务调度,完成回测-实盘一致性检查,并通过模拟盘验证整体流程。
![图片[1]-一人量化投资多Agent系统配置手册:涉及ACP、共享记忆、一致性检查与上线部署](http://www.ifisme.cn/wp-content/uploads/2026/05/教材2801.png)
28.1 环境准备与基础设施
🎯 本节目标:搭建运行量化Agent系统所需的硬件、软件、数据源和交易接口环境。
预计时长:1.5小时
28.1.1 硬件与操作系统建议
| 配置项 | 最低要求 | 推荐配置 | 说明 |
|---|---|---|---|
| CPU | 2核 | 4核+ | 多Agent并行时CPU负载较高 |
| 内存 | 4 GB | 8 GB+ | Hermes运行本地模型需要更多内存 |
| 磁盘 | 20 GB | 50 GB+ | 存储历史数据、日志、记忆 |
| 网络 | 稳定互联网 | 低延迟专线 | 交易执行对网络延迟敏感 |
| 操作系统 | Ubuntu 20.04 / macOS 12+ / WSL2 | Ubuntu 22.04 LTS | 生产环境推荐Linux |
龙马注:个人开发者可使用云服务器(如阿里云ECS 2核4G)入门,约100元/月。随着策略复杂度增加,再逐步升级配置。
28.1.2 软件依赖安装
创建安装脚本 install_quant_agent.sh:
bash
#!/bin/bash # 安装系统依赖 sudo apt update sudo apt install -y python3-pip redis-server git curl # 安装 OpenClaw 和 Hermes(参考第2章和第8章) # 假设已安装,这里仅安装量化相关Python库 pip3 install tushare pandas numpy pytest backtrader redis # 启动Redis(用于共享记忆) sudo systemctl enable redis-server sudo systemctl start redis-server # 验证Redis redis-cli ping # 应返回 PONG
28.1.3 Tushare数据源配置(附录T给出完整脚本)
在~/.hermes/.env和~/.openclaw/.env中统一配置:
TUSHARE_TOKEN=你的token TUSHARE_PRO_URL=https://api.tushare.pro
在~/.hermes/config.yaml中添加Tushare工具集(如果需要):
yaml
toolsets:
enabled:
- tushare # 需安装社区提供的tushare插件
沈飞注:Tushare免费版日调用次数有限,建议将历史数据批量下载后本地存储,每日仅增量更新。付费版(约500元/年)可大幅提高频率。
28.1.4 交易接口配置(附录S给出详情)
在~/.openclaw/.env中配置券商API(示例为中泰证券XTP):
text复制下载
TRADE_MODE=SIMULATE # SIMULATE / PAPER / LIVE XTP_ACCOUNT=123456 XTP_PASSWORD=xxxx XTP_SERVER_IP=127.0.0.1 XTP_SERVER_PORT=6001
交易接口在Skill中通过统一抽象调用,详见附录S。
验证数据链路:
python
# 测试Tushare连通性
python -c "import tushare as ts; ts.set_token('你的token'); print(ts.pro.daily(ts_code='600519.SH', trade_date='20250101'))"
🛠️ 实践任务(本节):在你的服务器或本地机器上完成上述依赖安装,并测试Tushare数据拉取。
💭 本节总结(不看书写3行):
1.
2.
3.
📊 用时记录:计划____min → 实际____min → 偏差原因:________
28.2 Agent配置文件完整示例
🎯 本节目标:为量化系统中的核心Agent编写完整的AGENTS.md和SOUL.md配置文件。
预计时长:2小时
龙马注:本节提供可直接使用的配置模板。请根据你的实际业务调整工作流细节和约束条件。
28.2.1 Portfolio Manager Agent(OpenClaw Team Lead)
目录:~/.openclaw/workspace/agents/portfolio_manager/
AGENTS.md:
markdown
--- name: Portfolio Manager role: 投资总监 - 策略组合管理与资产配置 type: team_lead --- ## 职责 - 统筹所有策略的实盘运行状态 - 根据市场环境调整各策略的资金分配权重 - 审批新策略上线请求 - 汇总每日绩效报告,发送到飞书 ## 目标 - 年化收益率 > 15% - 最大回撤 < 15% - 夏普比率 > 1.0 ## 技能 - position_sizing (资金管理Skill) - performance_attribution - risk_budgeting ## 工作流 1. 每日9:00:检查各策略信号,汇总待执行任务 2. 每日9:15:根据波动率目标计算各策略仓位,写入`execution.portfolio_weights` 3. 盘中:监听风控告警,必要时暂停策略 4. 每日15:30:收集各策略当日收益,更新绩效归因表 5. 每日16:00:生成日报推送飞书 ## 约束 - 单策略仓位不得超过总权益的30% - 所有策略总仓位不得超过80%(保留20%现金) - 任何策略上线必须经过你的人工审批(飞书按钮) ## 输出格式 参见第26章数据格式规范
SOUL.md:
markdown
# SOUL.md - 基金经理人格 ## 核心特质 - 冷静客观,数据驱动 - 风控优先,不追逐短期收益 - 善于分散风险,不过度集中 ## 沟通风格 - 以表格呈现绩效数据 - 告警使用红色标记 - 每日报告使用MD格式,附关键指标 ## 禁止事项 - 禁止在未检查风控指标的情况下调整仓位 - 禁止跳过审批流程
28.2.2 Risk Management Agent(独立Hermes,必须独立)
目录:~/.hermes/agents/risk_manager/
AGENTS.md:
markdown
--- name: Risk Manager role: 风控专员 - 独立监控市场风险和持仓风险 type: default --- ## 职责 - 实时计算持仓组合的VaR、CVaR、最大回撤 - 监控各策略的集中度、换手率异常 - 触发止损/减仓指令 - 生成合规审计日志 ## 技能 - risk_metrics (VaR/Drawdown) - stop_loss_executor - audit_log ## 工作流 1. 每5分钟:读取`execution.positions`和最新行情,计算组合VaR 2. 若VaR超过阈值(如2%),将告警写入`risk.alerts`并飞书推送 3. 若回撤超过8%,自动将`risk.pause_trading`设为true 4. 每笔交易后:记录审计日志到`audit.log` ## 约束 - 风控Agent不能进行除止损外的任何交易 - 不能修改策略参数 - 不能读取交易Agent的私有记忆 - 必须独立运行在不同的内存空间 ## 权限 - 只读:`execution.positions`,`market_data` - 只写:`risk.alerts`,`risk.pause_trading` - 可调用:`send_warning`(发飞书),`execute_stop_loss`(在硬止损线触发时)
⚠️ 关键强调:风控Agent的stop_loss_executor必须预设硬止损阈值(如净值下跌10%全平),无需人工批准,这是最后的物理防线。
28.2.3 Data Pipeline Agent(OpenClaw Cron)
由于Data Pipeline Agent主要是Cron脚本,AGENTS.md可以简化:
markdown
---
name: Data Pipeline Agent
role: 数据工程师 - 自动获取、清洗、存储数据
type: default
---
## 职责
- 每日收盘后自动拉取最新日线数据
- 执行数据质量检查
- 将清洗后的数据写入共享记忆(Redis)
## 工作流
1. 15:30触发Cron任务
2. 调用`fetch_data.py`从Tushare获取所有关注股票的日线
3. 执行清洗(去极值、复权、填充缺失)
4. 计算必要衍生指标(如20日均线等)
5. 写入Redis的`data:daily:{ts_code}`键,设置过期时间30天
6. 如果数据异常(缺失率>5%),发送告警
## 约束
- 不能写入交易相关键
- 不能修改Agent配置文件
28.2.4 Agent注册与启用
在~/.openclaw/openclaw.json中注册Agent:
json
{
"agents": {
"list": [
{ "id": "portfolio_manager", "path": "workspace/agents/portfolio_manager" },
{ "id": "risk_manager", "path": "workspace/agents/risk_manager" },
{ "id": "data_pipeline", "path": "workspace/agents/data_pipeline" }
]
}
}
在Hermes侧,通过~/.hermes/config.yaml中配置Agent,或者直接将Skill放置在~/.hermes/skills/目录下,不需要单独注册Agent。风控Agent独立运行,可以使用单独的Hermes进程。
龙马注:建议为风控Agent启动一个独立的Hermes实例(不同端口、不同工作目录),彻底隔离。命令示例: hermes --workspace ~/.hermes_risk gateway start。
🛠️ 实践任务(本节):创建上述三个核心Agent的配置文件和SOUL.md,加载到OpenClaw和Hermes中,用openclaw agent list和hermes skills list验证。
💭 本节总结(不看书写3行):
1.
2.
3.
📊 用时记录:计划____min → 实际____min → 偏差原因:________
28.3 协作工作流配置
🎯 本节目标:配置ACP通信、任务优先级、共享记忆和Cron定时任务,使Agent间能够自动化协作。
预计时长:2小时
28.3.1 ACP通信配置(OpenClaw ↔ Hermes)
编辑~/.openclaw/openclaw.json,添加ACP连接:
json
{
"acp": {
"connections": [
{
"name": "hermes_main",
"transport": "stdio",
"command": "hermes",
"args": ["acp", "serve"],
"timeout": 60,
"retry": { "max_attempts": 3 }
}
]
}
}
若还需连接独立的风控Hermes实例:
json
{
"name": "hermes_risk",
"transport": "tcp",
"address": "localhost:50052",
"timeout": 10
}
启动Hermes ACP服务(主实例和风控实例):
bash
hermes acp serve --listen tcp://0.0.0.0:50051 hermes_risk acp serve --listen tcp://0.0.0.0:50052
28.3.2 任务优先级配置
在OpenClaw中设定规则:风控告警优先级最高,交易指令次之,策略研发任务最低。
在openclaw.json中配置:
json
{
"gateway": {
"queue": {
"priorities": [
{ "pattern": "risk.*alert", "level": 10 },
{ "pattern": "trade.*execution", "level": 8 },
{ "pattern": "factor.*mining", "level": 3 }
]
}
}
}
28.3.3 共享记忆配置(Redis三层结构)
在docker-compose.yml中启动Redis(可选持久化):
yaml
version: '3'
services:
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- ./redis_data:/data
command: redis-server --appendonly yes
然后在~/.openclaw/config.yaml和~/.hermes/config.yaml中配置Redis连接:
yaml
memory:
redis:
host: localhost
port: 6379
db: 0
password: ""
共享记忆命名空间使用规范(参见26.3.2),所有Agent遵循。
28.3.4 Cron定时任务配置
以下是完整的Cron任务列表(通过OpenClaw添加):
bash
# 数据拉取(每日15:30)
openclaw cron add --name "data_pipeline" \
--cron "30 15 * * 1-5" --tz Asia/Shanghai \
--message "执行日线数据拉取和清洗" \
--agent data_pipeline --session isolated
# 因子挖掘(每日17:00)
openclaw cron add --name "factor_mining" \
--cron "0 17 * * 1-5" --tz Asia/Shanghai \
--message "调用Hermes factor_mining Skill" \
--acp hermes_main --method agent/delegate \
--params '{"task":"挖掘今日候选因子"}' --session isolated
# 策略研发(每日18:00)
openclaw cron add --name "strategy_dev" \
--cron "0 18 * * 1-5" --tz Asia/Shanghai \
--message "基于新因子组合测试策略" \
--acp hermes_main --method agent/delegate \
--params '{"task":"回测最新多因子模型"}' --session isolated
# 风控检查(每5分钟)
openclaw cron add --name "risk_check" \
--every "5m" \
--message "执行风控监控" \
--acp hermes_risk --method agent/delegate \
--params '{"task":"计算VaR和回撤"}' --session isolated
# 资金管理校准(每日9:00)
openclaw cron add --name "position_sizing" \
--cron "0 9 * * 1-5" --tz Asia/Shanghai \
--message "根据波动率目标调整仓位" \
--agent portfolio_manager --session isolated
28.3.5 整体启动脚本
start_quant_system.sh:
bash
#!/bin/bash # 启动Redis redis-server --daemonize yes # 启动Hermes主实例(策略Agent) hermes gateway start & hermes acp serve --listen tcp://0.0.0.0:50051 & # 启动Hermes风控实例(独立) export HERMES_WORKSPACE=~/.hermes_risk hermes_risk gateway start & hermes_risk acp serve --listen tcp://0.0.0.0:50052 & # 启动OpenClaw Gateway openclaw gateway start & echo "量化Agent系统已启动"
龙马注:Cron任务中的 --session isolated参数确保每个任务在独立会话中运行,不会阻塞主会话。另外,--acp参数需要OpenClaw版本≥0.6.0,老版本可用openclaw acp call包装脚本替代。
🛠️ 实践任务(本节):按照上述配置,在你的环境中搭建ACP连接、启动Redis,并添加至少2个Cron任务。手动触发一次任务验证。
💭 本节总结(不看书写3行):
1.
2.
3.
📊 用时记录:计划____min → 实际____min → 偏差原因:________
28.4 回测-实盘一致性检查清单
🎯 本节目标:在实盘上线前,逐项检查回测环境与实盘环境的差异,确保回测结果可信。
预计时长:1小时
沈飞注:这个清单不是可选项,是我在过去5年中复盘亏损教训后总结的必做检查。缺一项,就可能在实盘中付出代价。
28.4.1 一致性检查表
| 检查项 | 回测环境 | 实盘环境 | 是否一致 | 不一致时处理 |
|---|---|---|---|---|
| 数据源 | Tushare免费版 | Tushare付费版/券商数据 | 尽量一致 | 使用同一数据源,免费版可作为参考,但实盘以券商数据为准 |
| 复权方式 | 后复权(adj_factor) | 前复权? | 必须后复权 | 统一使用后复权 |
| 滑点模型 | 固定0.1% | 实际滑点可能更高 | 回测略保守 | 回测使用0.2%作为安全边际 |
| 手续费 | 万2.5 | 万2.5(印花税卖出千1) | 一致 | 修正回测模型 |
| 流动性约束 | 无限制 | 订单不能超过日均成交量1% | 回测中加入 | 回测时限制 |
| 涨跌停限制 | 未考虑 | 涨跌停无法成交 | 回测中加入 | 信号产生时检查 |
| 停牌处理 | 停牌期间无法交易 | 回测中跳过 | 一致 | 使用前向填充价格,但信号暂停 |
| 未来函数 | 无 | 无 | 必须 | 使用shift()避免 |
| 交易延迟 | 忽略 | 信号到成交有延迟 | 回测中加入 | 模拟延迟1分钟 |
28.4.2 自动化一致性验证脚本
check_consistency.py:
python
def compare_backtest_live(backtest_file, live_file):
"""
对比回测和实盘产生的订单/收益序列
"""
backtest = pd.read_csv(backtest_file)
live = pd.read_csv(live_file)
# 对齐时间
merged = pd.merge(backtest, live, on='date', suffixes=('_backtest', '_live'))
# 收益相关性
corr = merged['return_backtest'].corr(merged['return_live'])
print(f"收益相关性: {corr:.4f}")
if corr < 0.8:
print("⚠️ 警告:回测与实盘收益相关性过低,可能存在未建模的成本或数据差异")
# 每日收益差
diff = (merged['return_backtest'] - merged['return_live']).abs()
print(f"平均绝对偏差: {diff.mean():.6f}")
if diff.mean() > 0.005:
print("⚠️ 警告:平均绝对偏差过大,请检查滑点或延迟模型")
28.4.3 实盘前的模拟盘验证期
- 最小模拟盘周期:3个月(包含至少一次完整买卖周期)
- 必须满足条件:模拟盘与回测的绩效指标(夏普、回撤)差异在可接受范围内(如夏普比率下降不超过0.3)
- 如果模拟盘表现显著差于回测:请逐项核对上述表格,并修正回测模型。
沈飞注:我见过太多“回测曲线完美,模拟盘亏钱”的案例。原因往往是回测中使用了未来数据或忽略了滑点。请务必诚实面对每一项检查。
🛠️ 实践任务(本节):为你的双均线策略执行一致性检查,至少完成3项检查并记录结果。
💭 本节总结(不看书写3行):
1.
2.
3.
📊 用时记录:计划____min → 实际____min → 偏差原因:________
28.5 系统集成测试与上线
🎯 本节目标:执行单元测试、集成测试、模拟盘验证,最后安全上线实盘。
预计时长:0.5小时
28.5.1 测试金字塔
/\
/ \ UI测试(人工)
/____\
/ \ 集成测试(ACP链、共享记忆)
/________\
/ \ 单元测试(Skill函数、数据清洗)
/____________\
28.5.2 单元测试示例(Pytest)
python
# test_factor_tools.py
import pytest
from scripts.factor_tools import calculate_ic
def test_calculate_ic():
factor = pd.Series([0.1, 0.2, 0.15, 0.3], index=dates)
forward_ret = pd.Series([0.01, 0.02, 0.015, 0.025], index=dates)
ic = calculate_ic(factor, forward_ret)
assert -1 <= ic <= 1
运行所有单元测试:pytest tests/
28.5.3 集成测试(模拟ACP调用)
使用OpenClaw的--dry-run参数测试ACP委托:
bash
openclaw acp call --connection hermes_main --method agent/ask \
--params '{"task":"ping"}' --dry-run
若返回正常,再实际执行。
28.5.4 模拟盘运行流程
- 启动系统:执行
start_quant_system.sh - 注入历史数据:让系统回放过去30天的行情,观察信号生成和交易
- 对比:模拟盘输出与回测报告对齐
- 异常处理:故意触发风控条件(如模拟回撤超限),验证告警和暂停机制
- 运行至少2周,记录所有Agent日志
28.5.5 实盘上线检查清单
- 模拟盘已运行≥1个月,与回测绩效偏差<20%
- 一致性检查清单9项全部通过
- 风控Agent的硬止损已配置且测试生效
- 飞书告警通道已配置,能接收实时通知
- 实盘交易接口已申请,模拟盘和实盘使用相同券商API
- 初始资金仅占总资产的1-5%(用于试错)
- 已备份所有配置文件和数据库
- 设置了每日资金限额(如每日最大亏损≤5%)
- 你本人已熟悉紧急停机流程(
openclaw gateway stop、redis-cli set risk/pause_trading true)
28.5.6 上线后监控
- 第一周每日人工核对订单与信号的一致性
- 每日收盘后运行
check_consistency.py对比模拟盘和实盘 - 如果实盘出现连续3日亏损超过回测最大回撤的2倍,立即暂停并分析原因
龙马注:我见过最惨痛的教训,是上线第一天没限制单笔仓位,一个信号直接买了总仓位的50%,然后市场跳水。请务必在实盘前设置好硬性限额,即使Agent犯错也不会造成不可挽回的损失。
🛠️ 实践任务(本节):运行一次完整的模拟盘(至少一周),记录所有Agent的交互日志,完成后填写上线检查清单。
💭 本节总结(不看书写3行):
1.
2.
3.
📊 用时记录:计划____min → 实际____min → 偏差原因:________
第28章 参考资料与扩展阅读
- OpenClaw ACP 配置官方文档 https://docs.openclaw.ai/zh-CN/protocol/acp
- Redis 持久化与复制 https://redis.io/docs/manual/persistence/
- Cron 表达式生成器 https://crontab.guru/
- Pytest 单元测试框架 https://docs.pytest.org/
- Tushare Pro 行情接口实时/历史数据说明 https://tushare.pro/document/2?doc_id=27
第五篇综合任务(第28章完成后)
任务:完成以下所有检查项。
- 所有依赖软件安装成功,Tushare数据拉取正常
- Portfolio Manager、Risk Manager、Data Pipeline Agent的配置文件已创建并加载
- ACP连接建立成功,
openclaw acp call测试通过 - Redis共享记忆运行正常,各Agent能读写指定命名空间
- 至少添加了3个Cron定时任务,手动触发一次验证
- 完成回测-实盘一致性检查清单(至少5项)
- 运行模拟盘1周以上,记录日志
- 填写实盘上线检查清单,确保满足所有条件
完成后,保存整个系统的配置快照,命名为chapter28_quant_system_snapshot.zip。
顾问审校意见
沈飞(量化顾问):
“第28章的系统集成是全书实操的顶峰。特别值得肯定的是28.4节的一致性检查清单——这是我从血泪教训中总结出来的,每一条都对应着真实亏损。我强烈建议读者在实盘前逐条核验,并保留检查记录。
另外,28.5节的实盘上线检查清单中的‘初始资金仅占总资产的1-5%’是最重要的一条。即使系统通过了所有测试,市场仍可能有未知风险。用极小资金验证3-6个月,再逐步加仓,才是稳健的做法。”
龙马(技术顾问):
“本章的ACP配置和Cron任务示例已经非常详细。我在实际部署中补充两个点:
建议为关键Agent配置健康检查端点,使用 openclaw gateway status和hermes gateway status监控,并集成到飞书告警中。
Redis的内存使用要监控,特别是存储大量历史数据时。可以为 data:daily:*键设置过期时间,如EXPIRE data:daily:600519 2592000(30天)。
最后,强烈建议读者在正式实盘前,使用模拟盘模式运行至少一个月,期间故意注入异常行情(如大幅跳空)来测试风控Agent的响应。这样才能在真金白银面前从容应对。”
下一章预告:第29章 量化投资Agent系统的运行、监控与持续优化 —— 你将学习如何通过Web UI和低代码仪表盘监控系统运行状态,处理异常,执行绩效评估和策略迭代,并实施压力测试。这是从“搭建系统”到“运营系统”的进阶。























暂无评论内容