Lección 7.5.1 · 45 min

Roles del quant: seis oficios alrededor de un mismo sistema

«Quant» no es un puesto, es una familia. La misma estrategia pasa por quien consigue y limpia los datos, quien encuentra la señal, quien la convierte en un sistema, quien la opera, quien vigila su riesgo y quien mantiene los modelos en producción. Esta lección describe los seis roles, los cruza con el temario en una matriz que se puede ejecutar y simula cómo se reparte su jornada.

Fig. — Matriz de competencias de la lección: peso de cada bloque del temario en cada rol quant (1 útil, 2 importante, 3 núcleo) (esquema)
Lecciones del nivel 7
  1. 7.1 · Ingeniería de software para trading

    1. 7.1.1 Estructura de proyecto, configuración y calidad: del notebook al repositorio
    2. 7.1.2 Rendimiento: medir, perfilar y compilar solo lo que hace falta
    3. 7.1.3 Patrones: eventos, colas de mensajes y arquitectura hexagonal
  2. 7.2 · Infraestructura y despliegue

    1. 7.2.1 Docker y docker-compose: imágenes reproducibles con uv
    2. 7.2.2 VPS, nube y latencia; CI/CD con GitHub Actions
    3. 7.2.3 Orquestación y monitorización: grafos de tareas, logs estructurados, métricas, alertas y latidos
    4. 7.2.4 Seguridad y continuidad: 2FA, IP, copias y procedimientos ante fallos
  3. 7.3 · MLOps para modelos de trading

    1. 7.3.1 Registro de experimentos, modelos y datos: MLflow, DVC y una ejecución reproducida de principio a fin
    2. 7.3.2 Reentrenamiento programado, validación automática y champion/challenger
    3. 7.3.3 Monitorización del modelo en vivo y desactivación automática
    4. 7.3.4 Servir modelos: ONNX, inferencia en CPU o GPU y el coste de los LLM en producción
  4. 7.4 · Regulación, ética y fiscalidad

    1. 7.4.1 MiFID II: clientes, idoneidad y trading algorítmico
    2. 7.4.2 ESMA y CFD: apalancamiento, cierre y saldo negativo
    3. 7.4.3 PRIIPs, KID y ETFs estadounidenses
    4. 7.4.4 MiCA después del transitorio: comprobar un proveedor en los registros
    5. 7.4.5 Abuso de mercado: spoofing, layering y el bot que los imita sin querer
    6. 7.4.6 Fiscalidad del trading en España
    7. 7.4.7 Ética: datos personales, inteligencia artificial y la venta de señales
  5. 7.5 · Carrera profesional quant

    1. 7.5.1 Roles del quant: seis oficios alrededor de un mismo sistema
    2. 7.5.2 Dónde trabajar: qué hace cada empresa y qué dicen los registros
    3. 7.5.3 Portfolio público y entrevistas: enseñar criterio, no rentabilidades
    4. 7.5.4 Certificaciones, formación y prop firms: qué certifica cada cosa y qué mide un examen

Un mismo sistema, seis oficios

Un sistema de trading sistemático es una cadena: datos que entran, una señal que se investiga, un programa que la ejecuta, una persona que lo opera, unos límites que lo contienen y, si hay modelos de machine learning, un ciclo que los reentrena y los vigila. En una firma grande, cada eslabón tiene su equipo; en una pequeña, o para un trader independiente, una sola persona hace varios. Saber qué eslabón se ocupa en cada momento ayuda a decidir qué aprender, qué delegar y a qué puestos optar.

Data engineerQuant researcherQuant developerML engineerQuant traderRisk quant
Fuente Mermaid
flowchart TB
  DE[Data engineer] --> QR[Quant researcher]
  QR --> QD[Quant developer]
  ML[ML engineer] --> QD
  QD --> QT[Quant trader]
  RQ[Risk quant] --> QT
  QT --> QR

La flecha de vuelta, del trader al researcher, es la que más se olvida: lo que se observa en real (costes, fills, deriva) vuelve a la investigación. Los nombres son los habituales en el sector, pero no están normalizados: el mismo trabajo puede llamarse quantitative analyst, strategist, research engineer o portfolio analyst según la firma. Por eso esta lección define cada rol por sus entregables y no por el título.

