QuantBot开源地址jeokeo011222/quantbot: QuantBotAI 量化机器人的全量源码。基于 **GoReact TypeScript Vite** 构建通过 **Wails** 与 Go 后端通信提供 A 股量化交易的图形界面六维判势、多因子选股、AI 智能体决策、策略回测、实时活动、审计日志等。1.1早上九点二十四分我在开会二零二六年九月十日星期四上午九点二十四分。 我坐在会议室里投影仪上放着第三季度的项目复盘主讲人正在解释一张我早就看过的图。我的手机在桌面底下亮了一下——不是消息是我自己设的闹钟。 闹钟备注写着六个字看今天该买什么。 九点三十分A 股开盘。而我要在九点五十分之前把那份复盘的第一版意见交出去。两件事撞在一起一件都不能推迟一件都不能敷衍。 这不是那一天的意外。这是我过去两年的常态。 我把“一个业余投资者每天该做的事”写在一张纸上写完发现是九件看市场——今天大盘是什么状态是暖的还是冷的找机会——哪个行业在走强哪条消息值得重视做研究——把感兴趣的几家公司翻一遍报表选股票——在几千只股票里排出前几名做回测——把想法放到历史上跑一遍看看是不是自欺欺人控风险——算清楚最坏情况会亏多少仓位该怎么收管组合——手里已经有五只新来的这只跟它们冲不冲突交易——真的下单还要盯着成交复盘——收盘后回头看看今天哪一步想错了。麻烦在于这九件事没有一件可以不干而这九件事没有一件可以和另外八件同时干。 看市场要盯盘做研究要安静下单要专注复盘要等收盘。它们的时间窗口互相打架需要的心理状态也完全不同。第 2 件要贪心第 6 件要胆小第 8 件要果断第 9 件要诚实。 我把这张纸贴在了显示器边上贴了很久。贴纸没有解决问题它只是让我每天更清楚地知道自己做不到。1.2我的第一个答案错得很彻底我一开始的答案是找一个更聪明的模型把这些事全交给它。 逻辑听起来很顺既然这九件事都需要判断力那就找一个判断力最强的家伙让它从头做到尾。中间不交接就不会掉信息不分工就不会互相推诿。 我甚至已经想好了提示词的开头你是一位经验丰富的量化投资专家请分析今天的市场并决定买什么。第一次跑它给了我一份相当漂亮的回答。市场判断、行业排序、三只候选、买入理由、风险提示一样不缺。文笔很好逻辑也很顺。 第二次跑我发现它推荐的第一只股票和第一次完全不同。 第三次跑我又发现它说的“当前市盈率 18.3 倍”这个数字在前两次的回答里根本没有出现过而且我在行情库里查不到。 那一刻我意识到问题不在“它聪不聪明”而在**我把一个需要被拆开的过程塞进了一个没有接缝的黑盒子**。 黑盒子有三个致命的毛病第一它的正确性无法局部检查。输出一份完整的投资建议你只能选择全信或者全不信。你没法说“行业判断我认可风险那一块我不放心”。因为它是同一个模型在同一次生成的你拆不开。第二它没有内部制衡。一个人既负责“推荐买什么”又负责“评估这个推荐的风险”那么在生成文字的那一刻这两个目标是在同一段计算里被同时优化的。它天然会选择自洽的答案而不是暴露矛盾的答案。第三“什么都做”的角色最后一定只做其中一件事。这不是模型的缺陷是人性的规律也是任何被过度授权的系统的规律。我见过太多次被要求“既要收益又要安全”的策略最后一定选择其中一个然后给另一个找一套说辞。你注册了一家公司法人、财务、销售、法务、出纳全是你自己。 第一天你签了一份合同。 第二天你发现合同里的付款条件是“货到三个月后付”而公司账上只够撑四十天。 问题不在于你不够聪明。问题在于**在同一个脑子里“拿下这单”和“这笔钱什么时候回来”会被合并成一个念头。** 你不会先写完销售方案再换一顶帽子去审它——你只会一边写一边替自己圆场。 要解决它不需要一个更聪明的脑子需要**第二个脑子并且给它一个不同的考核指标**。所以我推翻了自己的第一个答案。正确的方向不是“找一个人做完九件事”而是——1.3不是找人是开一家公司一间五个人的小公司是怎么解决“又要进攻又要防守”这个矛盾的 它不靠让每个人都变成完人。它靠三件事**分岗、定责、留痕**。 分岗是说每个人只盯一小块定责是说每块工作有一个明确的、可被追问的产出留痕是说每个判断都要写下来写下来的东西要能被别人查。 这三件事恰好可以把那九件事切成五份并且切得干干净净。 我们先把公司需要的“工种”想清楚。不要去查任何资料就凭常识问三个问题谁看——谁负责把外部世界的信息变成事实。谁想——谁负责基于事实形成主张。谁动手——谁负责把主张变成动作。 三个问题三个工种。这是一个“差不多对”的模型它抓住了分工的本质。但它有一个明显的裂缝在“谁想”里面“提出主张”和“否决主张”被塞进了同一个人。 我们刚刚才用了整整一节论证为什么这件事不能干。所以“谁想”必须再拆一刀。 拆完还有第二道裂缝。“谁看”里面“搞清楚主人想要什么”和“研究市场发生了什么”也不是一回事。前者是问客户的预算和风险偏好后者是问市场。一个向内一个向外混在一起就会出现那种最经典的错误因为我想赚大钱所以我看什么都觉得能赚大钱。一台心脏手术台上至少站着三类人主刀、助手、麻醉。 助手不是“水平差一点的主刀”麻醉也不是“管睡觉的助手”。他们站在同一个台子边上但**看的是不同的仪表担的是不同的责任犯的是不同性质的错**。 主刀可以决定在哪一刀切下去麻醉可以决定这台手术现在能不能继续——即使主刀认为可以。 没有人会说“让主刀一个人干完算了反正他最懂”。因为所有人都知道**手术失败的代价主要不是因为主刀不够熟练而是因为当主刀判断失误时没有人有资格喊停。**于是那三个工种被拆成了五个岗位。这就是本书从头到尾要讲的那个团队。1.4五个人五份活表 1.1 是这支队伍的编制。注意第四列——每个岗位在系统里都对应一组**有名字的任务类型**而不是一句模糊的“负责相关分析”。任务类型是这支队伍最关键的工程细节之一我们在第 3 章会专门拆开它这里先看个大概。表 1.1五个智能体的岗位与任务类型角色中文一句话职责任务类型数AgentPlanner投资规划师弄明白你要什么、你能承受什么3AgentQuant量化分析师市场发生了什么、哪些股票值得排前面7AgentRisk风控师这件事最坏会坏到什么程度6AgentCIO首席投资官综合所有意见拍板并对结果负责6AgentTrader操盘手把拍板的结果变成订单并盯着它成交5任务类型总数 27 个定义于internal/agentworkflow/models.go。系统源码internal/agentworkflow/models.go核对时间 2026-09-24。这五个岗位之间的关系不是上下级汇报而是一条流水线。信息从左边流进动作从右边流出图 1.1五个智能体的流水线。第一个岗位向内问“你要什么”其余四个向外回答“能做什么”。现在逐个看这五份活到底在干什么。投资规划师Planner。它是队伍里唯一“向内看”的人。它的任务只有三类更新用户画像UPDATE_PROFILE、检查投资委托书是否还成立CHECK_MANDATE、出合规报告COMPLIANCE_REPORT。 它不管市场涨跌它管的是那把尺子。尺子要是歪的后面所有人量出来的都是错的。第 26 章我们会看到这把尺子最终会变成一个“单票权重上限”——风险等级保守的人上限是 15%均衡是 20%成长是 30%。量化分析师Quant。它是队伍里最像“研究员”的人任务最多七项市场扫描MARKET_SCAN、因子健康度检查FACTOR_HEALTH、选股STOCK_SCREENING、组合模拟PORTFOLIO_SIMULATION再加上寻找新因子ALPHA_DISCOVERY、判断市场状态REGIME_DETECTION、因子失效分析FACTOR_BREAK_ANALYSIS。 它的产出必须是可复算的数字不是形容词。“动量因子最近 20 天有效”这句话在它这里是不合格的合格的写法是“动量因子最近 20 天的 RankIC 是某某值覆盖了百分之多少的样本”。风控师Risk。它是队伍里唯一有否决权的人六项任务全部围绕“最坏情况”隔夜风险OVERNIGHT_RISK、日终风险END_OF_DAY_RISK、交易风险检查TRADE_RISK_CHECK、压力测试STRESS_TEST、风险评估RISK_ASSESSMENT、风险预警RISK_ALERT。 请特别注意“否决”这两个字。风控师不负责提出更好的方案它只负责说“这个方案不行”。一个只能说不、不能说是的角色看起来很弱——这恰恰是它的力量来源。第 22 章会证明一条只能收紧、不能放松的约束是整个系统里最难被绕过的那一条。首席投资官CIO。它是唯一能拍板的人六项任务晨间简报MORNING_BRIEF、投资决策INVESTMENT_DECISION、组合回顾PORTFOLIO_REVIEW、紧急决策EMERGENCY_DECISION、每日复盘DAILY_REVIEW、T1 计划T1_PLANNING。 它的位置很微妙。它既不是最懂市场的那是 Quant也不是最懂风险的那是 Risk它是那个要在两边都不服气的时候给出一个数的人。第 6 到第 8 章会花整整三章讲它怎么拍板因为这是全书技术含量最高的一段。操盘手Trader。它唯一的工作是把决定变成订单五项任务生成订单GENERATE_ORDER、执行订单EXECUTE_ORDER、监控订单MONITOR_ORDER、执行报告EXECUTION_REPORT、对账RECONCILIATION。 它是队伍里权限最小的角色。在系统的权限定义里它只有一个权限读用户画像。它不能选股、不能改风险上限、不能否决任何人。它甚至不能“觉得今天这只票不错所以多买一点”——它的买入口被一道硬闸门卡着第 31 章会讲那道闸门。这一节的骨架五个岗位 三个问题的两次细分谁看Planner 向内 Quant 向外→ 谁想Risk 否决 CIO 拍板→ 谁动手Trader。每个岗位的产出必须能被下一个岗位直接使用也必须能被第一个人复核。1.5它在系统里长什么样上面讲的全是“应该怎样”。一个真的跑起来的系统必须把“应该”写成代码。 第一件事是把五个角色变成五个常量。在internal/agentworkflow/models.go里它们长这样 代码 1.1五个角色的常量定义节选const ( AgentCIO AgentRole CIO // 首席投资官 AgentPlanner AgentRole PLANNER // 投资规划师 AgentQuant AgentRole QUANT // 量化分析师 AgentRisk AgentRole RISK // 风控师 AgentTrader AgentRole TRADER // 操盘手 )这段话在说什么系统里不存在“一个通用 AI”这种东西。任何一次智能体调用都必须先声明它是五个角色中的哪一个。角色不是给模型看的人格设定而是给代码看的身份标签——后面所有的权限判断、工具可见性、任务类型校验都要拿这个标签去查表。 第二件事是给每个角色装配它自己能用的工具。在internal/brainhost/team_tools.go里系统逐个调用RegisterTool把工具挂到对应角色身上。当前版本一共装配了 25 个工具入口系统源码internal/brainhost/team_tools.go注册调用点位于第 338--452 行区间核对时间 2026-09-24。1其中一部分的可见范围如表 1.2 所示。表 1.2工具的角色可见性节选工具名可用角色它回答的问题get_tdx_stock_dataQUANT, RISK这只股票的历史行情长什么样search_tdx_stocksQUANT, CIO在几千只股票里找出符合条件的那几只run_backtestQUANT这个策略放到历史上跑一遍结果如何market_sixdim_detectCIO, PLANNER, RISK, QUANT今天这个市场适合下多少注select_next_day_strategyQUANT, CIO明天用哪条策略来管持仓optimize_portfolioCIO, QUANT这五只股票各买多少组合波动最小系统源码internal/brainhost/team_tools.go核对时间 2026-09-24。这张表里藏着一个很容易被忽略的设计。run_backtest跑回测只有 QUANT 能用——因为回测是“研究”研究的结果必须经过风控和 CIO 才能变成动作。而market_sixdim_detect市场判势四个角色都能用因为“今天市场好不好”是共享上下文不是任何人的私产。很多介绍多智能体的文章画面上是五个并排的对话框每个对话框里贴一段不同的人格设定“你是一个谨慎的风控师”“你是一个激进的交易员”。 这不是多智能体这是多开窗口。它们的区别只有一个问题就能测出来如果那个“激进交易员”窗口直接说“买入 603xxx 一万股”系统会真的下单吗在这个系统里不会——因为下单权限只给了AgentTrader而AgentTrader的工具集里根本没有“自己决定买什么”这个能力。人格设定挡不住越权只有代码里的权限表挡得住。所以判断一个多智能体系统是真货还是演示品不看它有几个角色看它有几个会拒绝的角色。我在最初那版提示词里用的词是“你是一位经验丰富的量化投资专家”。 这句话听起来无害其实是在给模型发一张空白支票它被授权“凭本事判断”。而语言模型的本事恰恰是生成看起来合理的文本——这两件事在投资里几乎是反义词。 后来的做法是彻底反过来不再问它“你懂不懂”而是给它一份合同告诉它该做哪几步、能做哪些事、产出必须长什么样、数据取不到时必须说什么。 一个诚实的失败比一个漂亮的编造有价值一万倍。系统里为此专门留了两个“拒答码”——DATA_UNAVAILABLE和DATA_INVALID。它们的存在本身就是设计如果不给模型留一个“我不知道”的出口它就只能编。1.6它还没有被约束住现在你大概明白这支队伍长什么样了。但有三个问题还没回答它们正好是接下来三章的题目。问题一划分了岗位谁听谁的我们说风控师有否决权说操盘手权限最小。这些说法在系统的哪个文件里如果一个角色被删了权限记录系统会放行还是拒绝这是第 2 章的内容。问题二凭什么相信它真的照做了“任务类型”这四个字听起来像文档里的分类但在系统里它是可执行的约束。一个模糊的指令会被拆成什么谁检查它有没有跑偏这是第 3 章的内容。问题三它拿什么去做我们反复说“模型的产出必须是可复算的数字”可是模型自己算不算数谁来算这是第 4 章的内容。 回到开头那张贴在显示器边上的纸。它现在还在只是内容变了。原来写的是九件事现在写的是五个岗位——以及每个岗位不许做的事。 一个人当然没办法同时当研究员、风控和操盘手。但他可以当那个设岗、定规、看记录的人。这大概是这本书里最重要的一次身份转换你从“操盘的人”变成了“开公司的人”。五个角色的常量与中英映射internal/agentworkflow/models.go27 个任务类型的定义internal/agentworkflow/models.go权限矩阵与三条硬约束internal/agentworkflow/permissions.go团队装配与工具的按角色注册internal/brainhost/team_tools.go前端“AI 团队”页5 个状态卡片、市场时段指示、8 权限 × 5 角色矩阵ui/src/pages/下的团队页面路由表在ui/src/App.tsx动手试一试五分钟打开系统进入左侧菜单的AI 团队页。找到“权限矩阵”表格。它是 8 行操作权限乘 5 列角色。逐行看哪些操作同时被两个以上角色共享哪些操作只属于一个角色找到market_sixdim_detect对应的那一行“市场判势”看它被授予了哪几个角色。然后再找“执行订单”看它被授予了谁。自己回答一个问题如果让你给这五个角色各删掉一个权限你会删谁的那个为什么这个页面的数据每 30 秒自动刷新一次所以你可以一边看一边等它变化。下章我们就去看那张权限表——看它怎么写进代码以及“让能改风险上限的人同时执行下单”这句话为什么是一起真实的、代价很高的设计错误。QuantBot开源地址jeokeo011222/quantbot: QuantBotAI 量化机器人的全量源码。基于 **GoReact TypeScript Vite** 构建通过 **Wails** 与 Go 后端通信提供 A 股量化交易的图形界面六维判势、多因子选股、AI 智能体决策、策略回测、实时活动、审计日志等。