1. 从"盯盘焦虑"到"多Agent协作":这套模拟交易系统到底在解决什么做投资研究的人大概都有过这种体验:早上开盘前刷一遍研报,盘中盯着几个指标来回切换,收盘后还要复盘当天的操作逻辑,一天下来信息过载,真正有价值的判断却没几条。更麻烦的是,人一旦情绪上头,止损纪律就容易形同虚设。我搭这套AI Agent模拟交易系统的初衷很朴素——把"信息收集、逻辑推演、风险控制"这三件事拆开,交给不同的Agent各司其职,让它们像一个小型投研团队一样协作,而我只负责在关键节点做决策复核。这套系统的核心不是"预测涨跌",而是"模拟一个完整的投研与交易流程"。它包含四个角色:一个负责抓取和整理市场信息的研报Agent,一个负责从数据中提炼逻辑的分析Agent,一个负责生成交易信号的决策Agent,以及一个负责仓位管理和止损止盈的风控Agent。四个Agent通过一个共享的上下文空间传递信息,最终输出一份带风控约束的模拟交易指令。需要先说明的是,这是一套模拟交易系统,所有交易都在虚拟账户中执行,不接入任何真实券商接口。它的价值在于验证策略逻辑、训练交易纪律、观察多Agent协作的边界,而不是直接拿去实盘。适合对AI Agent架构感兴趣、同时想理解量化交易基本流程的开发者,也适合有投资经验但想用工程化手段约束自己情绪化操作的人。关键词里提到的"多Agent研报""自主交易""风控",其实对应了这套系统的三个层次:信息层、决策层、约束层。下面我会把这套系统从架构设计到落地细节完整拆一遍,包括我踩过的坑和最后怎么绕过去的。2. 四个Agent的分工设计:为什么不是一个大模型包办所有事2.1 单Agent方案的三个致命问题一开始我图省事,想用一个通用大模型把所有活都干了——给它一段市场数据,让它直接输出买卖建议。跑了几轮模拟之后,问题暴露得很明显。第一个问题是上下文污染。研报信息、技术指标、新闻情绪、历史持仓,全部塞进同一个对话窗口,模型在生成交易信号时会被无关信息干扰。比如某天有一条行业政策新闻,模型就过度放大了它的权重,忽略了技术面已经出现的背离信号。第二个问题是职责不清导致无法调试。当一笔模拟交易亏损时,我根本不知道是信息抓取错了、分析逻辑偏了,还是风控没生效。所有环节耦合在一起,出了问题只能整体重跑,效率极低。第三个问题是风控形同虚设。让同一个模型既生成买入信号又负责止损判断,它往往会在浮亏时给自己找理由——"基本面没变,可以再拿一拿"。这不是模型能力问题,而是角色冲突。风控必须是一个独立的、有硬约束的模块。2.2 四Agent架构的职责边界与数据流最终我确定的架构是这样的:Agent角色核心职责输入输出关键约束研报Agent抓取并结构化市场信息行情数据、公告、新闻结构化研报摘要只做事实提取,不做判断分析Agent从摘要中提炼逻辑链研报摘要、历史数据多空逻辑与置信度必须给出反方论据决策Agent生成交易信号分析结论、当前持仓买卖方向与目标仓位信号需附带理由风控Agent审核并约束交易交易信号、账户状态最终执行指令一票否决权数据流是单向的:研报Agent的输出喂给分析Agent,分析Agent的结论喂给决策Agent,决策Agent的信号必须经过风控Agent审核才能进入模拟撮合。这个单向链路的好处是每一环都可以单独测试和替换。2.3 为什么风控Agent必须有一票否决权这是整个设计里我最坚持的一点。风控Agent不参与信号生成,它只做三件事:检查单笔仓位是否超过总资金的某个比例、检查当前回撤是否触发暂停交易阈值、检查交易信号是否与已有持仓形成过度集中。我给它设了硬编码的规则,而不是让模型自由判断。比如"单只标的模拟仓位不超过总资金的20%""单日累计亏损超过3%则当日不再开新仓""同一行业持仓不超过40%"。这些规则写在配置文件里,风控Agent只负责执行和记录,不参与讨论。实测下来,正是这种"不近人情"的硬约束,让模拟账户在几轮极端行情里没有出现毁灭性回撤。提示:风控规则一定要在系统初始化时就固定下来,不要中途因为"这次情况特殊"而临时放宽。我试过临时放宽一次,结果那笔模拟交易成了整个回测周期里亏损最大的一笔。3. 研报Agent的信息处理链路:从原始数据到结构化摘要3.1 数据源的选取与清洗研报Agent的输入我选了三类:日频行情数据(开高低收、成交量)、公开公告文本、以及经过筛选的新闻摘要。行情数据用本地CSV文件模拟,公告和新闻用预先准备好的文本样本,整个系统不依赖任何实时接口,保证可复现。清洗环节做了几件事:去掉重复公告、把长文本按段落切分、给每段打上时间戳和来源标签。这里有个细节值得说——时间戳对齐。如果一条新闻的发布时间是收盘后,那它只能影响下一个交易日的决策,不能用来解释当天的行情。我一开始忽略了这点,导致分析Agent经常"用未来的信息解释过去",回测结果虚高得离谱。3.2 结构化摘要的字段设计研报Agent的输出不是一段自由文本,而是一个固定字段的JSON结构:{ "date": "2024-06-11", "symbol": "模拟标的A", "price_action": "放量上涨,突破近20日均线", "volume_note": "成交量较5日均值放大1.8倍", "news_items": [ {"time": "盘后", "summary": "行业需求预期上调", "impact": "待次日验证"} ], "risk_flags": ["短期涨幅偏大"] }为什么要这么设计?因为下游的分析Agent如果拿到的是自由文本,每次解析的格式都可能不一样,后续逻辑就没法稳定复现。固定字段虽然前期麻烦,但让整个链路的可测试性提升了一个档次。3.3 信息去重与优先级排序的实操技巧实际跑的时候发现,同一件事经常被多个来源重复报道,如果不做去重,分析Agent会误以为这个信号很强。我的做法是给每条信息算一个简单的相似度,超过阈值的合并为一条,并在摘要里标注"多源确认"。优先级排序则按"时效性+来源可靠性+与持仓相关性"三个维度打分。与当前持仓相关的信息权重最高,因为这类信息直接影响是否需要调整仓位。这个权重表我调了好几轮,最后发现把"与持仓相关性"的权重设到0.5左右比较合理,太高会让Agent只关注已有持仓而忽略新机会。4. 分析Agent的逻辑链构建:让模型学会"自己反驳自己"4.1 多空逻辑的双向生成分析Agent最容易犯的毛病是"一根筋"——看到利好就一路看多,看到利空就一路看空。为了对抗这种倾向,我在提示词里强制要求它同时输出看多逻辑和看空逻辑,并且给每条逻辑标注置信度。比如某天的输出是这样的:看多逻辑:均线多头排列(置信度0.7)、行业景气度回升(置信度0.6)看空逻辑:短期涨幅透支(置信度0.5)、成交量未能持续放大(置信度0.4)最终的多空倾向不是简单相加,而是让模型自己权衡后给出一个综合判断,并说明"哪个逻辑如果被证伪,判断就要翻转"。这个"证伪条件"字段非常关键,它让决策Agent知道什么情况下应该退出。4.2 置信度校准:避免模型过度自信大模型有个通病,就是对自己的判断过度自信,动不动就给0.9以上的置信度。我做了两件事来校准:一是要求置信度必须附带依据,没有依据的置信度直接打折;二是引入历史准确率反馈,如果某个类型的逻辑在过去N次模拟中准确率只有50%,那它的置信度上限就被压到0.6。这个校准机制让分析Agent的输出更接近真实的不确定性。实测下来,经过校准的置信度与后续模拟交易的实际胜率相关性明显更高,虽然绝对数值仍然偏乐观,但至少排序是对的。4.3 反方论据的强制输出这是我认为最有价值的一个设计。每次分析Agent给出结论后,必须再输出一段"如果我是反方,我会怎么反驳"。这段内容不参与信号生成,但会作为附件传给决策Agent和风控Agent。效果很直接:决策Agent在看到反方论据后,会更谨慎地选择仓位;风控Agent则会把反方论据里的风险点纳入审核。有一次分析Agent强烈看多,但反方论据里提到"该标的近一个月已有三次冲高回落",风控Agent据此把建议仓位从20%压到了10%,后来那笔模拟交易果然没走出来。5. 决策Agent的信号生成与风控Agent的硬约束5.1 从分析结论到交易信号的映射决策Agent拿到的输入包括:分析Agent的多空判断、置信度、证伪条件,以及当前模拟账户的持仓状态。它的输出是一个交易信号,包含方向(买/卖/持有)、目标仓位比例、以及触发条件。映射逻辑我用的是一套简单的规则引擎加模型判断的混合方案。规则引擎负责处理硬性条件,比如"置信度低于0.5不操作""已有持仓且证伪条件未触发则持有";模型负责在规则允许的范围内做更细的权衡。这样既保证了基本纪律,又保留了一定的灵活性。5.2 风控Agent的三道闸门风控Agent的审核分三道闸门,任何一道不通过,信号就被拦截或修改:第一道是单笔仓位闸门。检查目标仓位是否超过单标的上限。超过就按上限执行,并记录"信号被截断"。第二道是组合集中度闸门。检查交易后同一行业的模拟持仓占比是否超过阈值。超过就要求决策Agent重新分配。第三道是回撤保护闸门。检查账户当前回撤是否触发暂停线。触发则当日所有开仓信号一律拒绝,只允许平仓。这三道闸门的参数都写在配置文件里,我调整过几轮。回撤保护线一开始设的是5%,后来发现太宽松,极端行情下还是会有较大回撤,最后收紧到3%。收紧之后模拟交易的频率下降了,但账户曲线明显更平滑。5.3 模拟撮合的细节处理信号通过风控后进入模拟撮合环节。这里有几个容易忽略的细节:成交价用次日开盘价还是当日收盘价?我最终选了次日开盘价,因为信号是基于当日收盘后生成的信息,用次日开盘价更符合实际可执行性。滑点方面,我设了0.1%的固定滑点,虽然模拟盘没有真实冲击成本,但加上滑点能让回测结果更保守。手续费按单边0.03%计算,这个数值不高,但长期累积下来对高频策略的影响不小。我试过把手续费调高到0.1%做压力测试,结果一些原本盈利的短线信号直接变成亏损,这说明策略对交易成本非常敏感。6. 实测中暴露的问题与我的修复过程6.1 信息过载导致的分析瘫痪系统跑第一周就遇到一个问题:某天公告和新闻特别多,研报Agent输出了三十多条信息,分析Agent处理完之后给出了一个"多空交织、方向不明"的结论,决策Agent直接卡住不输出信号。排查后发现是信息没有做分层。我的修复方案是给研报Agent加了一个"重要性过滤"步骤,只把影响程度在前30%的信息传给分析Agent,其余信息作为背景存档。这样既避免了信息过载,又保留了完整记录供事后复盘。6.2 风控规则与决策信号的冲突有一次决策Agent生成买入信号,风控Agent因为集中度超限给拦了,但决策Agent在下一轮又生成了同样的信号,形成死循环。这个问题本质上是两个Agent之间缺少反馈机制。修复方式是在风控Agent拦截信号时,把拦截原因写回共享上下文,决策Agent在生成新信号前必须先读取最近的拦截记录。如果同一原因连续拦截两次,决策Agent必须调整方向或降低仓位,不能重复提交。6.3 回测结果与模拟盘结果的偏差回测时账户曲线很漂亮,但切到逐日模拟后收益明显下降。排查下来有两个原因:一是回测用了未来数据(前面提到的时间戳问题),二是回测没有模拟"信号被风控拦截"的情况。修复后我把回测引擎和模拟引擎统一到同一套风控规则下,并且严格按时间戳对齐信息。修正后的回测结果虽然不如之前好看,但和逐日模拟的结果基本一致了,这才是有参考价值的。7. 这套系统跑稳之后的一些经验7.1 关于Agent粒度的取舍四个Agent是我试下来比较平衡的粒度。再拆细,比如把研报Agent拆成行情Agent和新闻Agent,通信成本会明显上升,而且两个Agent的信息在分析层本来就要融合,拆开反而增加复杂度。再合并,比如把分析和决策合成一个,又会回到职责不清的老问题。所以我的建议是:按"信息处理、逻辑推演、信号生成、风险约束"这四个不可再分的职能来划分Agent,基本不会错。7.2 提示词里必须写死的几条规则跑了一段时间后,我把几条规则直接写死在各个Agent的提示词里,不再依赖模型自由发挥:分析Agent必须输出反方论据;决策Agent必须说明信号的理由和证伪条件;风控Agent只执行规则不做判断。这几条写死之后,系统的稳定性提升非常明显。7.3 日志与复盘的重要性每个Agent的输入输出我都做了完整日志,按交易日归档。一开始觉得日志只是调试用,后来发现它是复盘的核心资产。当某笔模拟交易亏损时,我可以沿着日志链路回溯:是研报Agent漏了关键信息,还是分析Agent的逻辑有漏洞,还是风控规则需要调整。没有日志,这套多Agent系统就是一个黑箱,根本没法迭代。7.4 对想上手的人的几点提醒如果你也想搭一套类似的系统,我的建议是从最小的闭环开始:先跑通"研报→分析→决策→风控→模拟撮合"这条链路,哪怕每个Agent的逻辑都很粗糙。跑通之后再逐个优化,比一上来就追求完美要快得多。另外,风控规则一定要在系统跑起来之前就定好,不要等出了问题再补,那时候你已经在心理上接受了不设约束的状态,补起来会很难。最后说一个我自己的体会:这套系统最大的价值不是帮我"赚"了多少模拟收益,而是让我看清了自己在交易决策中的思维漏洞。当分析Agent把反方论据摆在我面前时,我经常发现那些理由正是我实盘时会刻意忽略的。把决策流程拆解给多个Agent,本质上是在用工程手段对抗人性弱点,这件事本身就值得做。
1. 从"盯盘焦虑"到"多Agent协作":这套模拟交易系统到底在解决什么做投资研究的人大概都有过这种体验:早上开盘前刷一遍研报,盘中盯着几个指标来回切换,收盘后还要复盘当天的操作逻辑,一天下来信息过载,真正有价值的判断却没几条。更麻烦的是,人一旦情绪上头,止损纪律就容易形同虚设。我搭这套AI Agent模拟交易系统的初衷很朴素——把"信息收集、逻辑推演、风险控制"这三件事拆开,交给不同的Agent各司其职,让它们像一个小型投研团队一样协作,而我只负责在关键节点做决策复核。这套系统的核心不是"预测涨跌",而是"模拟一个完整的投研与交易流程"。它包含四个角色:一个负责抓取和整理市场信息的研报Agent,一个负责从数据中提炼逻辑的分析Agent,一个负责生成交易信号的决策Agent,以及一个负责仓位管理和止损止盈的风控Agent。四个Agent通过一个共享的上下文空间传递信息,最终输出一份带风控约束的模拟交易指令。需要先说明的是,这是一套模拟交易系统,所有交易都在虚拟账户中执行,不接入任何真实券商接口。它的价值在于验证策略逻辑、训练交易纪律、观察多Agent协作的边界,而不是直接拿去实盘。适合对AI Agent架构感兴趣、同时想理解量化交易基本流程的开发者,也适合有投资经验但想用工程化手段约束自己情绪化操作的人。关键词里提到的"多Agent研报""自主交易""风控",其实对应了这套系统的三个层次:信息层、决策层、约束层。下面我会把这套系统从架构设计到落地细节完整拆一遍,包括我踩过的坑和最后怎么绕过去的。2. 四个Agent的分工设计:为什么不是一个大模型包办所有事2.1 单Agent方案的三个致命问题一开始我图省事,想用一个通用大模型把所有活都干了——给它一段市场数据,让它直接输出买卖建议。跑了几轮模拟之后,问题暴露得很明显。第一个问题是上下文污染。研报信息、技术指标、新闻情绪、历史持仓,全部塞进同一个对话窗口,模型在生成交易信号时会被无关信息干扰。比如某天有一条行业政策新闻,模型就过度放大了它的权重,忽略了技术面已经出现的背离信号。第二个问题是职责不清导致无法调试。当一笔模拟交易亏损时,我根本不知道是信息抓取错了、分析逻辑偏了,还是风控没生效。所有环节耦合在一起,出了问题只能整体重跑,效率极低。第三个问题是风控形同虚设。让同一个模型既生成买入信号又负责止损判断,它往往会在浮亏时给自己找理由——"基本面没变,可以再拿一拿"。这不是模型能力问题,而是角色冲突。风控必须是一个独立的、有硬约束的模块。2.2 四Agent架构的职责边界与数据流最终我确定的架构是这样的:Agent角色核心职责输入输出关键约束研报Agent抓取并结构化市场信息行情数据、公告、新闻结构化研报摘要只做事实提取,不做判断分析Agent从摘要中提炼逻辑链研报摘要、历史数据多空逻辑与置信度必须给出反方论据决策Agent生成交易信号分析结论、当前持仓买卖方向与目标仓位信号需附带理由风控Agent审核并约束交易交易信号、账户状态最终执行指令一票否决权数据流是单向的:研报Agent的输出喂给分析Agent,分析Agent的结论喂给决策Agent,决策Agent的信号必须经过风控Agent审核才能进入模拟撮合。这个单向链路的好处是每一环都可以单独测试和替换。2.3 为什么风控Agent必须有一票否决权这是整个设计里我最坚持的一点。风控Agent不参与信号生成,它只做三件事:检查单笔仓位是否超过总资金的某个比例、检查当前回撤是否触发暂停交易阈值、检查交易信号是否与已有持仓形成过度集中。我给它设了硬编码的规则,而不是让模型自由判断。比如"单只标的模拟仓位不超过总资金的20%""单日累计亏损超过3%则当日不再开新仓""同一行业持仓不超过40%"。这些规则写在配置文件里,风控Agent只负责执行和记录,不参与讨论。实测下来,正是这种"不近人情"的硬约束,让模拟账户在几轮极端行情里没有出现毁灭性回撤。提示:风控规则一定要在系统初始化时就固定下来,不要中途因为"这次情况特殊"而临时放宽。我试过临时放宽一次,结果那笔模拟交易成了整个回测周期里亏损最大的一笔。3. 研报Agent的信息处理链路:从原始数据到结构化摘要3.1 数据源的选取与清洗研报Agent的输入我选了三类:日频行情数据(开高低收、成交量)、公开公告文本、以及经过筛选的新闻摘要。行情数据用本地CSV文件模拟,公告和新闻用预先准备好的文本样本,整个系统不依赖任何实时接口,保证可复现。清洗环节做了几件事:去掉重复公告、把长文本按段落切分、给每段打上时间戳和来源标签。这里有个细节值得说——时间戳对齐。如果一条新闻的发布时间是收盘后,那它只能影响下一个交易日的决策,不能用来解释当天的行情。我一开始忽略了这点,导致分析Agent经常"用未来的信息解释过去",回测结果虚高得离谱。3.2 结构化摘要的字段设计研报Agent的输出不是一段自由文本,而是一个固定字段的JSON结构:{ "date": "2024-06-11", "symbol": "模拟标的A", "price_action": "放量上涨,突破近20日均线", "volume_note": "成交量较5日均值放大1.8倍", "news_items": [ {"time": "盘后", "summary": "行业需求预期上调", "impact": "待次日验证"} ], "risk_flags": ["短期涨幅偏大"] }为什么要这么设计?因为下游的分析Agent如果拿到的是自由文本,每次解析的格式都可能不一样,后续逻辑就没法稳定复现。固定字段虽然前期麻烦,但让整个链路的可测试性提升了一个档次。3.3 信息去重与优先级排序的实操技巧实际跑的时候发现,同一件事经常被多个来源重复报道,如果不做去重,分析Agent会误以为这个信号很强。我的做法是给每条信息算一个简单的相似度,超过阈值的合并为一条,并在摘要里标注"多源确认"。优先级排序则按"时效性+来源可靠性+与持仓相关性"三个维度打分。与当前持仓相关的信息权重最高,因为这类信息直接影响是否需要调整仓位。这个权重表我调了好几轮,最后发现把"与持仓相关性"的权重设到0.5左右比较合理,太高会让Agent只关注已有持仓而忽略新机会。4. 分析Agent的逻辑链构建:让模型学会"自己反驳自己"4.1 多空逻辑的双向生成分析Agent最容易犯的毛病是"一根筋"——看到利好就一路看多,看到利空就一路看空。为了对抗这种倾向,我在提示词里强制要求它同时输出看多逻辑和看空逻辑,并且给每条逻辑标注置信度。比如某天的输出是这样的:看多逻辑:均线多头排列(置信度0.7)、行业景气度回升(置信度0.6)看空逻辑:短期涨幅透支(置信度0.5)、成交量未能持续放大(置信度0.4)最终的多空倾向不是简单相加,而是让模型自己权衡后给出一个综合判断,并说明"哪个逻辑如果被证伪,判断就要翻转"。这个"证伪条件"字段非常关键,它让决策Agent知道什么情况下应该退出。4.2 置信度校准:避免模型过度自信大模型有个通病,就是对自己的判断过度自信,动不动就给0.9以上的置信度。我做了两件事来校准:一是要求置信度必须附带依据,没有依据的置信度直接打折;二是引入历史准确率反馈,如果某个类型的逻辑在过去N次模拟中准确率只有50%,那它的置信度上限就被压到0.6。这个校准机制让分析Agent的输出更接近真实的不确定性。实测下来,经过校准的置信度与后续模拟交易的实际胜率相关性明显更高,虽然绝对数值仍然偏乐观,但至少排序是对的。4.3 反方论据的强制输出这是我认为最有价值的一个设计。每次分析Agent给出结论后,必须再输出一段"如果我是反方,我会怎么反驳"。这段内容不参与信号生成,但会作为附件传给决策Agent和风控Agent。效果很直接:决策Agent在看到反方论据后,会更谨慎地选择仓位;风控Agent则会把反方论据里的风险点纳入审核。有一次分析Agent强烈看多,但反方论据里提到"该标的近一个月已有三次冲高回落",风控Agent据此把建议仓位从20%压到了10%,后来那笔模拟交易果然没走出来。5. 决策Agent的信号生成与风控Agent的硬约束5.1 从分析结论到交易信号的映射决策Agent拿到的输入包括:分析Agent的多空判断、置信度、证伪条件,以及当前模拟账户的持仓状态。它的输出是一个交易信号,包含方向(买/卖/持有)、目标仓位比例、以及触发条件。映射逻辑我用的是一套简单的规则引擎加模型判断的混合方案。规则引擎负责处理硬性条件,比如"置信度低于0.5不操作""已有持仓且证伪条件未触发则持有";模型负责在规则允许的范围内做更细的权衡。这样既保证了基本纪律,又保留了一定的灵活性。5.2 风控Agent的三道闸门风控Agent的审核分三道闸门,任何一道不通过,信号就被拦截或修改:第一道是单笔仓位闸门。检查目标仓位是否超过单标的上限。超过就按上限执行,并记录"信号被截断"。第二道是组合集中度闸门。检查交易后同一行业的模拟持仓占比是否超过阈值。超过就要求决策Agent重新分配。第三道是回撤保护闸门。检查账户当前回撤是否触发暂停线。触发则当日所有开仓信号一律拒绝,只允许平仓。这三道闸门的参数都写在配置文件里,我调整过几轮。回撤保护线一开始设的是5%,后来发现太宽松,极端行情下还是会有较大回撤,最后收紧到3%。收紧之后模拟交易的频率下降了,但账户曲线明显更平滑。5.3 模拟撮合的细节处理信号通过风控后进入模拟撮合环节。这里有几个容易忽略的细节:成交价用次日开盘价还是当日收盘价?我最终选了次日开盘价,因为信号是基于当日收盘后生成的信息,用次日开盘价更符合实际可执行性。滑点方面,我设了0.1%的固定滑点,虽然模拟盘没有真实冲击成本,但加上滑点能让回测结果更保守。手续费按单边0.03%计算,这个数值不高,但长期累积下来对高频策略的影响不小。我试过把手续费调高到0.1%做压力测试,结果一些原本盈利的短线信号直接变成亏损,这说明策略对交易成本非常敏感。6. 实测中暴露的问题与我的修复过程6.1 信息过载导致的分析瘫痪系统跑第一周就遇到一个问题:某天公告和新闻特别多,研报Agent输出了三十多条信息,分析Agent处理完之后给出了一个"多空交织、方向不明"的结论,决策Agent直接卡住不输出信号。排查后发现是信息没有做分层。我的修复方案是给研报Agent加了一个"重要性过滤"步骤,只把影响程度在前30%的信息传给分析Agent,其余信息作为背景存档。这样既避免了信息过载,又保留了完整记录供事后复盘。6.2 风控规则与决策信号的冲突有一次决策Agent生成买入信号,风控Agent因为集中度超限给拦了,但决策Agent在下一轮又生成了同样的信号,形成死循环。这个问题本质上是两个Agent之间缺少反馈机制。修复方式是在风控Agent拦截信号时,把拦截原因写回共享上下文,决策Agent在生成新信号前必须先读取最近的拦截记录。如果同一原因连续拦截两次,决策Agent必须调整方向或降低仓位,不能重复提交。6.3 回测结果与模拟盘结果的偏差回测时账户曲线很漂亮,但切到逐日模拟后收益明显下降。排查下来有两个原因:一是回测用了未来数据(前面提到的时间戳问题),二是回测没有模拟"信号被风控拦截"的情况。修复后我把回测引擎和模拟引擎统一到同一套风控规则下,并且严格按时间戳对齐信息。修正后的回测结果虽然不如之前好看,但和逐日模拟的结果基本一致了,这才是有参考价值的。7. 这套系统跑稳之后的一些经验7.1 关于Agent粒度的取舍四个Agent是我试下来比较平衡的粒度。再拆细,比如把研报Agent拆成行情Agent和新闻Agent,通信成本会明显上升,而且两个Agent的信息在分析层本来就要融合,拆开反而增加复杂度。再合并,比如把分析和决策合成一个,又会回到职责不清的老问题。所以我的建议是:按"信息处理、逻辑推演、信号生成、风险约束"这四个不可再分的职能来划分Agent,基本不会错。7.2 提示词里必须写死的几条规则跑了一段时间后,我把几条规则直接写死在各个Agent的提示词里,不再依赖模型自由发挥:分析Agent必须输出反方论据;决策Agent必须说明信号的理由和证伪条件;风控Agent只执行规则不做判断。这几条写死之后,系统的稳定性提升非常明显。7.3 日志与复盘的重要性每个Agent的输入输出我都做了完整日志,按交易日归档。一开始觉得日志只是调试用,后来发现它是复盘的核心资产。当某笔模拟交易亏损时,我可以沿着日志链路回溯:是研报Agent漏了关键信息,还是分析Agent的逻辑有漏洞,还是风控规则需要调整。没有日志,这套多Agent系统就是一个黑箱,根本没法迭代。7.4 对想上手的人的几点提醒如果你也想搭一套类似的系统,我的建议是从最小的闭环开始:先跑通"研报→分析→决策→风控→模拟撮合"这条链路,哪怕每个Agent的逻辑都很粗糙。跑通之后再逐个优化,比一上来就追求完美要快得多。另外,风控规则一定要在系统跑起来之前就定好,不要等出了问题再补,那时候你已经在心理上接受了不设约束的状态,补起来会很难。最后说一个我自己的体会:这套系统最大的价值不是帮我"赚"了多少模拟收益,而是让我看清了自己在交易决策中的思维漏洞。当分析Agent把反方论据摆在我面前时,我经常发现那些理由正是我实盘时会刻意忽略的。把决策流程拆解给多个Agent,本质上是在用工程手段对抗人性弱点,这件事本身就值得做。