Una referencia pública para las tareas es O*NET, la base de ocupaciones del Departamento de Trabajo de EE. UU. Su ficha Financial Quantitative Analysts (13-2099.01) recoge 21 tareas, entre ellas «aplicar técnicas matemáticas o estadísticas a problemas prácticos de finanzas, como la valoración de derivados, la negociación de valores, la gestión del riesgo o la regulación», «desarrollar librerías de modelos» y «dar soporte analítico a researchers o traders»; entre los títulos que la ficha cita como reportados figuran Quantitative Analyst, Quantitative Research Analyst y Portfolio Manager. La de Financial Risk Specialists (13-2054.00) incluye «diseñar análisis de escenarios con eventos de mercado severos» y «contribuir al desarrollo de sistemas de gestión del riesgo»1Nota 1 · O*NET OnLine, U.S. Department of Labor, Employment and Training Administration: fichas 13-2099.01 Financial Quantitative Analysts, 13-2054.00 Financial Risk Specialists y 15-2051.00 Data Scientists (sitio actualizado el 6/10/2026), consultadas el 23/10/2026. Licencia CC BY 4.0; las citas son traducciones propias.. Son descripciones del mercado laboral de EE. UU., útiles como vocabulario; no son un estándar europeo ni una garantía de lo que pide cada oferta.

Qué hace cada rol

RolEntregableHerramientas típicasMódulos del curso
Quant researcherHipótesis probada, informe y prototipo reproduciblepandas, Polars, statsmodels, scikit-learn, notebooks, registro de experimentos0.7, 2.1–2.6, 4.1, 5
Quant developerSistema en producción: datos en vivo, órdenes, estado, pruebasPython tipado, pytest, asyncio, APIs de bróker, NautilusTrader o LEAN, Docker2.4, 4.4, 4.5, 7.1, 7.2
Quant traderOperativa diaria, ejecución y decisiones dentro de límitesPlataforma del bróker, monitores, informes de ejecución, griegas1.1, 3, 4.2, 4.3
Data engineerDatos limpios, versionados y a tiempoParquet, DuckDB, orquestadores, colas, validación de esquemas1.3, 1.4, 6.6, 7.2
Risk quantMedidas, límites, escenarios de estrés y controlesVaR y ES, stress testing, valoración de derivados, informes3.4, 4.2, 7.4
ML engineerModelos servidos, vigilados y reentrenablesscikit-learn, PyTorch, MLflow, ONNX, monitorización de deriva5, 6, 7.3
  • Quant researcher. Formula hipótesis de ventaja (lección 2.2.1), las contrasta con datos y estadística honesta y descarta la mayoría. Su riesgo profesional es el sobreajuste, y sus herramientas para combatirlo son las del módulo 2.5. Un buen researcher deja un rastro que otro puede reproducir: diario, datos versionados y código (2.2.4).
  • Quant developer. Convierte el prototipo en un sistema que no se cae, o que se cae de forma controlada: estados de órdenes, reconexiones, idempotencia y conciliación (4.5), estructura de proyecto, pruebas y rendimiento (7.1), despliegue (7.2). Su riesgo es el error silencioso: la orden duplicada o el dato desfasado que nadie ve.
  • Quant trader. Opera el sistema y decide dentro de límites: cuándo pausar, cómo ejecutar órdenes grandes (4.3), qué hacer ante un evento que el modelo no conoce. En estrategias de opciones o de futuros gestiona griegas y roll (módulos 3.1 y 3.5). Es quien primero ve que algo no cuadra.
  • Data engineer. Construye y mantiene los flujos de datos: descarga con reintentos, limpieza, ajustes por eventos corporativos, universos sin sesgo de supervivencia y almacenamiento eficiente (1.4), a escala cuando hace falta (6.6). Su trabajo es invisible cuando funciona.
  • Risk quant. Mide y limita: VaR y Expected Shortfall con su backtesting, estrés por correlación y liquidez, riesgo de derivados (4.2), valoración independiente (3.4). En una firma regulada traduce las exigencias normativas en controles (7.4).
  • ML engineer. Lleva modelos a producción y los mantiene sanos: registro de experimentos y de modelos, reentrenamiento con validación, champion/challenger, vigilancia de la deriva y servicio eficiente (7.3), con la base de validación financiera del nivel 5.

La matriz de competencias

