Strasmore Research
Educación Matt ConnorPor Matt Connor

Aprende trading cuantitativo con un libro abierto

Un libro abierto de trading cuantitativo recorre todo el programa: datos, señales y órdenes. Revisa cada etapa, dónde se detienen los principiantes y qué sirve para acciones de EE. UU.

Un libro de trading cuantitativo de código abierto es un programa público y gratuito: documenta todo el proceso, desde los datos sin procesar hasta una orden en vivo, en la secuencia en que lo encuentra un principiante. El manuscrito de XQuant: Everyone Can Be a Quantitative Trader, publicado en GitHub por xingwudao, es un ejemplo claro, con 686 estrellas a agosto de 2026. Sus nueve capítulos recorren la ruta que sigue casi todo programa de formación cuantitativa. Esta página sigue esa ruta etapa por etapa, identifica la falla específica de cada una y señala qué partes siguen siendo válidas al pasar de acciones A chinas a acciones estadounidenses.

¿Qué contiene un libro de trading cuantitativo de código abierto?

Si se elimina la marca de cualquier programa para principiantes, quedan cinco etapas, en este orden: adquirir y depurar los datos, construir una señal a partir de ellos, probar esa señal con datos históricos, decidir el tamaño de la posición y luego enviar la orden y pagar los costos. El contenido de XQuant, según el commit 016b66e del 14 de julio de 2026, cubre los mismos temas en nueve capítulos.

  • Preparación y, después, capítulo uno: ejecutar una estrategia completa de principio a fin.
  • Capítulo dos, qué comprar: comenzar con tres ETF.
  • Capítulo tres, cuánto comprar: comparar tres métodos de asignación.
  • Capítulo cuatro, cuándo operar: rebalanceo, stop loss y take profit.
  • Capítulo cinco, cómo evaluar si una estrategia es buena: cuatro perspectivas.
  • Capítulo seis, no celebrar demasiado pronto: prevenir el sobreajuste.
  • Capítulo siete, del ideal a la realidad: ejecutar operaciones.
  • Capítulo ocho, la vida después del lanzamiento: monitoreo, diagnóstico e iteración.
  • Capítulo nueve, encontrar nuevas oportunidades: introducción a la investigación de factores.

El orden merece atención. El dimensionamiento aparece en el capítulo tres, antes que los dos capítulos sobre backtesting, y la investigación de factores aparece al final. Las rutas de aprendizaje autodidactas suelen seguir el orden contrario: primero una idea de factores, después un backtest y nunca una regla de dimensionamiento. El repositorio de ejercicios complementario (333 estrellas, en la misma fecha) está organizado en torno a especificaciones escritas de tareas, no a código terminado, y el lector indica a un asistente de IA cómo implementarlas. Leer código que no escribiste sigue siendo la habilidad que determina todo lo que viene después, porque cada falla se oculta en un detalle de implementación.

Primera etapa: obtener los datos y definir el universo

La limpieza es la mitad visible del trabajo con datos: operaciones incorrectas, sesiones faltantes y ajustes por splits y dividendos. Elegir qué nombres estudiar es la mitad invisible. Ahí entra el sesgo de supervivencia, antes de que exista una sola línea de código de estrategia. Tome todos los tickers de EE. UU. que registraron una operación durante una semana de junio, un año a la vez, y pregunte cuántos seguían cotizando en la misma semana de 2026.

ConsultaTickers de EE. UU. que cotizaron en una semana de junio y cuántos siguieron cotizando en junio de 2026
El SQL exacto detrás de cada cifra
WITH june_week AS (
    SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS year,
           ticker
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE toMonth(toTimeZone(window_start, 'America/New_York')) = 6
      AND toDayOfMonth(toTimeZone(window_start, 'America/New_York')) BETWEEN 10 AND 16
      AND toYear(toTimeZone(window_start, 'America/New_York')) BETWEEN 2016 AND 2026
      AND volume > 0
    GROUP BY year, ticker
),
survivors AS (
    SELECT ticker FROM june_week WHERE year = 2026
)
SELECT year,
       uniqExact(ticker) AS tickers_traded,
       uniqExactIf(ticker, ticker IN (SELECT ticker FROM survivors)) AS still_trading_2026,
       round(100 * uniqExactIf(ticker, ticker IN (SELECT ticker FROM survivors))
             / uniqExact(ticker), 1) AS still_trading_pct
