Ejercicios¶
Ejercicios por parte, con la solución esbozada plegada. Intenta resolverlos antes de abrirla. Los que requieren ejecutar algo indican dónde.
Parte I · Fundamentos¶
I.1 Una barra tiene open=10, high=12, low=9, close=12,5. ¿Qué hace el banco?
Solución
Viola close ≤ high. La política clean.v1 la repara (no la excluye) y la marca
is_synthetic = True, dejando constancia en el informe de validación.
I.2 Calcula la EMA(2) con semilla SMA de [2, 4, 6, 8].
Solución
α = 2/3. t=0 null; t=1 semilla = (2+4)/2 = 3; t=2: 2/3·6 + 1/3·3 = 5;
t=3: 2/3·8 + 1/3·5 = 7. Resultado [null, 3, 5, 7], first_valid_index = 1.
I.3 Una política decide +1 al cierre del viernes; el lunes es festivo en XNYS. ¿Cuándo hay fill?
Solución
En la apertura del martes (primera apertura operable). El lunes no es sesión, así que no hay barra que ejecutar.
I.4 Comisión de comprar 100 acciones a 50,00 USD con 5 bps.
Solución
100 · 50 · 0,0005 = 2,50 USD, redondeado half-even a la unidad mínima (0,01): 2,50.
I.5 ¿A qué hora UTC abre XNYS el 15 de enero y el 15 de julio?
Solución
14:30 UTC en invierno (EST, UTC−5) y 13:30 UTC en verano (EDT, UTC−4).
Parte II · Datos¶
II.1 ¿Por qué el lector filtra por data_available_ns y no por market_open_ns?
Solución
Porque «desde el día X» significa «desde que se pudo saber algo». Filtrar por apertura dejaría entrar la barra cuyo OHLC aún no se conocía al empezar la ventana.
II.2 Un día hábil sin barras en BME que no es festivo. ¿Se añade a la tabla de festivos?
Solución
No. Es un hueco del proveedor (caso 2018-09-20): se documenta como anomalía. Meterlo como festivo sería una afirmación falsa sobre el mercado.
Parte III · Motores¶
III.1 P16 nativo diverge en features barra 19; P18 nativo en fills barra 63. ¿Son fallos del banco?
Solución
No: son divergencias documentadas de los indicadores nativos de Nautilus (semilla en
P16; redondeo int(sqrt) de la HMA en P18). Se informan con contexto ±5 y nunca se
publican como PASS. Los carriles comparables cierran con 0 PARITY_FAIL.
III.2 ¿Qué carril usarías para medir solo el coste de ejecución de Nautilus?
Solución
NT_INTENT_REPLAY: recibe features y objetivos ya calculados y solo ejecuta.
Parte IV · Indicadores¶
IV.1 El catálogo lista 386 indicadores y la API calcula 375, pero solo 33 con garantías canónicas. Explica la diferencia.
Solución
386 son las entradas del catálogo. 39 son primitivas del proyecto (implementadas,
verificadas y aprobadas); 33 de ellas se calculan por la API en modo canónico y las otras 6
leen series derivadas o paneles y solo se usan dentro de estrategias. De las 347 solo de
motor, 342 se calculan por paso directo al motor, sin fórmula canónica ni paridad (siguen en
discovered), y 5 no son ejecutables. En total, 375 ejecutables y 11 no ejecutables con motivo.
Parte V · Estrategias¶
V.1 ¿Por qué P01 conserva el objetivo anterior cuando EMA(f) == EMA(s)?
Solución
Poner 0 en el empate generaría un cierre y una reapertura (dos fills y dos comisiones) que la regla no pide.
V.2 Una política usa EMA(20) y EMA(50). ¿first_decision_index?
Solución
49: el máximo de los first_valid_index (19 y 49).
Parte VI · API de backtesting y análisis¶
VI.1 Lanza un backtest de P01 sobre KO 5min en 2024 con engine: both. ¿Qué campos miras primero?
Solución
window_resolved (barras, warmup), parity.verdict, y speedup.published. Ejemplo
real en examples/api/04_backtest_p01_ko.*.json (19 551 barras, PASS). Ojo: su
data_hash es el mismo que el de NVDA; hoy firma la versión del dataset, no el activo
(capítulo VI.3, sección 6).
VI.2 Un sweep devuelve 422 INSUFFICIENT_DISTINCT_CANDIDATES. ¿Qué haces?
Solución
Cambiar la rejilla para tener más puntos distintos. El banco no repite puntos para inflar K.
Parte VII · Runtime causal, streaming y modelos¶
VII.1 Describe el camino de un POST /platform/v1/runs hasta el resultado.
Solución
La API valida token y rol, registra el run QUEUED y un evento en outbox (PG); el
worker-batch lo reclama con lease y fence, calcula, escribe el artefacto (CAS) y
publica con commit en PG (SUCCEEDED); GET /platform/v1/results/{ref} lo sirve.
VII.2 ¿Qué garantiza el fencing si dos workers creen ser dueños del mismo stream?
Solución
Solo escribe el que tiene el fence más alto; el antiguo falla con
STREAM_FENCE_OBSOLETO sin escribir diario ni emit (drill G3 del 2026-09-22).
Parte VIII · Operación¶
VIII.1 El servidor muere a las 14:15 UTC. ¿Cuánto dato pierdes como máximo?
Solución
Hasta la captura de las 08:20 UTC: casi 6 h de escrituras (RPO máximo teórico = 6 h). La siguiente captura habría sido a las 14:20.
VIII.2 ¿Por qué docker compose down -v no es un rollback válido?
Solución
Borra volúmenes (artefactos, jobs, modelos) y pararía otros servicios vivos. El
rollback correcto recrea solo api por digest con up -d --no-deps.
VIII.3 Un token válido llega con x-finaz-roles: deployer. ¿Respuesta?
Solución
401: la identidad nunca la aporta el cliente.