如何读懂输出结果:信号、限额与最终决策 难度:动手 第一次跑通后,终端往往刷出大量彩色表格。若只盯着一个绿色的 BUY 做情绪决策,就浪费了这套系统的教育价值。本篇教你按「分析师信号 → 风险限额 → 组合最终决策」三层阅读,并对照 、 、 理解字段从何而来。 本文你将学到 signal、confidence、reasoning 三要素的含义与局限 风险限额如何压缩最终 quantity portfolio 层 action、quantity、confidence 如何综合产生 一套可复用的读报顺序与常见误读纠正 免责声明 以下解读方法仅用于理解教育模拟输出,不构成投资建议。终端中的买卖字样不会触发真实交易;你不应据此操作真实账户。
难度:动手
第一次跑通后,终端往往刷出大量彩色表格。若只盯着一个绿色的 BUY 做情绪决策,就浪费了这套系统的教育价值。本篇教你按「分析师信号 → 风险限额 → 组合最终决策」三层阅读,并对照 src/utils/display.py、src/agents/risk_manager.py、src/agents/portfolio_manager.py 理解字段从何而来。
以下解读方法仅用于理解教育模拟输出,不构成投资建议。终端中的买卖字样不会触发真实交易;你不应据此操作真实账户。
数据在 AgentState["data"] 中流动:analyst_signals 字典按 Agent 名索引,再按 ticker 索引到具体信号;组合管理读取风控写入的限额,调用 LLM 生成 PortfolioDecision 结构(见 portfolio_manager.py 中的 Pydantic 模型)。
print_trading_output 对每个 ticker 遍历 result["analyst_signals"],跳过 risk_management_agent 在「分析师表」中的展示(风控信息体现在限额层)。表格列含义:
| 列名 | 源码字段 | 含义 | 阅读提示 |
|---|---|---|---|
| Agent | 键名格式化 | 哪位分析师 | 对照 Agent 教程理解风格 |
| Signal | signal 大写 |
BULLISH / BEARISH / NEUTRAL | 先数票,再看极端观点 |
| Confidence | confidence |
0–100 数值 | 表示「口气硬度」,非统计胜率 |
| Reasoning | reasoning |
文字或 JSON | 学习论证结构,非内幕情报 |
颜色映射在 display.py 中写死:BULLISH 绿色、BEARISH 红色、NEUTRAL 黄色。
各分析师 Agent 通常:拉取金融数据 → 构造 prompt → 调用 LLM → 解析为结构化 {signal, confidence, reasoning} 写入 analyst_signals[agent_id][ticker]。不同 Agent 的 prompt 与工具不同,因此同一 ticker 出现分歧是常态,不是 bug。
选两名方向相反的 Agent,各读一段 reasoning,用一句话概括:他们在争什么? 例如:「格雷厄姆派强调安全边际与账面价值,伍德派强调颠覆性增长与长期 TAM。」
风险管理节点 risk_management_agent 在组合管理之前运行。源码逻辑概要:
start_date 至 end_date 的价格序列。remaining_position_limit(剩余可部署金额上限)、current_price 等写入 analyst_signals["risk_management_agent"][ticker]。组合管理读取这些字段:
risk_data = analyst_signals.get("risk_management_agent", {}).get(ticker, {}) position_limits[ticker] = risk_data.get("remaining_position_limit", 0.0) current_prices[ticker] = float(risk_data.get("current_price", 0.0)) max_shares[ticker] = int(position_limits[ticker] // current_prices[ticker])
因此:即使全体分析师极度看多,最终 quantity 也可能被 max_shares 压得很小——这是设计意图,模拟「高波动少加仓」的风控纪律。
你在终端未必看到单独一张「风控表」,但应建立直觉:
portfolio_manager 汇总各分析师压缩后的 {sig, conf},结合 max_shares、当前 portfolio 持仓与现金,调用 LLM 生成 PortfolioDecision:
class PortfolioDecision(BaseModel): action: Literal["buy", "sell", "short", "cover", "hold"] quantity: int confidence: int # 0-100 reasoning: str
print_trading_output 为每个 ticker 打印:
| 字段 | 含义 |
|---|---|
| Action | BUY / SELL / HOLD / SHORT / COVER |
| Quantity | 建议交易的股数(模拟) |
| Confidence | 组合层面对该决策的确信度 |
| Reasoning | 折中理由,常引用多空分歧 |
Action 颜色:BUY、COVER 为绿;SELL、SHORT 为红;HOLD 为黄。
常见原因:
max_shares 为 0 或极小,无法 meaningful 建仓。同一函数末尾汇总所有 ticker:Action、Quantity、Confidence,以及 Bullish / Bearish / Neutral 计数(遍历 analyst_signals 统计)。最后一节 Portfolio Strategy 打印组合管理的 reasoning 摘要。
这张表适合横向对比:例如 AAPL 五票看多、MSFT 三票看空,你会看到不同的 action 与 quantity。
可打印或在笔记软件中复制表格,按上述顺序标注。
主程序加 --show-reasoning 时,metadata.show_reasoning 为真,部分 Agent 会通过 show_agent_reasoning 输出更细中间步骤。这对学习 Agent 内部逻辑有帮助,但会增加终端长度;第一次阅读建议先不加,熟悉三层结构后再开。
| 误读 | 更合理的理解 |
|---|---|
| 多数 BULLISH = 一定涨 | 只是讨论室气氛,非市场预测 |
| Confidence 90 = 胜率 90% | 模型自我表达强度,非回测统计 |
| 出现 SELL = 应卖真实股票 | 系统不下单;你可能并无该持仓 |
| 两次 reasoning 措辞不同 = 程序坏了 | LLM 有随机性,结构相似即可 |
| Quantity 大 = 好机会 | 可能是低单价股票或限额较宽,需结合价格 |
回测使用 print_backtest_results(同在 display.py),按日期行展示每日 action、quantity、price、多空股数、组合价值,并周期性输出 PORTFOLIO SUMMARY(含 Sharpe、最大回撤等)。阅读单日决策时,仍适用本三层法;阅读整段曲线时,请参阅延伸章回测文档。
会读输出,才算真正「上手」。把 AI 对冲基金当作可运行的案例讨论课:分析师是发言嘉宾,风控是合规官,组合管理是主持人——你作为听众,要学会听分歧、看限额、理解折中。
下一篇请阅读同目录下的《Web 界面快速体验:可视化多智能体协作》。