2.回测验证功能与多智能体辩论功能初步开发
回测验证功能与多智能体辩论功能初步开发
一、项目背景
在传统量化系统中,策略研究通常分成两个割裂环节:
- 研究员先用自然语言描述一个投资想法
- 再由工程代码把这个想法翻译成可执行的规则
- 最后通过回测验证策略是否成立
- 若策略存在争议,还需要人工从多角度继续评审
这类流程的问题在于:
- 从“想法”到“规则”的门槛较高
- 回测只能告诉我们结果如何,但很难解释为什么
- 风险与收益往往不能被同一套视角完整覆盖
- 策略优化依赖人工复盘,效率较低
因此,在本项目中,我先初步制作了 回测验证功能 和 辩论智能体功能
- 用户先用自然语言输入策略想法
- AI 将想法解析为可执行回测参数
- 回测引擎执行单股票或多股票历史回测
- 多智能体从看多、看空、裁判、优化四个角色展开辩论
- 最终输出可视化回测结果、策略结论和优化建议
二、项目架构
整个实现分为 前端展示层、后端接口层、AI 智能体层、量化回测引擎层、数据与持久化层 五部分。
1. 总体架构
用户输入自然语言策略想法
↓
Flutter 前端页面(BacktestPage / DebatePage)
↓
Provider 状态管理 + Service 网络请求
↓
FastAPI 路由层(/backtest, /debate)
↓
AI 智能体层
- QwenBacktestAgent:自然语言转回测参数
- DebateAgent:多空辩论 + 裁决 + 优化
↓
BacktestService + Backtrader 引擎
↓
AkShare 历史行情数据
↓
MySQL 策略与回测结果存储
↓
前端可视化展示回测报告与辩论报告
2. 前后端职责划分
前端
前端基于 Flutter 实现,负责:
- 输入用户回测想法
- 配置时间区间和初始资金
- 触发回测与辩论请求
- 展示回测指标、资金曲线、月度收益、交易记录
- 展示多空分析、裁判意见、优化参数
后端
后端基于 FastAPI 实现,负责:
- 接收回测与辩论请求
- 管理用户策略与回测任务
- 调用千问 / 兼容 OpenAI 接口的模型服务
- 驱动 Backtrader 执行策略回测
- 将结果结构化后返回前端
AI 智能体层
AI 智能体层是本次功能的核心,分为两类:
- QwenBacktestAgent:负责把用户模糊的自然语言意图转换为结构化回测参数,为了测试回测验证功能搭建的临时接口
- DebateAgent:负责从多头、空头、裁判、优化专家四个角色对策略进行评估
三、回测验证功能设计与实现
1. 功能目标
回测模块的目标不是单纯执行固定策略,而是支持一种更智能的交互方式:
- 用户无需编写量化代码
- 用户只需输入一句自然语言想法
- AI 自动提取股票、指标、仓位、止损止盈等参数
- 系统直接执行历史回测并返回完整报告
例如,用户输入:
我想买茅台,建设银行和五粮液,跌了20%就卖出,涨了20%就买入
系统会自动将其转换成:
- 股票列表:贵州茅台、建设银行、五粮液
- 可执行代码:A 股代码数组
- 技术指标规则:如 MA、MACD、RSI
- 风控参数:止损、止盈、仓位比例
- 回测区间:前端传入的起止时间
2. 后端实现流程
回测流程分成两条链路:
链路 A:固定策略回测
- 前端提交
strategy_id、symbol、日期区间、资金参数 - 后端从数据库读取已有策略
- 创建回测记录
- 使用后台任务执行回测
- 回测完成后写入数据库
- 前端轮询获取结果
链路 B:自然语言想法回测
- 前端直接提交用户输入的
idea - 后端调用
QwenBacktestAgent.parse_backtest_idea() - 智能体返回标准化策略 JSON
- 后端自动新建一个策略对象
- 调用
run_multi_stock_backtest()执行多股票回测 - 将结果、原始想法、AI 注释、参数一并返回前端结果页
3. 回测智能体 Prompt 设计
为了让模型稳定输出可执行结果,我在回测智能体中使用了非常强约束的 Prompt。它的目标不是“自由发挥”,而是“精确生成 JSON”。
设计重点包括:
- 只允许输出 JSON
- 必须返回 symbols 数组
- 约束 strategy_params 字段结构
- 限定 indicators 范围
- 限定 risk_level 枚举值
- 要求 annotation 用中文解释映射过程
- 对不合理自然语言规则做近似转换
Prompt 关键约束
- 输出严格 JSON,不能带 markdown
- 股票必须转成 A 股代码
- 单股票也要返回数组
- 技术指标必须兼容回测引擎字段
- 风险等级只能是:低风险 / 中风险 / 高风险
- 用户表达不严谨时,要转成“尽可能可执行”的规则
4. 回测引擎实现
回测引擎基于 Backtrader 构建,核心有三种策略类:
DynamicStrategy
适合单股票的通用动态策略模板:
- 支持 MA、MACD、RSI、BOLL 等指标
- 从
strategy_params动态读取参数 - 买入逻辑支持金叉、超卖等信号
- 卖出逻辑支持止损、止盈和技术离场
- 自动记录交易日志
MultiStockStrategy
适合多股票组合回测:
- 支持多只股票独立判断买卖信号
- 使用统一止损止盈参数
- 使用统一仓位比例
- 为每只股票维护买入成本与订单引用
- 输出组合级交易记录
JoinQuantMA5Strategy
这是一个内置模板策略:
- 价格高于 5 日均线 1% 时买入
- 跌破均线时卖出
- 主要用于演示固定模板策略的回测能力
5. 数据获取与指标计算
行情数据来源
项目使用 AkShare 获取 A 股历史日线数据:
- 支持复权优先获取
- 自动处理字段命名
- 若数据缺失,会降级记录错误并跳过无法获取的股票
回测指标
项目在回测后会计算以下核心指标:
- 总收益率
- 年化收益率
- 夏普比率
- 最大回撤
- 胜率
- 盈亏比
- 总交易次数
- 资金曲线
- 月度收益率
- 交易记录
6. 前端交互设计
回测输入页
前端的 BacktestPage 主要包含:
- 自然语言策略描述输入框
- 开始日期与结束日期选择
- 初始资金输入
- “开始回测”按钮
- 错误提示卡片