La tabla anterior se puede convertir en datos. La matriz siguiente asigna a cada bloque del temario un peso por rol: 0 si es ajeno al puesto, 1 si es útil, 2 si es importante y 3 si es núcleo. Es una valoración del curso, no una encuesta: está escrita para que se pueda discutir y cambiar, y el código que la usa no depende de los números concretos.

IN [01]python
import pandas as pd

ROLES = ["researcher", "developer", "trader", "data_eng",
         "risk", "ml_eng"]
# 0 = ajeno, 1 = útil, 2 = importante, 3 = núcleo del puesto
MATRIZ = pd.DataFrame.from_records([
    # competencia, módulos del curso, pesos por rol (orden de ROLES)
    ("Estadística y econometría", "0.7 2.1", 3, 1, 2, 1, 3, 2),
    ("Backtesting y validación", "2.4 2.5", 3, 2, 2, 0, 2, 2),
    ("Derivados y valoración", "3.4 3.5", 2, 1, 3, 0, 3, 0),
    ("Carteras y riesgo", "4.1 4.2", 2, 1, 3, 0, 3, 1),
    ("Microestructura y ejecución", "1.1 4.3", 1, 2, 3, 1, 1, 0),
    ("Datos y pipelines", "1.4 6.6", 2, 2, 1, 3, 1, 2),
    ("Sistemas en vivo", "4.4 4.5", 0, 3, 2, 1, 1, 1),
    ("Machine learning", "5.1 5.4", 2, 1, 1, 1, 1, 3),
    ("LLMs y datos alternativos", "6.2 6.7", 1, 1, 0, 2, 0, 2),
    ("Ingeniería de software", "7.1 7.2", 1, 3, 1, 3, 1, 3),
    ("MLOps", "7.3", 0, 2, 0, 2, 0, 3),
    ("Regulación y ética", "7.4", 1, 1, 2, 1, 3, 1),
], columns=["competencia", "modulos", *ROLES]).set_index("competencia")

print(MATRIZ[ROLES].sum().rename("suma de pesos").to_string())
OUT [01]La matriz de competencias
researcher    18
developer     20
trader        20
data_eng      15
risk          19
ml_eng        20

La figura de la cabecera dibuja la misma matriz: cada cuadrado es un peso, y el tamaño, su valor. La suma de pesos indica la amplitud de cada rol. El data engineer es el más concentrado (15); el developer, el trader y el ML engineer, los más amplios (20). Las competencias núcleo de cada uno:

IN [02]python
for rol in ROLES:
    print(rol)
    for competencia in MATRIZ.index[MATRIZ[rol] == 3]:
        print("  -", competencia)
OUT [02]Lo que es núcleo en cada rol
researcher
  - Estadística y econometría
  - Backtesting y validación
developer
  - Sistemas en vivo
  - Ingeniería de software
trader
  - Derivados y valoración
  - Carteras y riesgo
  - Microestructura y ejecución
data_eng
  - Datos y pipelines
  - Ingeniería de software
risk
  - Estadística y econometría
  - Derivados y valoración
  - Carteras y riesgo
  - Regulación y ética
ml_eng
  - Machine learning
  - Ingeniería de software
  - MLOps

Dos lecturas de la matriz. La ingeniería de software es núcleo para tres roles (developer, data engineer y ML engineer) y no es ajena a ninguno: el código es el medio de trabajo de todos. Y la regulación solo es núcleo para el risk quant, la celda en ámbar de la figura, aunque nadie pueda ignorarla: un bot mal diseñado puede incurrir en manipulación de mercado (lección 7.4.5), y eso afecta a quien lo programa y a quien lo opera.

Autoevaluación y brecha

Con la matriz, una autoevaluación con la misma escala (0 a 3) se convierte en una cobertura por rol: la parte de lo que pide el rol que ya se tiene, ponderada por el peso. Saber más de lo que se pide no compensa lo que falta en otra competencia, así que lo que excede se recorta.

coberturar=∑cmin⁡(tengoc,pidec,r)∑cpidec,r\text{cobertura}_r = \frac{\sum_c \min(\text{tengo}_c, \text{pide}_{c,r})}{\sum_c \text{pide}_{c,r}}
IN [03]python
# Autoevaluación de ejemplo, de 0 (nada) a 3 (lo domino)
YO = pd.Series({
    "Estadística y econometría": 2, "Backtesting y validación": 3,
    "Derivados y valoración": 1, "Carteras y riesgo": 2,
    "Microestructura y ejecución": 1, "Datos y pipelines": 2,
    "Sistemas en vivo": 1, "Machine learning": 2,
    "LLMs y datos alternativos": 1, "Ingeniería de software": 2,
    "MLOps": 0, "Regulación y ética": 1,
})


