Signal Postmortem
Aperçu
Signal Postmortem enregistre et analyse les résultats des signaux de trading générés par le pipeline d'edge, les screeners et d'autres compétences. Il compare la direction prédite par le signal aux rendements réalisés sur 5 et 20 jours, classifie les résultats (vrai positif, faux positif, opportunité manquée, inadéquation de régime) et génère des retours pour les ajustements de poids de l'agrégateur de signaux (edge-signal-aggregator) et des entrées de backlog d'amélioration des compétences.
Quand l'utiliser
- Après qu'une transaction a été clôturée et que vous souhaitez enregistrer le résultat
- Lors de la révision d'un lot de signaux ayant atteint leur période de détention (5 ou 20 jours)
- Pour identifier les schémas de faux positifs systématiques provenant de compétences spécifiques
- Pour générer des retours d'information pour le calibrage des poids de l'agrégateur de signaux
- Lors de la constitution d'un backlog d'amélioration des compétences basé sur des métriques de qualité de décision
- Pour des audits périodiques (hebdomadaires/mensuels) de la qualité des signaux
Prérequis
- Python 3.9+
- Clé API FMP (optionnelle, pour récupérer automatiquement les rendements réalisés si non fournis manuellement)
- Bibliothèque standard +
requestspour les appels API - Entrée : enregistrements de signaux au format JSON (provenant de l'agrégateur de signaux ou des sorties du screener)
Configuration de la clé API (Optionnelle)
Si vous souhaitez récupérer automatiquement les données de prix pour les calculs de rendement, configurez la clé API FMP :
export FMP_API_KEY=your_api_key_here
Alternativement, passez la clé via la ligne de commande avec --api-key YOUR_KEY. Sans clé API, vous pouvez toujours enregistrer les résultats manuellement en fournissant --exit-price et --exit-date.
Flux de travail
Étape 1 : Préparer les enregistrements de signaux
Rassemblez les enregistrements de signaux clôturés ou arrivés à maturité. Chaque enregistrement doit inclure :
signal_id: Identifiant uniqueticker: Symbole boursiersignal_date: Date de génération du signalpredicted_direction: LONG ou SHORTsource_skill: Quelle compétence a généré le signalentry_price: Prix à la génération du signal (optionnel, pour substitution manuelle)
# Exemple : Lister les signaux prêts pour le post-mortem (5+ jours)
python3 skills/signal-postmortem/scripts/postmortem_recorder.py \
--list-ready \
--signals-dir state/signals/ \
--min-days 5
Étape 2 : Enregistrer les résultats
Exécutez l'enregistreur de post-mortem pour récupérer les rendements réalisés et classer les résultats.
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/
Pour un enregistrement manuel des résultats (lorsque les données de prix sont déjà disponibles) :
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 "Clôturé à l'objectif, +3.2% en 5 jours" \
--output-dir reports/
Étape 3 : Classifier les résultats
L'enregistreur classifie automatiquement chaque signal dans l'une des quatre catégories suivantes :
| Catégorie | Définition |
|---|---|
| TRUE_POSITIVE | La direction prédite correspond au signe du rendement réalisé |
| FALSE_POSITIVE | La direction prédite est opposée au rendement réalisé |
| MISSED_OPPORTUNITY | Signal non pris mais qui aurait été rentable |
| REGIME_MISMATCH | Signal échoué en raison d'un changement de régime de marché |
Les règles de classification sont documentées dans references/outcome-classification.md.
Étape 4 : Générer les fichiers de retour
Générez des retours pour les consommateurs en aval :
# Générer des suggestions d'ajustement de poids pour l'agrégateur de signaux
python3 skills/signal-postmortem/scripts/postmortem_analyzer.py \
--postmortems-dir reports/postmortems/ \
--generate-weight-feedback \
--output-dir reports/
# Générer des entrées de backlog d'amélioration des compétences
python3 skills/signal-postmortem/scripts/postmortem_analyzer.py \
--postmortems-dir reports/postmortems/ \
--generate-improvement-backlog \
--output-dir reports/
Étape 5 : Examiner les statistiques récapitulatives
Générez des statistiques globales par compétence, par ticker et par période :
python3 skills/signal-postmortem/scripts/postmortem_analyzer.py \
--postmortems-dir reports/postmortems/ \
--summary \
--group-by skill,month \
--output-dir reports/
Format de sortie
Enregistrement de post-mortem (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": "Cassure nette, tenue malgré un léger repli",
"recorded_at": "2026-03-17T10:30:00Z"
}
Retour sur les poids (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": "15% de taux de faux positifs en régime RISK_OFF",
"sample_size": 42
}
],
"confidence": "MEDIUM",
"min_sample_threshold": 20
}
Entrée de backlog d'amélioration des compétences (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: "Ajouter un filtre de régime ou réduire la confiance du signal en RISK_OFF"
generated_by: signal-postmortem
generated_at: "2026-03-17T10:35:00Z"
Rapport récapitulatif (Markdown)
Les rapports sont enregistrés dans reports/ avec des noms de fichiers postmortem_summary_YYYY-MM-DD.md.
Ressources
scripts/postmortem_recorder.py-- Enregistre les résultats individuels des signauxscripts/postmortem_analyzer.py-- Génère des retours et des statistiques récapitulativesreferences/outcome-classification.md-- Règles de classification et cas particuliersreferences/feedback-integration.md-- Comment intégrer les retours avec les compétences en aval
Principes clés
- Attribution honnête -- Chaque résultat est attribué à sa compétence source pour responsabilité
- Conscience du régime -- Le contexte de régime est enregistré pour distinguer un échec de compétence d'un changement de régime de marché
- Taille d'échantillon minimale -- Les ajustements de poids nécessitent 20+ signaux pour la validité statistique
- Boucle de rétroaction fermée -- Les résultats sont réinjectés pour améliorer à la fois l'agrégation des signaux et la qualité des compétences