信號後檢
概述
Signal Postmortem 記錄並分析由邊緣管道、篩選器及其他技能所產生的交易信號結果。它將預測的方向與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 個以上信號以確保統計效度
- 反饋閉環 -- 結果會回饋以改善信號聚合與技能品質