def cobertura(yo, matriz=MATRIZ, roles=ROLES):
    """Parte cubierta de lo que pide cada rol, ponderada por peso."""
    pide = matriz[roles]
    tengo = pide.clip(upper=yo, axis=0)  # lo que sobra no suma
    return (tengo.sum() / pide.sum()).sort_values(ascending=False)


print(cobertura(YO).map("{:.0%}".format).to_string())
OUT [03]Cobertura de cada rol
researcher    89%
developer     70%
ml_eng        70%
risk          68%
data_eng      67%
trader        65%

El perfil de ejemplo, alguien que ha hecho bien el nivel 2 y a medias los demás, cubre el 89 % de lo que pide el rol de researcher y entre el 65 % y el 70 % del resto. La cobertura no es una nota: con la escala de 0 a 3 y doce competencias es una medida gruesa, buena para ordenar prioridades y mala para comparar personas. Para el rol de developer, la lista concreta:

IN [04]python
def brecha(rol, yo, matriz=MATRIZ):
    falta = (matriz[rol] - yo).clip(lower=0)
    tabla = matriz.loc[falta > 0, ["modulos"]].assign(
        pide=matriz[rol], tengo=yo, falta=falta)
    return tabla.sort_values(["falta", "pide"], ascending=False)


brecha("developer", YO)
OUT [04]Lo que falta para el rol de developer
                             modulos  pide  tengo  falta
competencia
Sistemas en vivo             4.4 4.5     3      1      2
MLOps                            7.3     2      0      2
Ingeniería de software       7.1 7.2     3      2      1
Microestructura y ejecución  1.1 4.3     2      1      1

La brecha se lee como un plan: sistemas en vivo (módulos 4.4 y 4.5) y MLOps (7.3) primero, porque faltan dos puntos en cada uno; después ingeniería de software (7.1 y 7.2) y microestructura (1.1 y 4.3). Con los pesos y la autoevaluación en código, el plan se recalcula cada vez que cambian, que es la ventaja sobre una lista mental.

Un día de trabajo, como modelo

Las descripciones de puesto dicen qué se hace, no cómo se reparte el día. Dos modelos sencillos ayudan a pensarlo. El primero describe la sesión de un quant trader como una máquina de estados, igual que el sistema que opera (lección 4.5.1): cada evento solo es válido en ciertos estados.

datos_okdatos_malalertaresueltakill_switchfin_mercadoconciliadoinformepreaperturasesionincidenciacierrerevision
Fuente Mermaid
stateDiagram-v2
  [*] --> preapertura
  preapertura --> sesion: datos_ok
  preapertura --> incidencia: datos_mal
  sesion --> incidencia: alerta
  incidencia --> sesion: resuelta
  incidencia --> cierre: kill_switch
  sesion --> cierre: fin_mercado
  cierre --> revision: conciliado
  revision --> [*]: informe

Una bitácora ficticia de un día, con dos alertas resueltas, recorrida por la máquina:

IN [05]python
from datetime import datetime

TRANSICIONES = {
    ("preapertura", "datos_ok"): "sesion",
    ("preapertura", "datos_mal"): "incidencia",
    ("sesion", "alerta"): "incidencia",
    ("incidencia", "resuelta"): "sesion",
    ("incidencia", "kill_switch"): "cierre",
    ("sesion", "fin_mercado"): "cierre",
    ("cierre", "conciliado"): "revision",
    ("revision", "informe"): "fuera",
}

# Bitácora de un día ficticio de un quant trader (hora de Madrid)
BITACORA = [
    ("08:00", "inicio"), ("08:40", "datos_ok"), ("11:20", "alerta"),
    ("11:55", "resuelta"), ("15:40", "alerta"), ("15:55", "resuelta"),
    ("17:35", "fin_mercado"), ("18:05", "conciliado"),
    ("18:30", "informe"),
]


