Golden SkyGolden SkyGuía Técnica

Referencia técnica · Paso 1 · Configuración

Parámetros y partición

Formalización del paso de configuración: las conversiones de parámetros, la partición física IS/OOS y las convenciones que todo el pipeline hereda.

§0Notación

ttimestamp de una barra
tmaxúltima fecha de la serie
Nhorizonte máximo (barras)
|·|cantidad de barras
⌊·⌋piso (entero inferior)
⌈·⌉techo (entero superior)
mtfminutos por barra del TF
ρratio de split de descubrimiento

§1Parámetros y conversiones

El objetivo (TP) y el stop (SL) se ingresan en porcentaje (0–100) y el pipeline los consume como fracción decimal. El único derivado que se calcula en este paso es el ratio riesgo-recompensa.

Conversión a fracción (aplicada aguas abajo al construir el target y el backtest):

TPfrac = TP%100   ·   SLfrac = SL%100

Ratio riesgo-recompensa (redondeado a 4 decimales):

rr_ratio rr = TP%SL%   → default 6.0 / 3.0 = 2.0

Defaults del schema: TP = 6.0%, SL = 3.0%, ambos con restricción 0 < x < 100.

§2Partición IS / OOS

La reserva out-of-sample es por días de calendario, no por cantidad de barras. Se apartan los últimos años_oos años y se separan físicamente dos DataFrames.

_slice_oos Δoos = ⌊ añosoos · 365.25 ⌋   // días — 365.25 = año juliano (bisiestos)
toos = tmax − Δoos
IS  = { barras : t < toos }   // df_development — desigualdad ESTRICTA
FULL = serie completa (IS ∪ OOS)   // df_full
noos = |FULL| − |IS|
IS · t < t_oos OOS reservado t_oos = t_max − ⌊años·365.25⌋ t_max t_min
El corte cae en una fecha, así que la cantidad de barras en cada lado depende de la densidad del feed (huecos de fin de semana/feriados). El < estricto ubica a t_oos dentro de OOS. Solo se persisten IS y FULL; el OOS no se recorta a un DataFrame aparte en este paso.

Rango años_oos ∈ [0.5, 10], default 2.0 → Δ = ⌊730.5⌋ = 730 días. Si la reserva está desactivada, IS = FULL.

§3Barras de sesión

Cuando se filtra por sesión horaria, se calcula cuántas barras entran en la ventana diaria. Ese número acota también el desfasaje máximo permitido.

compute_session_bars msesión = (tfin − tinicio) en minutos   // si cruza medianoche: (t_fin + 1440) − t_inicio
session_bars = ⌈ msesiónmtf ⌉   ·   max_shift_bars = session_bars

mtf por timeframe · periods/día = 1440 / mtf

TFmtf (min)periods/día
M111440
M55288
M151596
M303048
H16024
H42406
D114401
W1100800.143

Warning si candle_exposition ≥ session_bars (el target de una señal al cierre de sesión se resuelve en la próxima, incluyendo el gap overnight).

§4Desfasajes admisibles

Los desfasajes (_sft_N) provienen del estilo o de una lista custom, y se filtran por dos criterios.

shifts = custom_shifts  si existen, si no  style.shift_periods
filtro: descartar todo s > max_shift_bars
warning: max(shifts) · mtf > 30 · 1440 min  // horizonte > 30 días

§5Split de descubrimiento

Partición cronológica opcional dentro del IS para mitigar el winner's curse anidado entre el ranking y las combinaciones. Solo lo usan esos dos pasos; el resto opera sobre IS completo.

discovery_train_ratio N = |IS|
train = primeras ⌊ ρ · N ⌋ barras   // lift_selector
val   = últimas ( N − ⌊ ρ · N ⌋ ) barras   // combinations

Restricción 0.5 < ρ < 1.0, default None (sin split). Recomendado ρ = 0.7.

§6Convenciones fundacionales

Definiciones que este paso fija y que son invariantes de dominio para todo el pipeline.

Retorno de un trade — siempre porcentual, nunca diferencia absoluta de precios:

rlong = Pexit − PentryPentry   ·   rshort = Pentry − PexitPentry

Horizonte N = candle_exposition (ge 1, default 24) — la ventana futura máxima que evaluará el target. Dirección ∈ {long, short}. La separación física IS/OOS (§2) es el marco de todo lo que sigue.

Fuera de alcance de este paso

  • La fórmula del target (TP-antes-que-SL, primer toque, timeout, desempate por color de vela) vive en domain/indicators/transform.py → se formaliza en el paso de indicadores/lift.
  • La alineación multi-TF (offset +4h H4, +1d D1) vive en domain/indicators/multi_tf.py → paso de indicadores.
  • La anualización periods_per_día = 1440 / m_tf (Sharpe/Sortino) se aplica en las métricas → paso de backtest.

Fuentes:
· data_config_service.py — _slice_oos, rr_ratio, _compute_session, _resolve_shifts, _filter_shifts_by_session
· schemas/data_config.py — DataConfig, OOSConfig, discovery_train_ratio
· domain/timeframes.py — TIMEFRAMES, compute_session_bars, periods_per_day_for