回测结果页
BacktestResultPage 提供结构化展示:
- 策略名与股票列表
- 用户原始想法
- AI 解析说明
- 初始资金、最终资产、状态
- 收益和风险核心指标卡片
- 资金曲线图
- 月度收益图
- 交易记录明细
用户能清楚看到:
- 我输入了什么
- AI 帮我理解成了什么
- 回测结果怎么样
- 具体是怎么交易的


四、辩论智能体功能设计与实现
1. 功能目标
回测结果只能回答“历史上表现如何”,但投资策略的评估远不止收益率。
因此我设计了一个 多智能体辩论系统,让不同角色从不同风险收益视角讨论同一个策略,最终形成更完整的策略评价。
该模块的目标包括:
- 从收益视角评估策略机会
- 从风控视角评估策略缺陷
- 用中立角色整合双方争议
- 自动给出参数优化建议
- 将辩论结果沉淀为策略增强信息
2. 多角色设计
DebateAgent 中设计了四个系统角色:
Bull Agent(看涨分析师)
职责:
- 分析趋势延续性
- 分析收益潜力
- 分析市场机会
- 评估胜率预期
它更关注这个策略为什么有可能赚钱。
Bear Agent(风险控制专家)
职责:
- 分析风险暴露
- 分析最大回撤
- 分析市场不确定性
- 分析尾部风险
它更关注这个策略会在什么情况下失效。
Judge Agent(中立裁判)
职责:
- 汇总多空观点
- 输出最终评分
- 给出综合评估
- 归纳关键分歧
- 生成建议与风险等级
Refiner Agent(策略优化专家)
职责:
- 根据辩论结果改进策略
- 输出优化后参数
- 解释收益风险的预期变化
- 给出适合落地执行的改进版本
这样,一个策略不再只是被单点打分,而是被多视角博弈后再裁决。
3. 辩论 Prompt 设计
辩论功能的关键在于把模型的输出变成 稳定、结构化、中文可展示的 JSON。
因此四个角色都采用了统一风格:
- 明确系统身份
- 强调所有输出必须使用中文
- 强调所有枚举值必须是中文
- 强制只返回 JSON
- 分角色限制分析维度
看多 Prompt 关注点
- 趋势延续性
- 收益潜力
- 市场机会
- 胜率预期
看空 Prompt 关注点
- 风险暴露
- 最大回撤
- 市场不确定性
- 极端行情风险
裁判 Prompt 关注点
- 综合评估
- 裁决结论
- 理由
- 关键分歧
- 建议
- 风险等级
优化 Prompt 关注点
- 优化后策略说明
- 参数建议
- 收益变化预期
- 风险变化预期
这种 Prompt 设计的好处是:
- 适合前端直接消费;
- 易于落库;
- 方便后续做评分、排序、检索;
- 也更容易做失败降级处理。
4. 稳定性设计:清洗、归一化与降级
真实调用大模型时,问题不在于能不能生成内容,而在于生成是否稳定。
因此 DebateAgent 在工程上做了大量稳态处理:
1)分数归一化
- 将
score统一约束到 0~100; - 将
confidence统一约束到 0~1; - 异常值自动纠偏。
2)文本清洗
- 自动清洗括号、标点、枚举值;
- 英文枚举统一映射成中文;
- 列表和文本做统一格式化。
3)结构重建
- 将 Bull 和 Bear 输出统一映射为“评分 + 置信水平 + 要点”
- 将 Judge 输出统一映射为“最终评分 + 综合评估 + 建议”
- 将 Refiner 输出统一映射为“优化后策略 + 改进 + 参数”
4)失败降级
如果任意智能体调用失败,系统不会中断,而是使用 fallback:
- Bull fallback:从趋势与仓位角度给出默认乐观评价
- Bear fallback:从震荡市与止损参数角度给出默认风险评价
- Judge fallback:根据 Bull 与 Bear 分数生成有条件支持结论
- Refiner fallback:自动收缩仓位、止损并增加市场过滤条件
这一点非常关键,因为它让辩论功能从“Demo 能跑”变成了“线上可用”。
5. 辩论结果落库与策略增强
辩论完成后,后端不仅直接返回结果,还会将以下信息写回策略对象:
- 多头论点列表
- 空头论点列表
- 辩论结论
- 辩论轮数
- 综合评分
- Bull/Bear/Judge/Optimized 的结构化 JSON
- 优化后的关键参数(如仓位、止损、止盈)
这意味着辩论模块不仅是一次性展示工具,更是对策略本身的增强器。
6. 前端辩论页面设计
前端 DebatePage 实现了完整的交互闭环:
- 先加载当前策略详情
- 用户可通过滑块配置辩论轮数
- 点击按钮触发辩论
- 页面按模块展示结果
页面拆分为多个可折叠板块:
- 看多分析
- 看空分析
- 辩论过程
- 最终结论
- 裁判意见
- 优化策略