def recorrer(bitacora, transiciones=TRANSICIONES):
    """Minutos en cada estado; un evento imposible es un error."""
    hora = lambda h: datetime.strptime(h, "%H:%M")
    estado, desde = "preapertura", hora(bitacora[0][0])
    minutos = {}
    for h, evento in bitacora[1:]:
        nuevo = transiciones.get((estado, evento))
        if nuevo is None:
            raise ValueError(f"{h}: «{evento}» no vale en {estado}")
        dur = (hora(h) - desde).seconds // 60
        minutos[estado] = minutos.get(estado, 0) + dur
        estado, desde = nuevo, hora(h)
    return estado, minutos


final, minutos = recorrer(BITACORA)
print("Estado final:", final)
for estado, m in minutos.items():
    print(f"  {estado:<12}{m:>4} min")
OUT [05]La sesión del trader como máquina de estados
Estado final: fuera
  preapertura   40 min
  sesion       485 min
  incidencia    50 min
  cierre        30 min
  revision      25 min

De 10 horas y media, 50 minutos fueron incidencias y 95 minutos se fueron en preapertura, cierre y revisión: tareas que no aparecen en un backtest y que alguien tiene que hacer cada día. La máquina rechaza una bitácora imposible (una alerta «resuelta» sin estar en incidencia), lo que la hace útil también para auditar registros reales.

El segundo modelo mide el tiempo de foco. Cada rol recibe interrupciones (una alerta, una pregunta, un fallo de datos) a un ritmo y con una duración media distintos. Los parámetros son supuestos, no datos: el trader recibe muchas interrupciones cortas; el data engineer, pocas y largas; el researcher, pocas. Con 250 días simulados por rol, el modelo cuenta cuántos bloques de 90 minutos sin interrupción quedan entre las 9:00 y las 18:00:

IN [06]python
import numpy as np

# Supuestos del modelo (no son datos): interrupciones por hora y
# duración media en minutos, por rol
INTERRUPCIONES = {"researcher": (0.3, 15), "developer": (0.6, 25),
                  "trader": (1.5, 10), "data_eng": (0.5, 30),
                  "risk": (0.7, 20), "ml_eng": (0.5, 20)}


