信号事后分析 是做什么的?
概述
信号事后分析记录并分析由边缘管线、筛选器及其他技能生成的交易信号的结果。它将预测的方向与5天和20天的实际回报进行比较,将结果分类(真阳性、假阳性、错失机会、机制不匹配),并生成用于边缘信号聚合器权重调整和技能改进待办事项的反馈。
何时使用
- 交易平仓后,需要记录结果时
- 当审查一批已达到持有期(5或20天)的信号时
- 识别来自特定技能的系统性假阳性模式时
- 为边缘信号聚合器的权重校准生成反馈时
- 从决策质量指标构建技能改进待办事项时
- 定期(每周/每月)进行信号质量审计时
先决条件
- Python 3.9+
- FMP API密钥(可选,如果不手动提供退出价格,用于获取实际回报)
- 标准库 +
requests用于API调用 - 输入:JSON格式的信号记录(来自边缘信号聚合器或筛选器输出)
API密钥设置(可选)
如果要自动获取价格数据进行回报计算,请设置FMP API密钥:
export FMP_API_KEY=your_api_key_here
或者,通过命令行使用 --api-key YOUR_KEY 传递密钥。如果没有API密钥,您仍然可以通过提供 --exit-price 和 --exit-date 手动记录结果。
工作流程
第1步:准备信号记录
收集已关闭或已到期的信号记录。每条记录应包含:
signal_id:唯一标识符ticker:股票代码signal_date:信号生成日期predicted_direction:多头或空头source_skill:哪个技能生成了该信号entry_price:信号生成时的价格(可选,用于手动覆盖)
# 示例:列出已准备好进行事后分析的信号(5天以上)
python3 skills/signal-postmortem/scripts/postmortem_recorder.py \
--list-ready \
--signals-dir state/signals/ \
--min-days 5
第2步:记录结果
运行事后记录器以获取实际回报并对结果进行分类。
python3 skills/signal-postmortem/scripts/postmortem_recorder.py \
--signals-file state/signals/aggregated_signals_2026-03-10.json \
--holding-periods 5,20 \
--output-dir reports/
手动记录结果(当价格数据已可用时):
python3 skills/signal-postmortem/scripts/postmortem_recorder.py \
--signal-id sig_aapl_20260310_abc \
--exit-price 178.50 \
--exit-date 2026-03-15 \
--outcome-notes "在目标位平仓,5天内+3.2%" \
--output-dir reports/
第3步:分类结果
记录器自动将每个信号分类为以下四个类别之一:
| 类别 | 定义 |
|---|---|
| TRUE_POSITIVE | 预测方向与实际回报符号一致 |
| FALSE_POSITIVE | 预测方向与实际回报相反 |
| MISSED_OPPORTUNITY | 信号未被采纳但本来会有利润 |
| REGIME_MISMATCH | 由于市场机制变化导致信号失败 |
分类规则记录在 references/outcome-classification.md 中。
第4步:生成反馈文件
为下游消费者生成反馈:
# 生成边缘信号聚合器的权重调整建议
python3 skills/signal-postmortem/scripts/postmortem_analyzer.py \
--postmortems-dir reports/postmortems/ \
--generate-weight-feedback \
--output-dir reports/
# 生成技能改进待办项
python3 skills/signal-postmortem/scripts/postmortem_analyzer.py \
--postmortems-dir reports/postmortems/ \
--generate-improvement-backlog \
--output-dir reports/
第5步:审查汇总统计
生成按技能、按股票代码和按时间段的汇总统计:
python3 skills/signal-postmortem/scripts/postmortem_analyzer.py \
--postmortems-dir reports/postmortems/ \
--summary \
--group-by skill,month \
--output-dir reports/
输出格式
事后记录(JSON)
{
"schema_version": "1.0",
"postmortem_id": "pm_sig_aapl_20260310_abc",
"signal_id": "sig_aapl_20260310_abc",
"ticker": "AAPL",
"signal_date": "2026-03-10",
"source_skill": "edge-signal-aggregator",
"predicted_direction": "LONG",
"entry_price": 172.50,
"realized_returns": {
"5d": 0.032,
"20d": 0.058
},
"exit_price": 178.50,
"exit_date": "2026-03-15",
"holding_days": 5,
"outcome_category": "TRUE_POSITIVE",
"regime_at_signal": "RISK_ON",
"regime_at_exit": "RISK_ON",
"outcome_notes": "干净突破,在轻微回调后持有",
"recorded_at": "2026-03-17T10:30:00Z"
}
权重反馈(JSON)
{
"schema_version": "1.0",
"generated_at": "2026-03-17T10:35:00Z",
"analysis_period": {
"from": "2026-02-01",
"to": "2026-03-15"
},
"skill_adjustments": [
{
"skill": "vcp-screener",
"current_weight": 1.0,
"suggested_weight": 0.85,
"reason": "在RISK_OFF机制下假阳性率为15%",
"sample_size": 42
}
],
"confidence": "MEDIUM",
"min_sample_threshold": 20
}
技能改进待办项(YAML)
- skill: vcp-screener
issue_type: false_positive_cluster
severity: medium
evidence:
false_positive_rate: 0.15
sample_size: 42
regime_correlation: RISK_OFF
suggested_action: "添加机制过滤器或在RISK_OFF机制下降低信号信心"
generated_by: signal-postmortem
generated_at: "2026-03-17T10:35:00Z"
汇总报告(Markdown)
报告保存到 reports/ 目录,文件名格式为 postmortem_summary_YYYY-MM-DD.md。
资源
scripts/postmortem_recorder.py-- 记录单个信号结果scripts/postmortem_analyzer.py-- 生成反馈和汇总统计references/outcome-classification.md-- 分类规则和边界情况references/feedback-integration.md-- 如何将反馈集成到下游技能
关键原则
- 诚实归因 -- 每个结果都归属于其来源技能,以确保可问责性
- 机制感知 -- 记录机制上下文,以区分技能失败与市场机制转变
- 最小样本量 -- 权重调整至少需要20个信号以确保统计有效性
- 反馈闭环 -- 结果反馈用于改进信号聚合和技能质量