Signal Postmortem
Resumen
Signal Postmortem registra y analiza los resultados de las señales de trading generadas por el pipeline de edge, screeners y otras habilidades. Compara la dirección prevista del edge con los retornos realizados a 5 y 20 días, categoriza los resultados (verdadero positivo, falso positivo, oportunidad perdida, desajuste de régimen) y genera retroalimentación para ajustar los pesos del agregador de señales y crear entradas en el backlog de mejora de habilidades.
Cuándo usarlo
- Después de cerrar una operación y quieras registrar el resultado
- Al revisar un lote de señales que han alcanzado su período de tenencia (5 o 20 días)
- Para identificar patrones sistemáticos de falsos positivos de habilidades específicas
- Para generar retroalimentación para la calibración de pesos del agregador de señales
- Cuando se construye un backlog de mejora de habilidades a partir de métricas de calidad de decisión
- Para auditorías periódicas (semanales/mensuales) de calidad de señales
Requisitos previos
- Python 3.9+
- Clave de API FMP (opcional, para obtener retornos realizados automáticamente si no se proporcionan manualmente)
- Biblioteca estándar +
requestspara llamadas a la API - Entrada: registros de señal en formato JSON (provenientes del agregador de señales o salidas del screener)
Configuración de la clave de API (opcional)
Si deseas obtener automáticamente datos de precios para los cálculos de retorno, configura la clave de API de FMP:
export FMP_API_KEY=tu_clave_api_aqui
Alternativamente, pasa la clave por línea de comandos con --api-key TU_CLAVE. Sin una clave de API, aún puedes registrar resultados manualmente proporcionando --exit-price y --exit-date.
Flujo de trabajo
Paso 1: Preparar registros de señal
Reúne los registros de señal cerrados o madurados. Cada registro debe incluir:
signal_id: Identificador únicoticker: Símbolo de la acciónsignal_date: Fecha en que se generó la señalpredicted_direction: LARGO o CORTOsource_skill: Habilidad que generó la señalentry_price: Precio al momento de la generación de la señal (opcional, para anulación manual)
# Ejemplo: Listar señales listas para postmortem (5+ días de antigüedad)
python3 skills/signal-postmortem/scripts/postmortem_recorder.py \
--list-ready \
--signals-dir state/signals/ \
--min-days 5
Paso 2: Registrar resultados
Ejecuta el grabador de postmortem para obtener retornos realizados y clasificar resultados.
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/
Para registro manual de resultados (cuando ya se dispone de datos de precios):
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 "Cerrado en objetivo, +3.2% en 5 días" \
--output-dir reports/
Paso 3: Clasificar resultados
El grabador clasifica automáticamente cada señal en una de cuatro categorías:
| Categoría | Definición |
|---|---|
| TRUE_POSITIVE | La dirección prevista coincidió con el signo del retorno realizado |
| FALSE_POSITIVE | La dirección prevista fue opuesta al retorno realizado |
| MISSED_OPPORTUNITY | La señal no fue tomada pero habría sido rentable |
| REGIME_MISMATCH | La señal falló debido a un cambio de régimen de mercado |
Las reglas de clasificación están documentadas en references/outcome-classification.md.
Paso 4: Generar archivos de retroalimentación
Genera retroalimentación para los consumidores posteriores:
# Generar sugerencias de ajuste de pesos para el agregador de señales
python3 skills/signal-postmortem/scripts/postmortem_analyzer.py \
--postmortems-dir reports/postmortems/ \
--generate-weight-feedback \
--output-dir reports/
# Generar entradas de backlog de mejora de habilidades
python3 skills/signal-postmortem/scripts/postmortem_analyzer.py \
--postmortems-dir reports/postmortems/ \
--generate-improvement-backlog \
--output-dir reports/
Paso 5: Revisar estadísticas resumidas
Genera estadísticas agregadas por habilidad, ticker y período de tiempo:
python3 skills/signal-postmortem/scripts/postmortem_analyzer.py \
--postmortems-dir reports/postmortems/ \
--summary \
--group-by skill,month \
--output-dir reports/
Formato de salida
Registro de postmortem (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": "Rotura limpia, se mantuvo durante retroceso menor",
"recorded_at": "2026-03-17T10:30:00Z"
}
Retroalimentación de pesos (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 tasa de falsos positivos en régimen RISK_OFF",
"sample_size": 42
}
],
"confidence": "MEDIUM",
"min_sample_threshold": 20
}
Entrada de backlog de mejora de habilidades (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: "Agregar filtro de régimen o reducir confianza de señal en RISK_OFF"
generated_by: signal-postmortem
generated_at: "2026-03-17T10:35:00Z"
Informe resumido (Markdown)
Los informes se guardan en reports/ con nombres de archivo postmortem_summary_YYYY-MM-DD.md.
Recursos
scripts/postmortem_recorder.py-- Registra resultados de señales individualesscripts/postmortem_analyzer.py-- Genera retroalimentación y estadísticas resumidasreferences/outcome-classification.md-- Reglas de clasificación y casos extremosreferences/feedback-integration.md-- Cómo integrar la retroalimentación con habilidades posteriores
Principios clave
- Atribución honesta -- Cada resultado se atribuye a su habilidad de origen para garantizar la responsabilidad
- Conciencia de régimen -- El contexto de régimen se registra para distinguir fallos de habilidad de cambios de régimen de mercado
- Tamaño de muestra mínimo -- Los ajustes de peso requieren 20+ señales para validez estadística
- Cierre del bucle de retroalimentación -- Los resultados fluyen de vuelta para mejorar tanto la agregación de señales como la calidad de las habilidades