FROM june_week
GROUP BY year
ORDER BY year
Run this yourself

De los 8224 tickers que cotizaron en esa semana de 2016, 50% seguían cotizando en la misma semana de 2026. Los demás fueron adquiridos, se fusionaron, cambiaron de nombre o fueron retirados de cotización. Un backtest construido con la lista actual estudia solo los nombres que sobrevivieron y atribuye el desempeño de una estrategia a la tenencia de empresas elegidas a posteriori. Un feed para principiantes le entregará esa lista de supervivientes sin una advertencia: la guía sobre API gratuita de datos del mercado bursátil explica qué incluyen y qué no incluyen esos feeds.

Etapa dos: convertir los datos en una señal

Una señal es una regla que asigna una puntuación a una acción en un momento determinado. Un factor es una señal que, según usted, se mantiene para muchas acciones al mismo tiempo. Momentum, value y baja volatilidad son los ejemplos clásicos. El error en esta etapa es probar reglas hasta encontrar una que funcione. Veinte variantes de un cruce de medias móviles aplicadas a una década de un solo índice siempre producirán una ganadora. La ganadora será la que mejor se ajuste al ruido. Las defensas no son sofisticadas: defina la regla antes de medirla, reserve una parte de la historia que nunca consulte, contabilice todas las variantes que probó y prefiera menos parámetros ajustables. XQuant dedica todo un capítulo a esto antes de abordar la investigación de factores. Ese es el orden correcto.

Etapa tres: el backtest, donde se detiene la mayoría de los principiantes

Esta es la etapa que pone fin a la mayoría de los proyectos autodidactas. Los termina en silencio, con una curva de capital de gran apariencia. El sesgo de supervivencia, explicado arriba, es el primero de los dos errores. El sesgo de anticipación es el segundo: la estrategia utiliza un dato que el reloj aún no había entregado cuando debía introducirse la orden. La versión más común consiste en calcular una regla a partir del precio de cierre de hoy y ejecutarla a ese mismo precio de cierre. Mida la distancia que omite ese supuesto.

ConsultaDistancia promedio entre el cierre de una sesión y la apertura de la siguiente, mensual
El SQL exacto detrás de cada cifra
WITH sessions AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS session,
           argMin(open, window_start) AS session_open,
           argMax(close, window_start) AS session_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'NVDA')
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2024-08-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker, session
),
gaps AS (
    SELECT ticker,
           session,
           toFloat64(session_open) AS open_px,
           toFloat64(lagInFrame(session_close) OVER (PARTITION BY ticker ORDER BY session)) AS prev_close
    FROM sessions
)
SELECT formatDateTime(toStartOfMonth(session), '%Y-%m') AS month,
       formatDateTimeInJodaSyntax(toStartOfMonth(session), 'MMMM yyyy') AS month_label,
       round(avgIf(abs(open_px / prev_close - 1) * 10000, ticker = 'SPY'), 1) AS spy_gap_bps,
       round(avgIf(abs(open_px / prev_close - 1) * 10000, ticker = 'NVDA'), 1) AS nvda_gap_bps
FROM gaps
WHERE prev_close > 0
GROUP BY month, month_label
HAVING countIf(ticker = 'SPY') > 0 AND countIf(ticker = 'NVDA') > 0
ORDER BY month
Run this yourself

En July 2026, la distancia promedio entre un cierre y la siguiente apertura medida en 40.8 puntos básicos para SPY y 107.4 para NVDA. Un punto básico equivale a una centésima de punto porcentual. Los 24 meses del panel, a partir de August 2024, se sitúan por encima de cero. Un backtest que decide al cierre y ejecuta a ese mismo precio de cierre obtiene esa distancia gratis en cada operación, pero ninguna orden real lo hace. El sesgo de anticipación en los backtests desglosa el mecanismo, y por qué las acciones presentan brechas durante la noche explica la brecha en sí.

Etapa cuatro: decidir cuánto comprar

La falla aquí es la ausencia de una regla. La mayoría de los traders autodidactas nunca escriben una regla de dimensionamiento. Eso significa que tienen una por accidente, por lo general, el mismo monto en dólares por nombre o el efectivo disponible. El mismo monto en dólares no equivale al mismo riesgo.