def simular_dia(tasa, media, rng, inicio=9 * 60, fin=18 * 60):
    """Minutos de interrupción y bloques de foco de >= 90 minutos."""
    t, bloques, perdido = inicio, 0, 0
    while True:
        siguiente = t + rng.exponential(60 / tasa)
        foco = min(siguiente, fin) - t
        bloques += int(foco // 90)
        if siguiente >= fin:
            return perdido, bloques
        dura = min(rng.exponential(media), fin - siguiente)
        perdido += dura
        t = siguiente + dura


rng = np.random.default_rng(7)
filas = []
for rol, (tasa, media) in INTERRUPCIONES.items():
    dias = [simular_dia(tasa, media, rng) for _ in range(250)]
    perdido, bloques = np.array(dias).T
    filas.append((rol, perdido.mean() / 60, bloques.mean(),
                  (bloques == 0).mean()))
dia = pd.DataFrame(filas, columns=["rol", "horas_interrumpidas",
                                   "bloques_90", "dias_sin_bloque"])
dia.set_index("rol").round(2)
OUT [06]Interrupciones y bloques de foco
            horas_interrumpidas  bloques_90  dias_sin_bloque
rol
researcher                 0.60        4.06             0.00
developer                  1.85        2.64             0.03
trader                     1.74        1.12             0.28
data_eng                   1.72        3.06             0.02
risk                       1.66        2.50             0.03
ml_eng                     1.33        3.04             0.00
Fig. — Bloques de foco de 90 minutos o más por día, por rol, en 250 jornadas simuladas con interrupciones aleatorias (9:00 a 18:00) (esquema)

El developer y el trader pierden un tiempo parecido (1,85 y 1,74 horas al día), pero el trader conserva 1,12 bloques de foco de media y en el 28 % de los días ninguno; el developer, 2,64. La diferencia está en la frecuencia: muchas interrupciones cortas trocean el día. La consecuencia práctica es de organización, no de carácter: el research profundo de un trader cabe fuera de la sesión, y un developer de guardia necesita guardias rotatorias para que el resto del equipo conserve sus bloques.

Cómo usar el resto del nivel

Los proyectos de capstone del nivel 7 se pueden leer con la misma matriz. C1 (sistema multi-activo de futuros en NautilusTrader) es sobre todo trabajo de developer y trader; C2 (libro de opciones con griegas en tiempo real), de trader y risk quant; C3 (cartera con ML, HRP y fiscalidad), de researcher y ML engineer; C4 (plataforma con LLMs y datos alternativos), de data engineer y ML engineer; C5 (market making o arbitraje en cripto), de developer y trader. Elegir el capstone según el rol al que se aspira convierte el proyecto en una prueba de ese rol, que es lo que pregunta una entrevista (lección 7.5.3).

Dos advertencias. La primera: en equipos pequeños los roles se funden, y un perfil con cobertura alta en dos roles contiguos (researcher y developer, o data engineer y ML engineer) es más útil que uno perfecto en uno solo. La segunda: la matriz describe competencias, no valía; la escala de 0 a 3 la rellena cada uno sobre sí mismo, con los sesgos de cualquier autoevaluación. Contrastarla con trabajo publicado (un repositorio, un informe reproducible) es el objeto de la lección 7.5.3.

Ejercicios

  1. Añade a la matriz un rol de quant de ejecución (execution quant), que diseña algoritmos de ejecución y mide costes, con los pesos que te parezcan razonables, y calcula su cobertura con la autoevaluación de ejemplo.
Solución
IN [07]python
ejec = pd.Series({
    "Estadística y econometría": 2, "Backtesting y validación": 1,
    "Derivados y valoración": 0, "Carteras y riesgo": 1,
    "Microestructura y ejecución": 3, "Datos y pipelines": 2,
    "Sistemas en vivo": 3, "Machine learning": 1,
    "LLMs y datos alternativos": 0, "Ingeniería de software": 2,
    "MLOps": 1, "Regulación y ética": 2,
})
m7 = MATRIZ.assign(ejecucion=ejec)
print(cobertura(YO, m7, ROLES + ["ejecucion"])
      .map("{:.0%}".format).to_string())
OUT [07]Un séptimo rol
researcher    89%
developer     70%
ml_eng        70%
risk          68%
data_eng      67%
ejecucion     67%
trader        65%

Con estos pesos, el rol de ejecución queda entre los de menor cobertura para el perfil de ejemplo, porque concentra el peso en microestructura y sistemas en vivo, justo donde la autoevaluación es más baja. Los pesos son una opinión: lo útil es que, al cambiarlos, la conclusión se recalcula y se puede discutir con números.

  1. Un equipo establece guardias rotatorias: el developer de guardia recibe el doble de interrupciones y los demás developers, una de cada cuatro (0,15 por hora). ¿Cuántos bloques de foco ganan los que no están de guardia?
Solución
IN [08]python
rng = np.random.default_rng(11)
for nombre, tasa in [("de guardia", 1.2), ("sin guardia", 0.15),
                     ("sin guardias", 0.6)]:
    dias = np.array([simular_dia(tasa, 25, rng) for _ in range(250)])
    print(f"{nombre:<13}{dias[:, 1].mean():>5.2f} bloques de 90 min")
OUT [08]Guardias rotatorias
de guardia    1.25 bloques de 90 min
sin guardia   4.85 bloques de 90 min
sin guardias  2.63 bloques de 90 min

Quien no está de guardia pasa de 2,63 bloques diarios a 4,85; el de guardia baja a 1,25. Con cuatro developers y una guardia por semana, cada uno tiene tres semanas de cada cuatro con casi el doble de tiempo de foco. El modelo es grosero (interrupciones independientes, duración exponencial), pero el orden de magnitud explica por qué los equipos de producción separan guardia y desarrollo.

  1. Elige el rol al que aspiras y escribe, para el capstone que elegirías, tres entregables que demuestren las competencias núcleo de ese rol según la matriz.
Solución

Un ejemplo para el rol de risk quant con el capstone C2: un informe de VaR y Expected Shortfall del libro de opciones con su backtesting (Kupiec y Christoffersen, lección 4.2.3); un conjunto de escenarios de estrés con saltos de volatilidad y de correlación aplicados a las griegas (4.2.4 y 4.2.6); y una tabla de límites (delta, vega, pérdida diaria) con el control que los aplica antes de cada orden y su registro de incumplimientos. Los tres cubren las competencias núcleo del rol (estadística, derivados, carteras y riesgo, regulación) y se pueden enseñar en una entrevista.

Footnotes

  1. O*NET OnLine, U.S. Department of Labor, Employment and Training Administration: fichas 13-2099.01 Financial Quantitative Analysts, 13-2054.00 Financial Risk Specialists y 15-2051.00 Data Scientists (sitio actualizado el 6/10/2026), consultadas el 23/10/2026. Licencia CC BY 4.0; las citas son traducciones propias. ↩

Respuesta plegada en cada pregunta

Autoevaluación

  1. Un modelo de reversión a la media funciona en el backtest, pero hay que llevarlo a un sistema que recibe datos en directo, envía órdenes al bróker y se recupera de una desconexión. ¿Qué rol es el responsable natural de ese paso?

    • AEl quant researcher, porque el modelo es suyo
    • BEl risk quant
    • CEl quant developer: convertir research en software de producción fiable es su núcleo
    • DEl data engineer
    Ver respuesta

    Respuesta C. El quant developer: convertir research en software de producción fiable es su núcleo

    El researcher entrega una especificación y un prototipo; el developer construye el sistema con estados de órdenes, reconexiones, idempotencia y pruebas (módulos 4.4, 4.5 y 7.1). En equipos pequeños pueden ser la misma persona, pero son dos trabajos distintos.

  2. En la matriz de la lección, ¿para qué rol es la regulación una competencia núcleo?

    • APara el risk quant
    • BPara el quant researcher
    • CPara el ML engineer
    • DPara ninguno
    Ver respuesta

    Respuesta A. Para el risk quant

    Es la celda en ámbar de la figura de la cabecera. El risk quant traduce límites regulatorios e internos en medidas y controles; el resto de roles necesita conocerlos (peso 1 o 2), pero no es su entregable. La matriz es una valoración del curso, no una encuesta del sector.

  3. Con la autoevaluación de ejemplo, el rol con mayor cobertura es el de researcher (89 %) y el de developer queda en el 70 %. ¿Qué dice la función brecha que hay que repasar primero para el de developer?

    • AEstadística y econometría
    • BDerivados y valoración
    • CMachine learning
    • DSistemas en vivo (4.4 y 4.5) y MLOps (7.3), con dos puntos de diferencia cada uno
    Ver respuesta

    Respuesta D. Sistemas en vivo (4.4 y 4.5) y MLOps (7.3), con dos puntos de diferencia cada uno

    brecha ordena por lo que falta y, a igualdad, por el peso que pide el rol. Sistemas en vivo es núcleo para el developer (3) y la autoevaluación da 1; MLOps pide 2 y da 0.

  4. En la simulación de interrupciones, el trader tiene de media 1,12 bloques de foco de 90 minutos al día y el researcher más de 4, con más o menos las mismas horas interrumpidas que el developer. ¿Qué conclusión es correcta?

    • AEl trader trabaja menos
    • BLo que destruye el foco es la frecuencia de las interrupciones, no solo su duración total: muchas interrupciones cortas parten el día en trozos inservibles para trabajo profundo
    • CLa simulación demuestra que el trading no necesita concentración
    • DLos números son datos del sector
    Ver respuesta

    Respuesta B. Lo que destruye el foco es la frecuencia de las interrupciones, no solo su duración total: muchas interrupciones cortas parten el día en trozos inservibles para trabajo profundo

    Trader y developer pierden un tiempo parecido (unas 1,7 a 1,9 horas), pero el trader recibe 1,5 interrupciones por hora frente a 0,6. Los parámetros son supuestos del modelo, no datos: la lección es el mecanismo, que cada uno puede recalibrar con su propia jornada.

Ideas clave

  • Los seis roles trabajan sobre el mismo sistema en eslabones distintos: datos (data engineer), señal (researcher), software (developer), operativa (trader), límites (risk quant) y modelos en producción (ML engineer).
  • Los títulos cambian de una firma a otra; lo estable son los entregables. O*NET, del Departamento de Trabajo de EE. UU., describe al quant analyst por tareas como aplicar técnicas estadísticas a valoración, trading o riesgo y mantener librerías de modelos.
  • La matriz de competencias de la lección es una valoración explícita del curso que se puede discutir y cambiar; su valor está en hacer comparables los roles y medir brechas con código.
  • Con la autoevaluación de ejemplo, la cobertura va del 89 % (researcher) al 65 % (trader), y la brecha del developer apunta a sistemas en vivo y MLOps.
  • La jornada de cada rol se puede modelar: como máquina de estados (la sesión del trader) o como proceso de interrupciones. Con los supuestos de la lección, el trader conserva 1,1 bloques de foco de 90 minutos al día y el researcher, 4,1.

Recursos