Referencia técnica · Paso 12b · Transfer — veredicto
Con cada instrumento preparado, se backtestea, se clasifica en uno de cuatro estados, y se combinan en un gate conjuntivo. Tres condiciones que se exigen juntas — para que ni un instrumento pesado ni una mayoría floja puedan arrastrar la conclusión.
Cada instrumento se backtestea con el mismo motor (Fixed TP/SL re-escalado, costos, régimen) sobre su ventana de test, y cae en uno de cuatro estados. El primero que aplica gana. min_trades, min_pf y max_mdd son parámetros de entrada — los valores entre paréntesis son sus defaults.
| Estado | Condición |
|---|---|
| NO_DATA | El pre-flight bloqueó la corrida (historia < warm-up, archivo ausente, timeframe incompatible, HTF faltante). Estado explícito — distinto de "corrió y no transfiere". |
| INCONCLUSIVE | Corrió pero trades < min_trades (default 15) — muestra insuficiente para concluir. |
| FAIL | Trades suficientes, pero pf < min_pf (default 1.15) o mdd > max_mdd (default 20%). |
| PASS | Cumple ambos umbrales. |
Audit fix #4 — el piso es el mismo de OOS, nunca más laxo. Sería un error que el gate final aceptara con min_trades=5 y PF>1.0 lo que OOS frenó con 15 y 1.15. Y NO_DATA como estado propio evita el falso negativo silencioso: un activo sin historia no es "no transfiere", es "no se pudo medir".
Las tres condiciones se exigen juntas (Y lógico), no como alternativas. Todos los umbrales son parámetros de entrada; abajo, sus defaults.
| Condición | Qué evita |
|---|---|
| Piso de concluyentes | Que el veredicto se apoye en muy pocos instrumentos medibles. Es un piso duro, independiente del PF agregado. |
| Fracción de PASS | Que una mayoría floja (51% de pases al límite) cuente como "transfiere". La fracción se supera estrictamente. |
| PF pooleado agregado | Que un solo instrumento con mucho volumen arrastre el veredicto — el PF de todos los trades juntos tiene que sostenerse. |
Sin la conjunción, cada condición por separado tiene un agujero. Juntas se cubren. El resultado reporta todos los instrumentos declarados, incluidos NO_DATA — mostrar solo los que corrieron sería selection bias.
Cinco instrumentos que son casi la misma apuesta no son cinco evidencias. La diversidad se anota, pero no bloquea el gate.
Canasta ρ̄=0.9 con N=5 → N_efectivo bajo (varios instrumentos son la misma apuesta repetida); ρ̄ bajo → N_efectivo cercano a N (evidencia independiente real). Es una anotación obligatoria, no un gate: no cambia overall_passed, informa cómo leerlo. Reemplaza la tabla de correlación estática del legacy (con un 0.75 inventado) por correlación real sobre los retornos cargados; pares con poco overlap se excluyen y se listan aparte.
Dos matices de honestidad: qué pasa si el trader no cargó los costos del instrumento, y qué NO significa un PASS.
No bloquea el gate — la decisión de confiar en un PF sin costos verificados es del trader, no del sistema. Queda flageado para que se lea con esa cautela.
Viene de 12a (setup). Con esto cierra el pipeline: config → validación → calibración → indicadores → reglas → lift → combinaciones → backtest → WFV → WFO → OOS → transfer.
Fuentes:
· domain/transfer/instrument_status.py — classify_instrument_status (4 estados)
· domain/transfer/decision.py — transfer_decision (gate conjuntivo)
· domain/transfer/basket_diversity.py — ρ̄ Pearson + N_efectivo
· services/transfer_service.py — _score_combo, cost_unverified, log append-only
· webapp/docs/STEPS_10_12_MIGRATION_PLAN.md §2.3 — dec. 4/7, audit fix #4