ConsultaDoce meses de movimientos diarios: volatilidad anualizada y peor sesión, ocho nombres
El SQL exacto detrás de cada cifra
WITH daily AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS session,
           argMax(close, window_start) AS session_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'KO', 'JNJ', 'MSFT', 'AAPL', 'NVDA', 'TSLA', 'COIN')
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2025-08-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker, session
),
rets AS (
    SELECT ticker,
           toFloat64(session_close) AS close_px,
           toFloat64(lagInFrame(session_close) OVER (PARTITION BY ticker ORDER BY session)) AS prev_close
    FROM daily
)
SELECT ticker,
       round(stddevSamp(close_px / prev_close - 1) * sqrt(252) * 100, 1) AS annualized_vol_pct,
       round(abs(min(close_px / prev_close - 1)) * 100, 2) AS worst_day_pct
FROM rets
WHERE prev_close > 0
GROUP BY ticker
ORDER BY annualized_vol_pct DESC
Run this yourself

Durante los doce meses que terminaron el 31 de julio de 2026, COIN registró una volatilidad anualizada de 68%, frente a 12.7% para SPY, que se ubicó en el extremo más tranquilo del panel. Su peor sesión cerró 13.34% por debajo del cierre previo, mientras que el peor día de SPY fue de 2.69%. El mismo monto en dólares en cada nombre produce variaciones diarias muy distintas. Esa variación, no la señal, es lo que realmente experimenta un principiante. dimensionamiento de posiciones según el criterio de Kelly presenta una respuesta formal, y riesgo de concentración muestra la forma de la respuesta informal.

Etapa cinco: ejecución y los costos que un backtest olvida

Dos costos, uno visible. Las comisiones y las tarifas regulatorias aparecen en el estado de cuenta. El deslizamiento no: es la diferencia entre el precio en pantalla y el precio que se obtiene. Su piso es el spread bid-ask, la distancia entre la mejor cotización de compra y la mejor cotización de venta en ese momento. Los compradores pagan el ask y los vendedores golpean el bid, por lo que una operación de ida y vuelta cruza el spread dos veces. El spread no es constante.

ConsultaSpread cotizado promedio por cada media hora de la sesión ET: AAPL y KO, viernes 17 de julio de 2026
El SQL exacto detrás de cada cifra
WITH quotes AS (
    SELECT ticker,
           toStartOfInterval(toTimeZone(sip_timestamp, 'America/New_York'), INTERVAL 30 MINUTE) AS bucket,
           toFloat64(ask_price - bid_price) / toFloat64((ask_price + bid_price) / 2) * 10000 AS spread_bps
    FROM global_markets.cache_stocks_quotes
    WHERE ticker IN ('AAPL', 'KO')
      AND sip_timestamp >= toDateTime('2026-07-17 13:00:00')
      AND sip_timestamp < toDateTime('2026-07-17 21:00:00')
      AND bid_price > 0
      AND ask_price > bid_price
)
SELECT formatDateTime(bucket, '%H:%i') AS et_time,
       round(avgIf(spread_bps, ticker = 'AAPL'), 2) AS aapl_spread_bps,
       round(avgIf(spread_bps, ticker = 'KO'), 2) AS ko_spread_bps
FROM quotes
WHERE spread_bps > 0 AND spread_bps < 500
GROUP BY et_time
HAVING countIf(ticker = 'AAPL') > 0 AND countIf(ticker = 'KO') > 0
ORDER BY et_time
Run this yourself

El panel cubre 16 intervalos de media hora de un viernes, desde el intervalo 09:00 anterior al inicio de la sesión hasta el intervalo 16:30 posterior al cierre. AAPL cotizó con un spread de 10.53 puntos base en el primer intervalo y de 3.27 en el último, mientras que KO registró 28.87 y 8.04. Las cotizaciones más estrechas del día se ubican en la parte central del gráfico, entre esos dos extremos. Una estrategia que opera en la apertura con dos de los nombres más líquidos del mercado paga un costo distinto al de su propia versión del mediodía, y un backtest con un supuesto de costo cero no refleja ninguno de los dos. El spread bid-ask define la cifra, por qué los spreads se amplían en la apertura explica la curva, y cuánto cuesta operar una acción suma una operación completa de ida y vuelta. Entre un backtest limpio y el dinero real hay un paso más: hacer paper trading antes de operar con dinero real.

¿Qué partes de un currículo sobre acciones A se pueden aplicar a las acciones estadounidenses?

