源码级核验:decision.py + agent_prediction_evaluation.py + news_ranker.py
PanWatch 的 AI 结论怎么复核:评级从哪来、后验怎么算、多少样本才算够
PanWatch 的多 Agent 推理链看起来很有说服力,但「看起来完整」不等于「结论可靠」。本页把可核验的三件事讲清楚:评级是从哪一步取出来的(原文里有一处明确的优先顺序)、REVIEW 代表什么(它不是「持有」)、后验评估按什么口径算命中(含项目自己设的 20 样本门槛)。目标不是证明 AI 能预测市场,而是判断它有没有提供有价值的第二意见。
PanWatch 评级是从哪里取出来的:一处明确的优先顺序
PanWatch 官方的 decision.py 里写了一段注释,解释为什么不能直接用上游返回的评级——这是本站认为整份代码库里最值得单独引用的一段。
src/modules/automation/tradingagents/decision.py(原文节选)# 评级以 PM 正文(final_trade_decision,用户实际看到的最终决策书)为权威来源:
# 上游 propagate() 第二个返回的 decision 是对正文的二次提炼,会失真(正文写"卖出"
# 却返回 "HOLD"),所以优先解析正文里的显式评级标签。
# 优先级:正文显式标签 > 上游 decision > 正文模糊扫描兜底。| 优先级 | 取值来源 | 为什么这样排 | 失败时怎么办 |
|---|---|---|---|
| ① 最高 | PM 决策书正文(final_trade_decision)里的显式评级标签 | 这是用户实际看到的最终结论,最接近「模型说了什么」 | 解析不到就降到下一级 |
| ② 次之 | 上游返回的 decision 字段 | 它是对正文的二次提炼,官方注释明确说会失真(正文写卖出、字段返回 HOLD) | 仍解析不到就降到第三级 |
| ③ 兜底 | 对正文做模糊关键词扫描 | 宁可给出可能不精确的档位,也不留空 | 全部失败则标记为 REVIEW |
| REVIEW | 上游判定整份 PM 输出不可解析 | 官方注释:REVIEW 不是可交易的 Hold | 显示为「待人工复核」,动作降级为不触发自动交易 |
| 上游 5 档 | 界面中文标签 | 用于动作的 3 档 | 是否触发提醒 |
|---|---|---|---|
buy | 买入 | buy | 是 |
overweight | 增持 | buy | 是 |
hold | 持有 | hold | 否 |
underweight | 减持 | sell | 是 |
sell | 卖出 | sell | 是 |
review | 待人工复核 | hold(为阻止自动交易而刻意降级) | 是(提醒你去人工看) |
decision 字段与正文可能不一致,以正文为准。PanWatch 后验评估怎么算?按真实交易日取价、±2% 判定、20 样本门槛
PanWatch 的后验评估口径写在一个纯计算模块里,官方把它称为「公开政策」——API 与前端都不自行复制规则,因此判定标准只有这一份。
src/modules/automation/agent_prediction_evaluation.py(原文节选)FLAT_THRESHOLD_PCT = 2.0
EVALUATION_POLICY = {
"horizon_unit": "trading_days",
"flat_threshold_pct": FLAT_THRESHOLD_PCT,
"actions": {
"buy": "后续收益大于 0 记为命中",
"add": "后续收益大于 0 记为命中",
"sell": "后续收益小于 0 记为命中",
"reduce": "后续收益小于 0 记为命中",
"avoid": "后续收益小于 0 记为命中",
"hold": "后续绝对收益小于 2% 记为命中",
"watch": "后续绝对收益小于 2% 记为命中",
},
}| 建议方向 | 命中判定 | 含义与陷阱 |
|---|---|---|
| 买入 / 加仓(buy / add) | 后续收益 > 0 即命中 | 只要涨了就算命中,哪怕只涨 0.1% |
| 卖出 / 减仓 / 回避(sell / reduce / avoid) | 后续收益 < 0 即命中 | 只要跌了就算命中,幅度不计 |
| 持有 / 观察(hold / watch) | 后续绝对收益 < 2% 即命中 | 横盘算命中;涨跌超过 2% 就算不命中 |
| 无法判定(缺结果价或基准价) | 不计入命中率分母 | 样本不足时统计会失真,所以项目另有门槛 |
| 评估环节 | 实现方式 | 为什么这样设计 |
|---|---|---|
| 取价基准日 | 预测日当天或之前最后一根有行情的 K 线 | 避开停牌与休市:K 线序列本身就是交易日历 |
| 结果价 | 基准日之后第 N 根 K 线的收盘价(N = horizon 交易日) | 停牌、周末与节假日不占用 horizon,比自然日更贴近真实持有期 |
| 基准价 | 优先用建议的触发价 trigger_price,缺失时才用预测日收盘价 | 用触发价更接近「你实际会在什么价位上行动」 |
| 旧数据 | 按自然日评估(calendar_days_legacy) | 历史行没有标的交易日口径,且统计时会单独区分 |
| 样本不足 | 5 日口径已完成样本 < 20 条 时标记 insufficient_sample | 项目自己认为少于 20 条不足以说明问题 |
| 单次处理量 | 每次最多处理 300 条待评估、最长 horizon 10 天 | 避免一次性拉爆行情接口 |
PanWatch 输出里哪些部分是「规则的」、哪些部分是「模型的」
把 PanWatch 的一条分析结论拆开看,你会发现不同环节的可信度差别很大。下表按环节标明实现方式——这部分几乎不会出现在任何项目介绍里,但它直接决定你该怎么读结论。
| 环节 | 实现方式 | 可靠性含义 | 你该怎么对待 |
|---|---|---|---|
| 行情与 K 线 | 来自数据源的原始数值 + 主备降级 | 受数据源本身质量限制;部分字段未校准 | 关键数值自己复核一次来源 |
| 新闻情绪 | 规则化:10 个正向词 + 10 个负向词计数比较 | 这是词表匹配,不是模型判断;措辞不标准就会判错 | 不要把情绪标签当结论,回到原文标题 |
| 新闻排序 | 规则化:importance×5 + 命中标的 +2 + 关键词表 +2 + 含「公告」+1 | 排序反映的是启发式权重,不是「重要性」的客观度量 | 关注被排到前面的是哪几条,以及为什么 |
| 新闻主题摘要 | 规则化:标题中文词频减去停用词 | 本质是词频统计,可能把无意义高频词当主题 | 把它当索引,不当摘要 |
| 四类分析师报告 | 模型生成,输入是上面这些数据与上下文 | 质量取决于输入质量与模型能力 | 重点看它的依据是否指向真实数据 |
| 多空辩论与风控 | 模型生成的多轮对话 | 能暴露分歧,但不代表任何一方正确 | 看双方各自的依据,而不是看谁声音大 |
| PM 决策与评级 | 模型生成,经映射规则转成档位 | 映射规则可靠(可核验);结论本身仍不可预测 | 作为第二意见,并按后验记录长期观察 |
PanWatch 人工复核怎么做?每次看结论都按这七项过一遍
下面这张 PanWatch 复核清单是本站基于官方口径整理的(证据等级 ④),目的是把复核变成可重复动作,而不是凭感觉。
七步人工复核清单
trigger_price 与预测日;自己动手记录能让后续统计更可信。| 你要回答的问题 | 看什么 | 什么情况下应该下调信任度 |
|---|---|---|
| 数据是不是最新的 | 分析时间戳、行情时间、最新交易日 | 数据源健康度有失败记录,或标的正处于停牌 |
| 输入维度够不够 | 该市场支持哪几类数据(见数据源页覆盖矩阵) | 港股/美股缺少事件、两融、龙虎榜等维度 |
| 依据能不能核 | 结论引用的数值与公告 | 结论里出现无法回溯到数据源的数字或事件 |
| 结论有没有被系统标记 | 是否显示「待人工复核」 | 出现 REVIEW 标记,或提醒里带出该标记 |
| 有没有反例 | 风控三方是否提出了与结论相反的风险点 | 风控提出明确反例但 PM 结论毫无变化 |
| 历史上对不对 | 后验评估页的命中统计与样本量 | 样本量低于门槛,或统计口径含大量旧的自然日数据 |
| 要不要动手 | 你自己的资金规则 | 任何时候——工具给的是研究材料,不是执行指令 |
PanWatch AI 输出可信度与复核常见问题
答案基于固定 commit 的源码与官方文档;涉及具体标的的判断请以你自己的研究为准,本站不提供投资建议。
它的评级是怎么来的?可以信任吗?
评级优先从 PM 决策书正文里解析显式标签,取不到才退回上游的 decision 字段,再取不到才做模糊扫描;三者都失败则标记 REVIEW。这条优先顺序是官方为了修正「上游二次提炼会失真」而刻意设计的(正文写卖出、字段却返回 HOLD)。也就是说映射规则本身是可核验的,但被映射的那个结论仍不可预测。
「待人工复核」是什么意思?等于持有吗?
不等于。上游从 0.4.0 起在无法解析 PM 评级时返回 REVIEW,PanWatch 把它显示为「待人工复核」,并把动作降级成不触发自动交易的状态。官方注释明确写:REVIEW 不是可交易的 Hold。界面上两者标签不同,但都会落在 hold 这个动作字段上——看标签而不是看动作字段。
它会不会自动下单?
不会。项目定位是监控与研究;把深度分析结论写进模拟盘信号的开关默认关闭,即使打开也只处理买入方向(buy/add),只写模拟信号用于演练,不接触真实资金。
后验评估的「命中」怎么算?
按方向判定:买入/加仓只要后续收益大于 0 就算命中;卖出/减仓/回避只要收益小于 0 就算命中;持有/观察则要求后续绝对收益小于 2% 才算命中。取价按真实交易日(基准日之后第 N 根 K 线),基准价优先用建议触发价。幅度只在持有类判定里参与。
能不能看命中率来判断值不值得用?
可以看,但要先确认样本量。项目自己设了门槛:5 日口径已完成样本少于 20 条时标记为「样本不足」。在这个量级以下,命中率会被少数几笔结果主导,不具参考性。另外旧数据是按自然日评估的(calendar_days_legacy),统计口径与新数据不同,混在一起看会失真。
新闻情绪和技术面分析是模型做的吗?
不全是。新闻情绪是规则化的:10 个正向词与 10 个负向词做计数比较;新闻主题摘要本质是标题中文词频统计;新闻排序用的是「重要度×5 + 命中标的 +2 + 关键词表 +2 + 含公告 +1」这类启发式权重。真正的模型判断发生在四类分析师报告、多空辩论与 PM 决策这几步——知道哪些环节是规则的,能显著改善你读结论的方式。
那我该怎么用这个工具?
把它当第二意见:用它的多角度检查补你自己容易忽略的维度,用它的后验记录长期观察它在你的标的上有没有增量信息,但决策与执行仍然由你负责。这也是官方自己的定位——监控与研究工具,不是交易系统。