Golden SkyGolden SkyGuía Técnica

Referencia técnica · Paso 4b · Indicadores — target y depuración

Target y depuración

La segunda mitad del paso de indicadores: la etiqueta (target) que consumirán el lift y las combinaciones, y las tres defensas del dataset — winsorización, chequeo de leakage y limpieza de NaN.

§0Notación

Hhorizonte (candle_exhibition)
entryclose de la barra de entrada
tppx/slpxprecios de TP y SL
med(·)mediana
MADdesviación absoluta mediana
σrobsigma robusto (MAD·1.4826)

§1Excursiones (intermedias)

Sobre la ventana futura [i+1, i+H] se miden tres cantidades auxiliares. Se calculan, sirven de insumo, y luego se eliminan del dataset (no son features — mirarían el futuro).

Max_Upsidei  = max(highi+1..i+H) − entryentry
Max_Downsidei = entry − min(lowi+1..i+H)entry
Returni    = closei+H − entryentry

§2Target · TP-antes-que-SL

La etiqueta binaria: ¿el trade que arranca en la barra i habría tocado el TP antes que el SL dentro de las H barras siguientes? Se resuelve por barrido, con el primer toque decidiendo.

long entry = closei ;   tppx = entry·(1+TP) ;   slpx = entry·(1−SL)
scan j = 1..H :
  hit_tp = highj ≥ tppx ;   hit_sl = lowj ≤ slpx
  hit_tp ∧ hit_sl → desempate: bullish(closej≥openj) → 0 (SL), si no → 1 (TP)
  hit_sl → 0 ;   hit_tp → 1 ;   break al primer toque
sin toque en H → −1 → NaN (timeout, excluido del label)
Target_Long ∈ { 1 (TP), 0 (SL), NaN (timeout) }
Target_Short = espejo (TP abajo, SL arriba)  ·  Target = nanmax( Target_Long, Target_Short )

El desempate intra-barra (cuando TP y SL caen en la misma vela) es conservador: en una vela alcista se asume que primero bajó (SL), en una bajista que primero subió — nunca acredita una ganancia que pudo no ocurrir. Mismo criterio que usa el Monte Carlo de la calibración.

§3Targets alternativos · dirección

Opción additional_targets: una etiqueta agnóstica de magnitud, útil en activos sin drift claro donde el TP/SL fijo deja demasiados timeouts.

Target_Long_Direction = 1 si closei+H > closei , si no 0  // empate exacto → 0
Target_Short_Direction = espejo

§4Winsorización MAD-sigma

Recorta outliers extremos con una escala robusta (mediana, no media) para que un par de valores locos no distorsionen los percentiles que usan los pasos siguientes.

compute / apply med = med(x) ;   MAD = med( |x − med| ) ;   σrob = MAD · 1.4826
zrob = | x − med |σrob
detectar: #{ zrob > 10 }  // 10 MAD-sigma
si hay outliers → bounds = med ± 5·σrob ;   x ← clip(x, bounds)

1.4826 = factor teórico que lleva MAD a la escala de σ bajo distribución normal. Detecta a 10, clipea a 5 MAD-sigma. Excluye OHLCV, targets, temporales y time; columnas con MAD==0 se saltean. El fit (aprender bounds) va separado del apply: los bounds se aprenden en IS y se aplican a OOS sin recalcular → sin leakage OOS→IS.

§5Chequeo de leakage

Escanea los nombres de columna contra un catálogo de patrones. Un solo hallazgo CRITICAL bloquea el pipeline (HTTP 422); los WARNING solo informan.

TipoEjemplosSeveridad
substringmax_upside · max_downside · return_ · target_ · leaked_CRITICAL
prefixy_ · output_CRITICAL
regexshift(-N) · _-NCRITICAL
suspiciousclose_next · price_future · high_aheadWARNING
whitelistday_of_* · Target · Target_Long/Short · Target_*_Directionseguro
passed = ( sin ningún CRITICAL )  ·  CRITICAL → bloquea (422)

La whitelist es necesaria: Target, Target_Long/Short y los *_Direction son la y del problema (los genera este mismo paso), no leakage; y day_of_week contiene "day" pero no mira al futuro.

§6Limpieza de NaN

Los indicadores con lookback dejan NaN en las primeras barras (antes de que el período se complete).

estrategia = drop_rows  // descarta las filas del lookback inicial con NaN

Viene de 4a: familias, fórmulas propias, desfasajes y alineación multi-timeframe.

Fuentes:
· domain/indicators/transform.py — Max_Upside/Downside/Return, Target_Long/Short, additional_targets, drop_rows
· domain/indicators_quality/winsorize.py — MAD-sigma, compute/apply bounds
· domain/indicators_quality/leakage.py + binary_rules/leakage.py — patrones, scan, validate_column_map