叙事页 · S5 · 流水线

框架

Agent预测系统 · 专门文档

Agent预测系统是四因子决策框架的智能补充,当用户未提供预测时,系统基于用户"动量为先,反直觉"的交易风格自动生成预测。

框架 · 资产·机制 · 框架/Agent预测系统.md · 11434 B

01
系统概述
Agent预测系统是四因子决策框架的智能补充,当用户未提供预测时,系统基于用户"动量为先,反直觉"的交易风格自动生成预测。
02
触发条件
用户连续多日未更新日度预测
03
预测逻辑
基于用户"动量为先,反直觉"风格:
04
预测示例
05
验证与优化
禁止用"震荡/反弹/突破"等文字描述作为验证对象。

场景:S5 · 流水线 · 共 5 幕 · 幕题与副句逐字取自本文小标题与首句

Agent预测系统 · 专门文档


系统概述

Agent预测系统是四因子决策框架的智能补充,当用户未提供预测时,系统基于用户"动量为先,反直觉"的交易风格自动生成预测。


触发条件

用户未预测场景

  • 用户连续多日未更新日度预测
  • 盘前简报中未找到有效预测输入
  • 用户处于观望状态,等待左侧触发点

系统自动触发

# 检查用户预测状态
if [ -z "$user_prediction" ] || [[ "$user_prediction" == *"未输入预测"* ]]; then
# 启动Agent预测系统
generate_agent_prediction
fi

预测逻辑

1. 动量数据采集