XQuant y sus pares están diseñados para acciones A y ETF de China. El método se transfiere sin cambios: el orden de las etapas, las definiciones, la disciplina contra el sobreajuste, el hábito de registrar los costos como una partida y no como una ocurrencia posterior, y cada componente de la aritmética del tamaño de la posición. Las barras de precios son barras de precios. Lo que no se transfiere es el reglamento que las rodea.

  • Las acciones A tienen una restricción T+1 real: las acciones compradas hoy no se pueden vender hasta la siguiente sesión. En Estados Unidos, T+1 es una convención de liquidación y no impide operar intradía, aunque la regla del day trader con patrón limita las cuentas de margen con menos de $25,000 a tres operaciones diarias en cinco días hábiles.
  • Las acciones A del mercado principal tienen un límite de movimiento diario de 10%, y de 20% en los mercados de crecimiento. Las acciones estadounidenses no tienen un límite diario, y las pausas se deben a bandas de volatilidad y suspensiones por noticias.
  • Las órdenes de acciones A se negocian en lotes de 100 acciones. Muchos brokers estadounidenses permiten operar con acciones fraccionarias, lo que cambia incluso lo que una regla de tamaño de posición puede expresar.
  • China cobra un impuesto de timbre al vender. Los vendedores en Estados Unidos pagan pequeñas comisiones regulatorias, de distinta magnitud y estructura.
  • La estructura de las sesiones es diferente e incluye una pausa al mediodía en Shanghái y Shenzhen. El horario del mercado accionario estadounidense transcurre de forma continua y termina con una subasta de cierre.

Cualquier constante de costos o de tiempos copiada de un curso a tu propio código es un error que espera la primera orden real.

Fija la referencia, no el README

El repositorio no tiene versiones etiquetadas al 14 de agosto de 2026, por lo que la cita permanente es un commit: 016b66e, fechado el 14 de julio de 2026. Esto es importante para un libro que aún está en proceso de redacción. Los números de capítulo cambian, los archivos README se reescriben, los encabezados se mueven y un enlace que apuntaba al capítulo siete puede apuntar discretamente a otra cosa. Cita el commit y la fecha, registra el título del capítulo que leíste en lugar de su número, y tus notas seguirán siendo verificables un año después. El manuscrito se publica bajo CC BY-NC-SA 4.0, y los scripts de compilación bajo MIT. La misma disciplina es la última lección del programa: una estrategia que no puedes volver a ejecutar a partir de un snapshot de datos fijado no es un resultado, sino una historia.

Preguntas frecuentes

¿Se puede aprender trading cuantitativo con un libro gratuito de código abierto?

Para entender el mapa general, sí. Además, un manuscrito abierto permite verificar cada afirmación contra su fuente. Lo que un libro no puede proporcionar son los datos, costos y reglas de su propio mercado. Ahí es donde un temario escrito para una bolsa deja de coincidir con su bróker.

¿En qué etapa de un plan de estudios cuantitativo se detiene la mayoría de los principiantes?

En el backtest. Allí aparecen dos errores que favorecen el resultado. Uno es el sesgo de supervivencia, causado por formar el universo después de los hechos. El otro es el sesgo retrospectivo, causado por ejecutar a un precio que el reloj todavía no había registrado. Solo 50% de los tickers que cotizaban en esa semana de junio de 2016 seguían cotizando una década después.

¿Cuál es la diferencia entre el sesgo de supervivencia y el sesgo retrospectivo?

El sesgo de supervivencia es un problema del universo. Los nombres evaluados se seleccionaron porque habían sobrevivido. El sesgo retrospectivo es un problema de sincronización. La estrategia utiliza un dato que todavía no existía cuando debía enviarse la orden. El primero infla la lista de valores. El segundo infla el precio de ejecución.

¿Funciona un curso de trading cuantitativo sobre acciones A chinas para las acciones estadounidenses?

El método sí funciona. Las reglas del mercado, no. Mantenga el orden de las etapas, la disciplina contra el sobreajuste y el registro de costos. Después, sustituya la infraestructura de datos, la restricción de venta T+1, los límites diarios de precio y los tamaños de lote por sus equivalentes estadounidenses antes de mover dinero.


Cada panel anterior es una consulta almacenada con su SQL debajo. Abra uno, cambie los tickers o las fechas y ejecútelo usted mismo en la terminal de Strasmore.

#quant#learning path#backtesting#open source#beginners