五、当前已经实现的功能
截至目前,这两个模块已经完成了以下核心能力。
回测验证功能
- 支持自然语言输入策略想法
- 支持多股票识别与股票代码映射
- 支持 AI 自动生成回测参数
- 支持单股票与多股票回测
- 支持止损、止盈、仓位比例配置
- 支持 MA / MACD / RSI / BOLL 等指标
- 支持回测结果结构化存储
- 支持收益、年化、夏普、回撤、胜率、盈亏比等指标
- 支持资金曲线、月度收益率、交易记录展示
- 支持错误信息与部分股票数据缺失的降级处理
辩论智能体功能
- 支持多角色智能体辩论
- 支持轮数可配置
- 支持看多 / 看空 / 裁判 / 优化四角色联动
- 支持中文结构化 JSON 输出
- 支持文本清洗与格式统一
- 支持综合评分、风险等级、关键分歧与建议输出
- 支持自动生成优化后策略参数
- 支持将辩论结果写回策略对象
- 支持前端分模块可视化展示
六、AI 提示词工程总结
这次功能实现里,我最深的体会是:
大模型在金融场景中最重要的不是“会说”,而是“可控”。
1. 明确角色
每个智能体都必须有强身份:
- 看多分析师
- 风控专家
- 裁判
- 优化专家
- 回测意图解析器
角色越明确,输出越稳定。
2. 明确输出格式
所有关键模型调用都要求:
- 只返回 JSON
- 不能输出 markdown
- 字段必须可解析
- 中文字段值要适合直接展示
3. 明确边界
例如:
- risk_level 的枚举值固定
- indicators 的范围固定
- 策略参数字段固定
- 分析维度固定
4. 给模型兜底空间,但不放任
即使用户说的是:
- “涨了20%买入”
- “跌了20%卖出”
- “想买几只强势股试试”
模型也得将其转换为尽量可执行的近似规则,而不是直接返回无法处理。
六、开发这两个功能时使用的提示词记录
1. 回测验证功能开发过程提示词
需求定义阶段
请你帮我设计一个AI驱动的量化回测功能,
要求用户可以直接输入自然语言描述投资想法,
后端使用千问大模型的接口作为生成策略的测试类,
系统自动把它转换成可执行的回测策略参数,并完成历史回测。
帮我梳理这个回测功能的完整流程,
包括前端输入、后端接口、回测引擎执行。
回测智能体设计阶段
请你帮我写一个回测意图解析Agent,
输入是中文自然语言,输出是严格JSON,
请你为这个回测意图解析 Agent 设计一段高约束Prompt,
要求模型只能输出JSON,
必须适配量化回测引擎需要的参数字段。
“我想买茅台、建设银行和五粮液,跌20%止损,涨20%止盈”
这样的输入解析成多股票回测可执行参数。
如果用户输入的规则本身不严谨,比如“涨20%买入、跌20%卖出”,
并帮我把这个方案设为默认策略,设计一个Prompt,
让模型把它转成专业的近似回测规则。
回测后端接口设计阶段
请你帮我写FastAPI的回测接口,
一个接口用于提交已有策略回测任务,
一个接口用于自然语言idea直接回测,
一个接口用于查询回测结果,
一个接口用于获取回测历史。
请你帮我设计接口的完整逻辑,
先调用 AI 解析自然语言,再创建策略,
再执行回测,再把结果和 AI 解析说明一并返回给前端。
把自然语言回测和固定策略回测这两条链路统一到同一个后端回测服务中。
回测引擎实现阶段
请你基于Backtrader帮我实现一个动态策略模板,
实现一个多股票组合回测策略,
要求每只股票独立判断买卖信号,
但共享仓位控制、止损止盈等参数。
请你帮我实现一个回测服务,
能够拉取 A 股历史数据、执行回测、输出总收益率、
年化收益率、夏普比率、最大回撤、胜率、盈亏比、
交易次数、资金曲线和交易记录。
请你帮我设计一个回测服务的异常处理机制,
如果某些股票历史数据获取失败,不要整个任务崩掉,
而是尽量跳过失败股票并返回错误说明。
回测前端页面实现阶段
请你帮我设计一个 Flutter 回测页面,
包含自然语言输入框、起止日期选择、初始资金输入和开始回测按钮,
按照我提供的图片的风格制作,浅白色调。
请你帮我设计一个回测结果页,
展示策略名、股票列表、用户原始想法、AI 解析说明、
收益指标、资金曲线、月度收益率和交易记录。
2. 辩论智能体功能开发过程提示词
需求定义阶段
请你帮我设计一个多智能体辩论系统,用来评估量化策略。
它至少要包含看多、看空、裁判和策略优化四个角色。
我希望策略回测之后,不只是给出结果,
还能让 AI 从收益、风险、回撤、机会、尾部风险等维度进行辩论。
请你帮我把量化策略评估做成多角色博弈流程:
Bull 负责看涨分析,Bear 负责风险评估,
Judge 负责裁决,Refiner 负责输出优化建议。
辩论 Agent 设计阶段
请你帮我写一个 DebateAgent,
能根据策略信息自动调用多个角色的大模型分析,
并输出统一的结构化 JSON。
请你帮我给 Bull Agent、Bear Agent、Judge Agent、Refiner Agent
写一段系统提示词,
要求它必须使用中文,只返回 JSON,
并且多维度分析策略。
辩论结果标准化阶段
请你帮我把多空分析结果统一成简约易读的结构,
把裁判结果统一成简约易读的结构。
请你帮我设计一个 fallback 机制,
当大模型某个角色调用失败时,
系统仍然可以返回可读的默认辩论结果。
请你帮我设计一个参数优化逻辑,
如果辩论认为风险偏高,
就自动收缩仓位、调整止损止盈,并增加市场过滤条件。
辩论后端接口阶段
请你帮我写一个接口,根据strategy_id读取策略信息,
调用DebateAgent,返回辩论结果,
并把关键结果写回数据库中的策略对象。
请你帮我设计辩论结果落库存储结构,
包括 bull_arguments、bear_arguments、debate_conclusion、
overall_score、optimized_strategy 和优化后的参数。
辩论前端页面实现阶段
请你帮我设计一个 Flutter 的辩论页面,
用户可以调节辩论轮数,然后查看看多分析、看空分析、
辩论过程、最终结论、裁判意见和优化策略。
请你帮我把辩论报告页面做成多个可折叠模块,
保证内容很多时依然易读。
3. 实现这两个功能时的综合性提示词
请你根据我当前项目的前后端结构,
把自然语言回测和多智能体辩论两个功能整合起来,
要求接口清晰、数据结构统一、前端页面可直接消费。
七、下一步计划
1. 提升策略语言表达能力
当前自然语言解析已经支持基础策略想法,但后续可以进一步增强
- 支持更复杂的仓位管理描述
- 支持调仓周期、加减仓逻辑
- 支持行业轮动、市场状态过滤
- 支持更多技术指标组合
2. 增加更丰富的回测维度
后续可加入
- 基准对比收益
- Alpha、Beta
- 卡玛比率
- 波动率分析
- 持仓分布与行业分布
3. 做成“辩论 + 回测”联动闭环
目前辩论和回测已经可串联,但下一步可以更进一步:
- 先回测
- 再辩论
- 再自动产出优化参数
- 再执行二次回测
- 最后比较优化前后结果
这会形成真正的 自动策略迭代闭环。
4. 强化个性化推荐能力
未来可结合用户偏好记录能力
- 用户风险偏好
- 用户历史回测行为
- 用户常看行业与股票
- 用户接受的回撤上限
生成更加个性化的策略建议与优化方案。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)