# 获取近5日黄金序列
gold_sequence="4355,4378,4389,4362,4369"
gold_prices=(${gold_sequence//,/})

# 计算日度变化
day1=${gold_prices[0]} # 4355
day2=${gold_prices[1]} # 4378
day3=${gold_prices[2]} # 4389
day4=${gold_prices[3]} # 4362
day5=${gold_prices[4]} # 4369

# 计算百分比变化
trend1=$(echo "scale=2; ($day2 - $day1) / $day1 * 100" | bc) # +0.53%
trend2=$(echo "scale=2; ($day3 - $day2) / $day2 * 100" | bc) # +0.25%
trend3=$(echo "scale=2; ($day4 - $day3) / $day3 * 100" | bc) # +0.48%
trend4=$(echo "scale=2; ($day5 - $day4) / $day4 * 100" | bc) # -0.62%

2. 动量状态判断

# 动量方向判断
if (( $(echo "$trend4 > 0.5" | bc -l) )); then
momentum_direction="positive"
momentum_strength="strong"
elif (( $(echo "$trend4 < -0.5" | bc -l) )); then
momentum_direction="negative"
momentum_strength="strong"
else
momentum_direction="neutral"
momentum_strength="weak"
fi

3. 反直觉预测生成

基于用户"动量为先,反直觉"风格:

动量方向动量强度Agent预测传统思维反直觉逻辑
positivestrong谨慎观望追涨强涨后回调风险
positiveweak等待突破小幅追涨动量不足,等待确认
negativestrong左侧机会杀跌跌透后反弹机会
negativeweak等待突破观望跌势未尽,等待确认
neutralany等待突破随机操作震荡时等待方向选择

预测示例

场景1:强上涨后的谨慎观望

近5日序列:4,300 → 4,320 → 4,340 → 4,360 → 4,380
日度变化:+0.47% → +0.62% → +0.58% → +0.56%
动量状态:positive + strong
Agent预测:日度:谨慎观望
逻辑:连续强涨后回调风险增加,符合反直觉风格

场景2:下跌后的左侧机会

近5日序列:4,400 → 4,380 → 4,360 → 4,340 → 4,320
日度变化:-0.45% → -0.46% → -0.46% → -0.58%
动量状态:negative + strong
Agent预测:日度:左侧机会
逻辑:深度下跌后反弹概率增加,符合左侧思维

场景3:震荡等待突破

近5日序列:4,350 → 4,365 → 4,358 → 4,372 → 4,369
日度变化:+0.34% → -0.16% → +0.32% → -0.07%
动量状态:neutral + weak
Agent预测:日度:等待突破
逻辑:震荡无方向,等待明确信号,符合左侧思维

验证与优化

1. 预测准确性评估(v2 · 可证伪版)

⚠ 本节于 2026-09-12 重写。旧版 bash 实现有两个致命缺陷,已废弃:

1. 语法非法:[[ "$x" =~ "震荡"|"小幅" ]] 在 bash 中不构成正则交替——引号内的模式按字面量匹配,震荡"|"小幅 这种串永远不可能出现在结果里,函数恒返回"错误"。

2. 判据不可证伪(更严重):"谨慎观望" 只要结果含"震荡/小幅"就算对,"等待突破" 只要结果含"方向"就算对——而"方向"一词几乎出现在每句描述里。这类判据在任何行情下都能自圆其说,其 100% 命中率不含任何模型信息量。

依据 框架/数据口径定义#六、两套"验证率"必须分开命名(库内曾出现 3 个版本)。

1.1 核心原则:预测必须落到数字上

禁止用"震荡/反弹/突破"等文字描述作为验证对象。所有预测必须收敛为可比较的数值区间:

预测标签可证伪定义(次日 LBMA PM Fix 日涨跌)判证实判证伪
观望 / 谨慎观望 / 等待突破预期涨跌幅落在 ±0.30% 以内|Δ| ≤ 0.30%|Δ| > 0.30%
左侧机会(看涨)预期次日收涨且涨幅 > +0.30%Δ > +0.30%Δ ≤ +0.30%
规避风险(看跌)预期次日收跌且跌幅 > 0.30%Δ < -0.30%Δ ≥ -0.30%
未给出方向与区间——记 未覆盖记 未覆盖
  • ±0.30% 为默认区间 [待验证]:该阈值应按 60 日日涨跌分布的 ~20 分位标定,并用 3 个月滚动样本外验证后固定。未标定前不得作为模型有效性证据。
  • 未覆盖 不进任何分母:未给方向的预测既不算证实也不算证伪,单独统计为"覆盖率"指标。

1.2 参考实现(Python,可直接运行)

# validate_prediction.py — 可证伪的日度预测判定
# 用法:python3 validate_prediction.py <预测标签> <前收> <今收>
import sys

NEUTRAL_BAND = 0.0030  # ±0.30%,[待验证] 需按 60 日分布 20 分位重标

def day_change(prev: float, today: float) -> float:
    if prev is None or today is None or prev == 0:
        raise ValueError("缺数据:不得用 0 或前值填充")
    return (today - prev) / prev

def validate(label: str, prev: float, today: float) -> str:
    d = day_change(prev, today)
    if any(k in label for k in ("观望", "等待", "谨慎")):
        return "证实" if abs(d) <= NEUTRAL_BAND else "证伪"
    if any(k in label for k in ("左侧", "看涨", "反弹", "做多")):
        return "证实" if d > NEUTRAL_BAND else "证伪"
    if any(k in label for k in ("看跌", "规避", "做空", "减仓")):
        return "证实" if d < -NEUTRAL_BAND else "证伪"
    return "未覆盖"   # 没给方向也没给区间 → 不进分母

if __name__ == "__main__":
    label, prev, today = sys.argv[1], float(sys.argv[2]), float(sys.argv[3])
    d = day_change(prev, today)
    print(f"预测={label} | 日涨跌={d*100:+.2f}% | 判定={validate(label, prev, today)}")

自检(可直接跑,验证实现正确):

$ python3 validate_prediction.py "观望中" 4353.15 4382.25        # 09-01→09-02 +0.67% → 证伪
$ python3 validate_prediction.py "观望中" 4568.95 4562.75        # 08-27→08-28 −0.14% → 证实
$ python3 validate_prediction.py "结构性新因子重塑" 4405.80 4420.0  # 未给方向 → 未覆盖
$ python3 validate_prediction.py "观望中" 4562.75 4353.15        # 09-01 −4.59% → 证伪
# 脚本实际位置:scripts/validate_prediction.py

1.3 汇总口径

方向覆盖率 = 有方向预测条数 ÷ 总预测条数
可证伪命中率 = 证实 ÷ (证实 + 证伪)        # 未覆盖不进分母
基准率(对照) = P(|日涨跌| ≤ 0.30%)          # "什么都不预测、只说小幅波动"的命中率

必须同时报告命中率与基准率。若命中率 ≤ 基准率,则该预测不具备信息量,不得作为模型有效性依据。

参考:2026-08-17→09-08 实测窗口内,基准率 P(|Δ|<0.30%) = 31%,P(|Δ|<0.50%) = 44%;旧口径给出 100%。

2. 动量阈值优化

# 当前阈值设置
STRONG_THRESHOLD=0.5 # 强动量阈值
WEAK_THRESHOLD=0.2 # 弱动量阈值

# 历史验证优化
# 根据历史准确率调整阈值
if [ "$accuracy_rate" -lt 70 ]; then
# 调整阈值
STRONG_THRESHOLD=$(echo "scale=2; $STRONG_THRESHOLD + 0.1" | bc)
fi

3. 用户风格适配

未实现 [待验证]。此节此前是一个空的 analyze_user_style() 函数壳,无输入、无输出、无调用方,留着会误导为已有自适应能力。真实需求(若将来实现):按用户历史预测的方向命中率 / 幅度命中率 / Brier Score 分档,反向调整 Agent 预测的激进度。实现前不得声称系统具备风格自适应。


输出格式

Agent预测报告

## Agent预测分析

### 动量数据
- 近5日序列:4,355 → 4,378 → 4,389 → 4,362 → 4,369
- 日度变化:+0.53% → +0.25% → +0.48% → -0.62% → +0.16%
- 动量方向:neutral(震荡)
- 动量强度:weak(弱)

### 预测逻辑
基于用户"动量为先,反直觉"风格:
- 震荡期:等待突破信号
- 弱动量:不追涨杀跌
- 左侧思维:等待更好机会

### Agent预测
**日度:等待突破 → 转化为区间:预期次日涨跌幅落在 ±0.30% 以内**

### 验证标准(可证伪)
- 证实:次日 LBMA PM Fix 日涨跌 `|Δ| ≤ 0.30%`
- 证伪:`|Δ| > 0.30%`
- 对照基准率:本窗口 P(|Δ|≤0.30%) ≈ 31%;命中率若不高于此值,本预测无信息量
- **禁止**使用"震荡行情持续或出现突破 → 算准确"这类任何行情下都成立的表述

能力边界(替代旧版“系统优势”宣称)

1. 当前可用

  • 可在手动复盘中基于真实 LBMA PM 序列生成候选预测格式。
  • 可将候选预测翻译为数值区间和证伪条件。
  • 可把缺失数据、未覆盖预测和待验证参数明确标出。

2. 当前未实现或未验证

  • 没有自动预测发布链;自动化脚本已停用。
  • 没有经过样本外验收的用户风格自适应。
  • “反直觉”“左侧”是研究偏好,不是已验证的风险降低能力。
  • 动量信号不等于收益、胜率或低风险保证。

3. 恢复性能评估的条件

  • 结构化预测日志在结果发生前追加落盘;
  • 与中性、简单动量和随机基准比较;
  • 报告覆盖率、区间命中、Brier/校准、置信区间和成本;
  • 完成预先登记的样本外验收后,才可使用“有效/有信息量”等表述。

部署配置

状态属实说明:自动化脚本已停用(现行无自动生成流程)。Agent 预测逻辑供手动复盘时参考——当用户未提供预测时,Agent 基于动量分析生成预测,并必须按 §1.1 落到数值区间。

若用户未在盘前给出预测:
  1. Agent 取近 5 个真实交易日 LBMA PM Fix 收盘(缺值不补、不插值)
  2. 按 [[框架/数据口径定义#五、L1 动量判定的优先级(消除自相矛盾)|L1 强度优先]] 判定动量状态
  3. 按下方"反直觉映射表"给出方向标签
  4. 【强制】把方向标签翻译为数值区间(±0.30% / >+0.30% / <-0.30%),否则记为"未覆盖"
  5. 写入当日复盘"Agent预测"字段,含区间与证伪条件

不再提供 generate_agent_prediction 之类的占位调用——此前该函数从未实现,留着会让人误以为存在自动化流程。

日志记录

# 记录Agent预测过程
log "Agent预测启动"
log "动量分析:$momentum_direction $momentum_strength"
log "预测结果:$agent_prediction"

验证记录

# 记录预测准确性
echo "$date,$prediction,$actual,$accuracy" >> agent_prediction_history.csv

版本历史

  • v1.0(2026-08-16):初始版本,基础动量分析和反直觉预测
  • v1.1(计划):增加用户风格适配和历史优化
  • v1.2(计划):增加多时间框架分析

*最后更新:2026-08-16*