Golden SkyGolden SkyGuía Técnica

Referencia técnica · Paso 12b · Transfer — veredicto

Estados y 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.

§0Notación

statusestado por instrumento (4 valores)
n_conclusiveinstrumentos fuera de NO_DATA/INCONCL.
pass_fractionn_pass / n_conclusive
grand_pfPF pooleado de todos los que corrieron
ρ̄correlación media de la canasta
N_efectivoapuestas independientes reales

§1Cuatro estados por instrumento

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.

EstadoCondición
NO_DATAEl pre-flight bloqueó la corrida (historia < warm-up, archivo ausente, timeframe incompatible, HTF faltante). Estado explícito — distinto de "corrió y no transfiere".
INCONCLUSIVECorrió pero trades < min_trades (default 15) — muestra insuficiente para concluir.
FAILTrades suficientes, pero pf < min_pf (default 1.15) o mdd > max_mdd (default 20%).
PASSCumple 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".

§2El gate conjuntivo

Las tres condiciones se exigen juntas (Y lógico), no como alternativas. Todos los umbrales son parámetros de entrada; abajo, sus defaults.

transfer_decision overall_passed
  n_conclusive ≥ min_conclusive_instruments (default 1)  // piso duro
  Y pass_fraction > pass_fraction_threshold (default 0.5, estricto)
  Y grand_pooled_pf ≥ min_grand_pooled_pf (default 1.0)
CondiciónQué evita
Piso de concluyentesQue el veredicto se apoye en muy pocos instrumentos medibles. Es un piso duro, independiente del PF agregado.
Fracción de PASSQue una mayoría floja (51% de pases al límite) cuente como "transfiere". La fracción se supera estrictamente.
PF pooleado agregadoQue 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.

§3Diversidad de la canasta

Cinco instrumentos que son casi la misma apuesta no son cinco evidencias. La diversidad se anota, pero no bloquea el gate.

compute_basket_diversity ρ̄ = media de correlaciones Pearson sobre retornos alineados // overlap real
N_efectivo = n1 + (n − 1) · ρ̄

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.

§4Costo no verificado, y el límite del gate

Dos matices de honestidad: qué pasa si el trader no cargó los costos del instrumento, y qué NO significa un PASS.

fixed_cost_pct = None → corre con costo 0 y cuenta para el gate
pero se marca cost_unverified  // PF optimista: los costos reales lo bajarían

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.

Un PASS no es luz verde a real. Transfer confirma que la ventaja es una propiedad del patrón, no un accidente de un activo. Es una validación más, no "la definitiva": cada etapa —WFV, WFO, OOS, transfer— aporta evidencia desde un ángulo distinto, y cuánto pesa cada una es criterio del trader. Tampoco tienen que cumplirse todas al pie de la letra. La decisión de mandar a real es del trader, y antes va la revalidación de paridad entre los tres motores (pipeline, live Python, EA MQL5). Ningún gate reemplaza ese criterio.

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