Golden SkyGolden SkyGuía Técnica

Referencia técnica · Paso 4a · Indicadores — generación

Fórmulas y alineación

Cómo el precio crudo se transforma en cientos de columnas: las familias por período, las fórmulas propias que no son TA-Lib estándar, los desfasajes y la alineación multi-timeframe sin look-ahead.

§0Notación

pperíodo de un indicador
SMApmedia móvil simple de p
STDDEVpdesvío estándar de p
.shift(k)desplazar k barras al pasado
_sft_ssufijo de columna desfasada
HTFtimeframe superior (h4 / d1)

§1Familias por período

La mayoría son indicadores TA-Lib estándar, calculados sobre cada período del estilo de trading. Una columna por (familia, período).

GrupoFamilias
Osciladoresrsi · stoch_k/d · mfi · willr · cci
Tendenciasma · mema (EMA) · adx · +di / −di · macd*
Volatilidadatr · bb_upper/middle/lower · zscore*
Posición / rangoibs* · aaro / aarou / aarod* · dc_upper/lower*
Volumenobv (si hay volumen real)

Las marcadas con * tienen fórmula propia (§2) — no son una llamada TA-Lib directa. El resto es TA-Lib estándar sobre los períodos del trading_style.

§2Fórmulas propias

Las columnas que se construyen a mano, con la mecánica exacta del código.

IBS · Internal Bar Strength

ibs = close − lowhigh − low  // NaN si high == low

Aroon

aarop = aroon_upp − aroon_downp  ·  aaroup = aroon_upp  ·  aarodp = aroon_downp

Z-score

zscorep = close − SMApSTDDEVp  // NaN si STDDEV == 0

MACD normalizado por ATR

macd, macdsig, macdh  // TA-Lib, 4 combos (fast × slow) en estilo day
macdn = macdatr_ref  // vuelve el MACD estacionario → comparable entre instrumentos

Donchian Channel · anti look-ahead

dc_upperp = max(high, p).shift(1)  ·  dc_lowerp = min(low, p).shift(1)

El .shift(1) es deliberado: el canal de la barra actual usa el rango de las p barras previas, no la actual — de otro modo leería su propio high/low y filtraría el futuro.

§3Desfasajes

Cada columna base se replica desplazada al pasado, para que las reglas puedan comparar el ahora con hace N barras.

∀ col ∉ {OHLCV, time} , ∀ s ∈ shift_periods:
  col_sft_s = col.shift(s)
→ ncolumnas ≈ nbase · ( 1 + |shift_periods| )

Los shift_periods vienen del estilo (o custom), ya filtrados por max_shift_bars en el paso de configuración.

§4Alineación multi-timeframe

Los indicadores de un TF superior (H4, D1) se pegan al índice del TF de operación sin filtrar el futuro: cada barra base recibe el último bar HTF que ya cerró.

align_to_base_tf índiceHTF ← índiceHTF + offset  // +4h (h4), +1d (d1) → mueve el bar a su CIERRE
merged = merge_asof( base, HTF, direction = "backward" )
bar HTF (H4) abre 00:00 → cierra 04:00 +offset disponible desde 04:00 00:00 (apertura) 04:00 (cierre) el bar solo entra a la barra base a partir de su cierre → nunca antes
Sin el offset, el timestamp de apertura del bar HTF lo haría "visible" desde las 00:00 — pero a esa hora el bar todavía no cerró. El merge_asof "backward" toma siempre el último bar ya cerrado.

Continúa en 4b: excursiones, fórmula del target (TP-antes-que-SL), winsorización MAD-sigma, chequeo de leakage y estrategia de NaN.

Fuentes:
· domain/indicators/transform.py — compute_features (familias, IBS, BB, Aroon, MACD, zscore, DC, OBV, shifts)
· domain/indicators/multi_tf.py — align_to_base_tf, _PERIOD_OFFSETS
· domain/trading_styles.py — períodos y shift_periods por estilo