Saltar al contenido
Quant500 - Análisis Cuantitativo
Buscar ticker o empresa...
ES | EN

Metodología

En corto

Cada día de mercado puntuamos las ~500 empresas del S&P 500 con cuatro medidas que la investigación académica lleva décadas estudiando: momento (lo que ya sube), valor (lo que está barato frente a lo que gana), calidad (lo que gana dinero de verdad) y crecimiento. Cada empresa recibe una nota comparable con la del resto, y la cartera se queda con las mejores. Una vez al mes se rehace la lista y se vende lo que ha salido.

  • Las cuentas se usan solo desde el día en que se presentaron a la SEC: hasta el 21/8/2026, vía Sharadar; desde entonces, directamente de la SEC. Los precios, de Sharadar para el histórico y de APIs financieras profesionales para el día a día. Nada se calcula con información que no estuviera disponible ese día.
  • El histórico no está elegido a posteriori. En cada fecha del pasado solo pueden entrar las empresas que estaban en el índice ESE día, incluidas las que después quebraron o desaparecieron. Medir con las supervivientes de hoy regalaba 13 puntos anuales (medido el 1/9/2026 sobre 2021-2026).
  • Publicamos lo que cuesta. Comisiones, horquilla y rotación, medidas sobre los rebalanceos del backtest, no estimadas a ojo.
  • Y publicamos lo que no sabemos. Que la ventaja está medida pero no demostrada, cuántos años se pasan por detrás del índice y qué datos faltan. Contártelo también es parte del servicio: así sabes exactamente dónde pisas.

Debajo está el detalle completo: cada fórmula, cada fuente y cada límite, con el nombre del fichero del que sale cada número. Todo gratis y sin cuenta. Si algo no cuadra, puedes comprobarlo tú mismo. Y si un término no te suena (PER, beta, z-score, walk-forward…), está explicado con un ejemplo en el glosario.

Bienvenido a la sala de máquinas. Aquí tienes cómo se calcula todo lo que hay en esta web: de qué fichero sale cada dato, qué fórmula exacta lo convierte en una puntuación, cómo se construye la cartera y qué mide de verdad la curva que ves. Cada afirmación de esta página lleva entre paréntesis el fichero del que sale, para que puedas comprobar en vez de creer. Y detrás de cada página hay veintinueve verificaciones automáticas — precios contrastados con una segunda fuente, curvas reproducidas ventana a ventana entre dos motores independientes, hasta la maquetación revisada con un navegador real. Veintiuna corren en cada ciclo del día; las otras ocho (maquetación, indexabilidad, datos estructurados, accesibilidad, direcciones estables, la navegación a la ficha, las cifras de la ficha y el contraste de precios) corren en el despliegue, porque necesitan un navegador o una segunda fuente. Y conviene ser exacto con lo que pasa cuando una falla: la de las carteras revierte sola —si carteras.json sale inflado, se restaura el último ejemplar validado antes de que lo vea nadie—, y las demás avisan pero no revierten: dejan el fallo escrito con nombre y apellidos en el registro del ciclo, y lo generado se publica igual.

Las cifras concretas de esta página están medidas sobre los datos del 21 de octubre de 2026 —la última cartera cerrada es la de la sesión del 21/10/2026 y el último ranking, el de la sesión del 21/10/2026— y llevan su fecha escrita al lado. Una cifra sin fecha no significa nada. Y no hace falta creerse ninguna: el ranking del día y la curva de cada cartera se bajan en CSV, gratis, sin cuenta y sin registro, del mismo fichero que pinta la tabla (§10). Eso, que casi nadie ofrece ni pagando, aquí es la norma.

Esto no es asesoramiento financiero. Quant500 publica análisis cuantitativo automático, idéntico para todo el mundo, y por definición un contenido igual para todos no puede ser una recomendación personalizada para nadie. No somos un bróker, un fondo, un servicio de señales ni un asesor autorizado. Lo que sigue explica cómo se hacen los números, no qué deberías hacer con ellos.

1. Qué se publica y qué no

Empecemos por el núcleo: aquí cada rentabilidad publicada lleva detrás un backtest walk-forward reproducible, y esta página te dice exactamente qué es cada número y de dónde sale.

Todas las carteras de esta web se publican con backtest

Las veinte carteras factoriales: momentum, valor, calidad, crecimiento y multifactorial, en tamaños de 10, 20, 50 y 100 posiciones. Se seleccionan por ranking de factores, así que su historia se puede reconstruir con walk-forward real: se reconstruyó entera hasta el 21/8/2026 con los datos de Sharadar y quedó congelada, y cada rebalanceo nuevo lo añade el ciclo diario (regenerar_carteras_honesto.py). Llevan backtestDisponible: true en carteras.json.

Y hay una distinción que es la que más cuesta mantener: las posiciones de hoy no son el backtest. La tabla de una cartera modelo son las mejores empresas de hoy según el algoritmo —lo que dice el modelo hoy—; la curva que hay encima es el resultado de haber repetido esa regla cada mes desde diciembre de 1998. Las dos cosas salen del mismo código y aun así responden a preguntas distintas.

El cálculo honesto es el valor por defecto, y salir de él cuesta dos banderas. regenerar_carteras_honesto.py arranca en modo punto-en-el-tiempo sin escribir nada; para publicar las cifras infladas hay que teclear --universo-de-hoy y además --si-quiero-publicar-lo-inflado. No es una manía de estilo: entre los dos modos hay de 16,16% a 39,21% de CAGR en la cartera multifactorial de 20 (medido el 14/8/2026; el CAGR honesto de hoy, en la tabla del §8, es otro, y también lo es el tamaño del atajo: medido otra vez el 1/9/2026 entre agosto de 2021 y julio de 2026 salió de 13,33 puntos, 25,93% frente a 39,26%. Depende de la ventana; lo que no cambia es que es grande), y un proceso automático que llamara al script sin opciones publicaría el inflado sin que nadie se enterase. Mientras la honestidad sea opcional, no es honestidad: aquí es el valor por defecto.

2. El universo: quién puede entrar, y en qué fecha

El universo es el S&P 500. La pregunta difícil no es esa, es cuándo: quién estaba dentro del índice el día que el modelo tomó la decisión. Reconstruir eso es laborioso y fácil de saltarse; aquí es la base de todo el cálculo, y así se hace. Hasta el 21/8/2026 la pertenencia sale de la tabla histórica del S&P 500 de Sharadar, desde 1998 y con las empresas que después desaparecieron. Lo que sigue en este apartado —la composición reconstruida, los renombres, los tickers reciclados, los ajenos y el parche de Cboe— se aplica a nuestros datos de siempre, que solo alimentan los meses vividos desde esa fecha: la historia de Sharadar usa un único espacio de símbolos y se calcula sin parches.

La composición histórica

La pertenencia al índice se consulta por fecha contra una composición histórica reconstruida (universo_pit.py sobre datos/construido/universo_historico.json): 201 instantáneas mensuales entre el 31/12/2009 y el 13/8/2026, 888 empresas con sus tramos de alta y baja y 68 renombres. La fuente es la tabla de constituyentes de Wikipedia revisión a revisión, contrastada ticker a ticker contra un conjunto de datos público independiente que confirma el 99,3% de las expulsiones.

La regla: para una fecha F se usa la última instantánea cuya fecha de revisión sea anterior o igual a F —nunca la etiqueta del mes, que va después—. Así la lista puede estar unas semanas anticuada, que es exactamente el error que habría cometido un inversor real mirando la última lista publicada, pero no puede colarse conocimiento posterior a F.

Cuánto vale esto: aplicar hacia atrás la lista de hoy deja comprar en 2021 empresas que el índice no admitió hasta 2025, elegidas precisamente porque después lo hicieron bien. AppLovin ocupaba 21 plazas-mes de la cartera multifactorial de 20 y no entró en el índice hasta septiembre de 2025, tras subir un 1.365%. Ese atajo vale 23,05 puntos de rentabilidad anual en esa misma cartera: pasa de 16,16% a 39,21% (regenerar_carteras_honesto.py). Medido el 14 de agosto de 2026. Las dos cifras son de ese día: el CAGR honesto que publica hoy la tabla del §8 es distinto, y compararlas sin mirar la fecha llevaría a restar mal.

Renombres: manda la serie, no el nombre

Las instantáneas guardan el ticker vigente en cada fecha (FB en 2021, ANTM en 2021). De toda la cadena de renombres de una empresa se elige el símbolo que de verdad tiene la serie de precios más larga; a igualdad, el más moderno (universo_pit.py, método moderno()). No es una preferencia estética: el índice llama BNY al Bank of New York y ECHO a EchoStar, pero las series completas están bajo BK y SATS (4.178 sesiones cada una, frente a 367 y 340); devolviendo los nombres nuevos, dos miembros de pleno derecho desaparecían del backtest sin que nada avisara. Y al revés, Elevance tiene sus 4.178 sesiones bajo ELV y solo 2.202 bajo ANTM.

Tickers reciclados

La cadena de renombres solo se recorre hacia atrás aceptando saltos ya ocurridos a la fecha consultada. El símbolo Q fue Quintiles hasta renombrarse IQV en 2017, y en noviembre de 2025 lo reestrena Qnity Electronics, escindida de DuPont: son dos empresas distintas que comparten símbolo en épocas distintas, y solo la fecha las separa. Hay además una lista de pares prohibidos (deslistadas_pares_prohibidos.json) para los casos que son el mismo registrante pero otra serie de precios: TYC→JCI, ACE→CB, UA→UAA, CMCSK→CMCSA.

Dos filtros más, pequeños y con efecto medible. Del histórico de precios se descartan 20 tickers que nunca fueron del S&P 500 (AAP, B, BL, CC, CR, DEC, E, EC, G, HR, MC, ORC, R, RC, SND, SY, TE, TY, UA, XE): un 3,8% de nombres ajenos que además no son inofensivos, porque ORC reparte un 20% anual y EC un 8% por trimestre, justo el perfil que el factor Value agarra. Y se quita una de las dos clases cuando conviven las dos de la misma empresa —GOOG con GOOGL, FOX con FOXA, NWS con NWSA— antes de elegir cartera (factores.py, CLASES_DUPLICADAS): sin eso, una cartera «equiponderada» de diez posiciones tendría el 20% del dinero en un solo negocio en 9 de los meses medidos.

Hay una excepción declarada, a la vista y con nombre propio: Cboe Global Markets desaparece de la tabla de origen en febrero de 2019 y en realidad sigue en el índice hasta hoy. Es un fallo de la fuente, no del índice, y se repara con un parche explícito que se puede apagar (universo_pit.py, PARCHES). Su efecto es pequeño: CBOE ocupaba 14 plazas-mes de la cartera multifactorial de 50 y ninguna de la de 20.

3. Los datos y sus fuentes

Fundamentales: la SEC, y la fecha de presentación

Los fundamentales salen de los documentos que las empresas depositan ante la Securities and Exchange Commission (10-K, 10-Q y, para los directivos, el Formulario 4). Cada dato de la SEC trae dos fechas: end, cuando terminó el periodo, y filed, cuando se publicó. Un ejercicio que cierra en diciembre no se publica hasta febrero o marzo. Aquí todo se indexa por filed (construir_fundamentales_pit.py): usar la cifra antes de que existiera es información del futuro, el error clásico que infla los backtests de esta industria. Datos punto-en-el-tiempo de la SEC, la fuente primaria: algo que ni la mayoría de las plataformas de pago ofrece, y que sostiene cada cifra desde el 21/8/2026; antes, las cuentas vienen de Sharadar, que también las fecha por su presentación a la SEC.

Cómo se arma la foto de un día

Campo a campo, no registro a registro (pit.py, CarteraPIT.foto()). El balance se publica cada trimestre; ingresos y beneficio anuales solo aparecen en el informe anual. Cogiendo un único registro, el más reciente casi siempre sería un balance trimestral y no traería ingresos. Así que para cada campo por separado se busca el valor más reciente que ya se hubiera publicado en esa fecha.

Reexpresiones: si una cifra se corrige más tarde, en una fecha dada se usa la última versión publicada hasta esa fecha, que es lo que un inversor habría tenido delante ese día. Nunca la corrección posterior.

Caducidad de 450 días. Un campo que lleve más de cinco trimestres sin actualizarse no se devuelve: dejó de publicarse y el último valor conocido ya no describe nada. Sin ese límite se mezclan épocas dentro de la misma foto —Amazon saldría con un beneficio bruto de 5.531 millones, del cierre de 2009, junto a unos ingresos de 775.680 millones de 2026: margen bruto del 0,71% en vez del 48% real, y caería al puesto 281 de 476 en Quality—. El límite descarta 2.005 de 54.033 campos servidos (3,7%) y, en el margen bruto, uno de cada cuatro.

Un cociente no puede mezclar dos presentaciones. Cuando dos campos se dividen, el resultado solo significa algo si los dos describen el mismo periodo y la misma versión de las cuentas; elegidos por separado no lo garantizan. Los cinco cocientes de Quality y la identidad contable del balance se piden por parejas, y si no existe ninguna presentación que traiga los dos campos, el componente se queda vacío con su motivo, nunca relleno a ojo (pit.py, PAREJAS; factores.py, motivo periodos_distintos). Medido el 21/8/2026: las parejas coinciden en 2.479 de 2.505 casos, y donde no, la diferencia no es de decimales —mezclando presentaciones, OXY saldría con un margen bruto de 1,0836, que recortado da la mejor nota posible de Quality en una empresa cuyo margen real es 0,89—.

Nada puede publicarse antes de cerrar su periodo. Un registro con filed anterior a end que traiga datos financieros afirma que su beneficio ya se conocía antes de acabar el trimestre. Se descarta. Sobre los 169.192 registros del fichero hay exactamente dos, casi seguro un error de etiquetado del propio declarante; no mueven ninguna cifra publicada y se descartan igual. El recuento de acciones no se toca: un 10-K declara en su portada las acciones a una fecha unos días posterior, y así funciona la SEC.

TTM: los últimos doce meses, no el último año fiscal

Los flujos —ingresos, beneficio, BPA, flujo de caja operativo, margen bruto y operativo— son cifras TTM: en el histórico, las TTM ya presentadas de Sharadar; en el cálculo diario, reconstruidas trimestre a trimestre y sumando los cuatro últimos. El balance —patrimonio, activo, pasivo, deuda, acciones, caja— es la foto del último trimestre.

La pega clásica de los trimestrales de la SEC es que vienen mezclados: un 10-Q publica a la vez el trimestre suelto y el acumulado del ejercicio, y el 10-K publica el año entero pero no el cuarto trimestre por separado. Se resuelve por resta: Q4 = ejercicio completo − acumulado a nueve meses. Con Apple FY2024, 391.035 − 296.105 = 94.930 millones, que es exactamente el cuarto trimestre fiscal que reportó Apple. La resta se hace siempre entre dos periodos que arrancan el mismo día y bajo la misma etiqueta contable; si falta un trozo y no se puede armar la cadena, se cae al importe anual de toda la vida.

Las etiquetas XBRL

Un mismo concepto contable se etiqueta distinto según la empresa y la época. Se prueban todas en orden de preferencia y gana la primera que tenga dato para ese trimestre concreto (no se descarta una etiqueta entera de golpe). Estas son las canónicas (construir_fundamentales_pit.py, CONCEPTOS y BALANCE):

CampoEtiquetas us-gaap, en orden de preferencia
Ingresos (rev)RevenueFromContractWithCustomerExcludingAssessedTax · …IncludingAssessedTax · Revenues · SalesRevenueNet · SalesRevenueGoodsNet · RevenuesNetOfInterestExpense
Beneficio (ni)NetIncomeLoss · ProfitLoss · NetIncomeLossAvailableToCommonStockholdersBasic
Beneficio bruto (gross)GrossProfit; y si la empresa no lo publica, se despeja restando el coste de ventas (CostOfRevenue, CostOfGoodsAndServicesSold, CostOfSales…)
Resultado de explotación (oper)OperatingIncomeLoss
BPA diluido (eps)EarningsPerShareDiluted · EarningsPerShareBasicAndDiluted · EarningsPerShareBasic · IncomeLossFromContinuingOperationsPerDilutedShare · …PerBasicShare
Flujo de caja operativo (ocf)NetCashProvidedByUsedInOperatingActivities · …ContinuingOperations
Patrimonio (eq)StockholdersEquity · StockholdersEquityIncludingPortionAttributableToNoncontrollingInterest
Activo / PasivoAssets · Liabilities
Deuda (debt)LongTermDebtNoncurrent · LongTermDebt · DebtLongtermAndShorttermCombinedAmount · LongTermDebtAndCapitalLeaseObligationsIncludingCurrentMaturities · LongTermDebtAndCapitalLeaseObligations · NotesPayable
AccionesWeightedAverageNumberOfDilutedSharesOutstanding · …SharesOutstandingBasic · CommonStockSharesOutstanding · dei:EntityCommonStockSharesOutstanding

Las decisiones de esa tabla no son cosméticas. Se añadió el coste de ventas porque Netflix abandonó GrossProfit en 2021 y McDonald's, Chevron, Dow, Nucor y Corteva no la usan: sin margen bruto se quedaban con dos de los cinco componentes de Quality, por debajo del mínimo de tres, y caían del factor entero. Se añadieron etiquetas de deuda porque las tres primeras dejaban sin apalancamiento a bancos, aseguradoras, petroleras y REIT. Y no se añaden SecuredDebt, UnsecuredDebt ni SubordinatedDebt aunque muchas las publiquen: son trozos de la deuda, y usar un trozo como si fuera el total dice que la empresa debe menos de lo que debe, que es peor que no puntuarla.

Las excepciones son por empresa, nunca por regla automática. Hay dos puertas simétricas. REV_SECTORIAL y REV_COMPUESTO admiten una etiqueta en una empresa concreta porque ahí sí es la cifra de negocio entera (el alquiler de un REIT, el margen de intereses de un banco, que la norma ASC 606 no cubre). ETIQUETAS_FRAGMENTO retira una etiqueta en una empresa concreta porque ahí no lo es: Bunge (BG) publica RevenueFromContractWithCustomer* con solo el 26% de sus ingresos —3.368 de 12.961 millones en el primer trimestre de 2021, 16.811 de 59.152 en el año— y una reexpresión suya le ganaba por fecha al total, dejando un margen bruto del −48% en una empresa que gana un +6,5%.

Por qué a mano: el 21/8/2026 se probaron cuatro recetas automáticas contra el importe anual que publica cada empresa, y la única que arreglaba a BG tocaba 358 empresas y alejaba 369 registros del 10-K por 381 que acercaba, dejando a PM, ORCL, MA, RSG y TKO sin ingresos. La información para decidirlo no está ni en la magnitud ni en el nombre: Revenues es el total en BG y es un fragmento en GE. Cualquier regla arregla una y rompe la otra.

Precios: qué se descarta y por qué

El histórico de precios hasta el 21/8/2026 viene de Sharadar (ajustado por splits, con las escisiones reescaladas y todas las empresas que salieron del índice). El día a día, de APIs financieras profesionales: las cotizaciones en vivo por API con clave y control de peticiones, y un segundo proveedor que hace de segunda opinión sobre el primero. Se usa el cierre ajustado por splits pero no por dividendos (daily_update.js): los dividendos se suman aparte, en su fecha ex, y usar el precio ya ajustado por dividendos los contaría dos veces. La lista de símbolos vive en un solo sitio, simbolos_yahoo.json: dos copias de la misma lista siempre acaban divergiendo.

Barras fantasma

Volumen exactamente cero y los cuatro precios (apertura, máximo, mínimo, cierre) idénticos. Eso no es una sesión floja: es el proveedor arrastrando el último valor conocido de algo que ya no se negocia. Se descartan (daily_update.js esFantasma(), y limpiar_fantasmas.py para lo que ya estaba). Medido sobre las 801.506 filas del fichero el 18/8/2026: 615 filas cumplen las dos condiciones a la vez y están en solo seis tickers, todos empresas que no cotizaban en EE. UU. en ese tramo o que dejaron de hacerlo; cero falsos positivos entre 500 empresas vivas. Y filas con volumen 0 y precios no planos hay cero, o sea que exigir las dos condiciones no deja nada fuera. El caso que ilustra el riesgo: Electronic Arts cerró de verdad el 4/8/2026 con 48,7 millones de acciones y el proveedor siguió sirviendo 209,70 con volumen 0 durante cuatro sesiones — cuatro cierres que nunca existieron y que este filtro deja fuera.

Cotización sombra anterior al listado

Para algunas empresas el proveedor sirve años de cotización anterior a su salida a bolsa en Estados Unidos: SW trae desde 2010 la de Smurfit Kappa en Dublín, AMCR desde 2012 la de Australia, FERG y DEC las de Londres. Con ese tramo dentro, SW sacaría un momentum de 1,275 el 8/7/2024 —construido sobre la sombra de Dublín—, cuando lo honesto es «historia corta, sin momentum» hasta julio de 2025. El filtro de barras fantasma solo atrapa dos tercios de esas filas; el resto lleva un volumen de mentira y pasa. Las fechas de primer día real están declaradas empresa por empresa en simbolos_yahoo.json (primer_dia), no adivinadas por el volumen: SW 8/7/2024, AMCR 11/6/2019, FERG 8/3/2021, DEC 18/12/2023.

Canjes que el proveedor codifica como splits. AvalonBay dejó de cotizar el 14/8/2026 y cada acción se cambió por 2,793 de Vivmark. El proveedor lo declara como un split 2,793:1 con fecha 17/8 y sirve toda la serie de AVB dividida por 2,793 (65,90 donde cerró a 184,06). No es un split: es un canje, y tratarlo como split reescalaría 1.543 de 1.556 filas y dejaría un escalón del −64% en junio de 2020 que nunca ocurrió. La serie de AVB se queda en su escala y termina el 14; mapearla a VMRK empalmaría dos empresas. La distinción está declarada, con su prueba, en simbolos_yahoo.json: en renombres solo entran renombres puros y comprobados —BNY da exactamente los mismos cierres que BK en las 1.044 fechas comunes, y ECHO los mismos que SATS en 1.045—; las fusiones van en delistados.

Los splits de verdad sí se aplican, y hacia atrás, sobre el histórico completo: se compara lo descargado con lo guardado en los días que se solapan y, si la razón mediana se aleja de 1 o el proveedor declara un split en la ventana, se vuelve a bajar la serie entera de ese ticker. Reescalar solo una ventana de días dejaría la serie partida en dos escalas y fabricaría desplomes que nunca ocurrieron —KLAC de 1.940,04 a 192,92 (−90,1%), CVNA −80,3%, CRWD −75,4%, DD +209,1% por un contrasplit—: por eso la escala se comprueba siempre contra la serie entera.

La referencia de mercado

La vara de la versión equiponderada es el S&P 500 equiponderado calculado con los mismos datos que las carteras: todas las empresas que estaban en el índice cada mes, a partes iguales, con los dividendos reinvertidos, incluidas las que después desaparecieron. Es la referencia justa de una cartera que también reparte a partes iguales: compararla con un índice ponderado por capitalización mezclaría dos cosas distintas —la selección de empresas y la forma de repartir— y no dejaría ver cuál de las dos hace el trabajo. La versión por capitalización se mide contra SPY, el ETF del S&P 500, que cotiza desde 1993 y cubre la ventana entera.

Hasta septiembre de 2026 la vara equiponderada era RSP, el fondo que replica ese índice, y no una media propia, por un motivo que era cierto: una media del propio universo solo promedia las empresas de las que hay precios, así que hereda el mismo sesgo de supervivencia que pretende juzgar (según el universo que se promediara salían +64,7% o +83,9% acumulados en una ventana en la que RSP hizo +46,3%). Con el backtest largo ese motivo desaparece —ahora tenemos el precio de todos los miembros del índice en cada fecha, los desaparecidos incluidos— y aparece otro: RSP no existe antes de mayo de 2003, y el backtest empieza en 1998. Así que la vara es el cálculo, y RSP pasa a ser su comprobación: en los 23 años en que existen los dos, el cálculo le saca +0,55 puntos al año, que es lo que cobra el fondo más lo que le cuesta operar, y mes a mes se mueven casi igual (correlación de 0,999, medido el 11/9/2026). Si algún día se separan más de un punto y medio al año, la web deja de publicar el track record en vez de enseñar una vara rota.

Asimetría que hay que declarar: ni la vara calculada ni nuestras carteras descuentan costes, mientras que RSP y SPY, que son fondos, llevan su comisión dentro del precio (0,20% RSP y 0,09% SPY). En la versión equiponderada la comparación es de igual a igual; en la versión por capitalización, la comisión de SPY juega un poco a nuestro favor.

Y si la referencia no llega hasta donde llega la cartera, se recorta el calendario y se dice, no se rellena. Arrastrar el último cierre de la referencia cuando va por detrás de los precios de las acciones le regalaría al mercado una subida que no hizo —cuatro sesiones de desfase valen un +0,87% inventado—. Un punto menos en la curva es un hueco visible; un punto con dos fechas dentro es una cifra falsa (regenerar_carteras_honesto.py).

4. Los cuatro factores, uno a uno

Aquí tienes la receta completa, con umbrales y límites incluidos. Hay una sola definición de cada factor y la usan las dos mitades del sistema: el ranking que ves y el backtest que lo mide (factores.py). No es un detalle organizativo: con dos definiciones del mismo factor —una para el backtest y otra para el motor de la web— se estaría enseñando la rentabilidad de una junto al ranking de la otra, que no es lo mismo. Aquí es una definición, en un fichero, compartida por las dos mitades.

Momentum

Rentabilidad a doce meses saltándose el último, dividida por la volatilidad anualizada. Sale de precios, no de cuentas.

momentum = ( P[t−21] / P[t−252] − 1 ) / ( σ · √252 )
σ = desviación típica poblacional de las variaciones diarias de las últimas 252 sesiones

Se exigen 253 cierres, más de 30 variaciones diarias válidas y volatilidad estrictamente positiva; si no, no hay momentum y se dice por qué (historia_corta, hueco_en_extremos, pocas_sesiones, volatilidad_cero). El salto de 21 sesiones es el estándar de la literatura: la última mensualidad se excluye porque a un mes el efecto se invierte.

Value — tres rentabilidades sobre el precio, mínimo 2 de 3

ey = BPA(TTM) / precio rentabilidad por beneficio
by = (patrimonio / acciones) / precio rentabilidad por valor contable
sy = (ingresos TTM / acciones) / precio rentabilidad por ventas

Quality — cinco ratios, mínimo 3 de 5

roe = beneficio / patrimonio
roa = beneficio / activo
gm = beneficio bruto / ingresos margen bruto
om = resultado de explotación / ingresos margen operativo
lev = deuda / patrimonio ENTRA INVERTIDO: más deuda, peor

Los cinco se piden por parejas de la misma presentación (§3). Y cero deuda a largo plazo declarada explícitamente no es un hueco: es el mejor apalancamiento posible. Cinco empresas del índice lo declaran hoy —CMG, FSLR, ODFL, SNDK y WDC— y ese cero declarado puntúa como lo que es: la mejor nota de apalancamiento, nunca confundido con un dato que falta.

Growth — tres crecimientos interanuales, mínimo 2 de 3

g_rev = ingresos(hoy) / ingresos(hace 1 año) − 1
g_eps = BPA(hoy) / BPA(hace 1 año) − 1
g_ocf = flujo operativo(hoy) / flujo operativo(hace 1 año) − 1

«Hace un año» es otra foto punto-en-el-tiempo, tomada con la misma regla: solo lo que era público ese día (pit.py, foto_anterior()). La base tiene que ser positiva: crecer un tanto por ciento sobre una pérdida no significa nada —de −16,50 a +2,81 no es «un 117% más de beneficio», es otra cosa que este cociente no sabe medir—. Eso es distinto de que no haya cuentas del año pasado, y se emiten dos motivos distintos (base_no_positiva y sin_ano_anterior). Boeing publica sus tres cifras del año anterior; lo que pasa es que dos son pérdidas.

Antes de normalizar: qué se tira y qué se recorta

Hay dos rangos por componente, y la diferencia importa mucho. POSIBLE es lo que una empresa real puede llegar a tener: fuera de ahí el dato está mal —no es una empresa extraordinaria— y el componente se descarta. LIMITES es el recorte estadístico dentro de lo posible: valores reales pero extremos que, sin recortar, disparan la desviación típica y comprimen el Z-Score de todas las demás.

Recortar un dato roto es peor que tirarlo. A Equity Residential le salía un margen bruto de 5.070 porque su etiqueta de ingresos de ese periodo eran 216.000 dólares en vez de 2.900 millones; recortado a 1,0 no quedaba «descartado», quedaba como la mejor del índice. Así es como SBAC acabó #4 de 476 en Quality, y como BRK-B fue #1 en Value con la nota máxima por un BPA de clase A aplicado a la clase B (rentabilidad por beneficio del 4.253%).

ComponentePOSIBLE (fuera: se descarta)LÍMITES (se recorta)
ey — rent. por beneficio−2,0 … 2,0−0,5 … 0,5
by — rent. por valor contable0,0 … 20,00,0 … 2,0
sy — rent. por ventas0,0 … 50,00,0 … 3,0
roe−10,0 … 10,0−1,0 … 1,5
roa−2,0 … 2,0−0,5 … 0,5
gm — margen bruto−1,0 … 1,50,0 … 1,0
om — margen operativo−5,0 … 1,5−0,5 … 1,0
lev — deuda / patrimonio0,0 … 50,00,0 … 3,0
g_rev — crecim. de ingresos−1,0 … 50,0−1,0 … 2,0
g_eps — crecim. de BPA−10,0 … 50,0−1,0 … 2,0
g_ocf — crecim. de flujo−10,0 … 50,0−1,0 … 2,0

Fuente: factores.py, constantes POSIBLE y LIMITES.

Los suelos no son simétricos por una razón concreta. Los ingresos no pueden caer más de un 100%, así que g_rev tiene el suelo en −1. El BPA y el flujo de caja sí pueden: basta con que crucen a negativo. Un −1,16 ahí no es un dato roto, es una empresa que pasó de ganar dinero a perderlo, que es justo lo que el factor debería penalizar; con el suelo en −1 se descartaba y la empresa se quedaba sin crecimiento.

Dos filtros de cordura sobre las métricas «por acción»

Son dos y no uno, porque no todas dependen de lo mismo. El valor contable y las ventas por acción solo necesitan que el recuento de acciones sea creíble (mínimo un millón; la empresa del índice con menos acciones es NVR, con unos 2,9 millones). La rentabilidad por beneficio necesita además que el BPA cuadre: BPA × acciones / beneficio tiene que estar entre 0,33 y 3,0.

El mínimo de acciones existe porque unas cuantas empresas publican el recuento en millones bajo una etiqueta y en unidades bajo otra: McDonald's daba 711,1 y 710.505.859, y con 711 acciones «capitalizaba» 195.000 dólares. El margen del BPA es ancho a propósito, para no confundir un error de escala con el efecto legítimo de las preferentes: Albemarle paga unos 190 millones al año de dividendo de preferentes convertibles, su identidad da 0,16 y el dato es correcto. Cada una de las tres métricas lleva su propia bandera: un BPA raro no se lleva por delante a las otras dos.

Cuando una casilla sale vacía, el motivo lo emite quien la vació

Cada componente que no llega a puntuar deja escrito su código y la cifra que lo sostiene, en la misma línea en la que se descarta (factores.py, función _anotar; se publica en motivos_factores.json). Un motivo emitido no puede contradecir al cálculo porque sale del cálculo.

La alternativa cómoda —que el navegador adivine el motivo mirando qué campos faltan— se descartó midiéndola: un motivo deducido de síntomas le diría a Boeing «no hay cuentas de hace un año» teniendo las tres cifras publicadas, y a NVR «bancos y aseguradoras, o deben más de lo que tienen» siendo una constructora con 3.391 millones de patrimonio positivo. Adivinando se acierta una de cada tres veces; por eso el motivo lo emite el cálculo, no el síntoma.

Los códigos son: falta_en_la_sec, acciones_no_creibles, bpa_no_cuadra, patrimonio_no_positivo, ingresos_no_positivos, base_no_positiva, sin_ano_anterior, fuera_de_rango, sin_cuentas, periodos_distintos; y a nivel de factor, pocos_componentes, sin_normalizar y clase_duplicada. En la sesión del 21/8/2026 hubo 41 casillas vacías en 499 empresas: 39 por no llegar al mínimo de componentes y 2 por historia de precios demasiado corta.

5. Cómo se combinan: el Z-Score

Cada componente se normaliza por separado y luego se promedian los Z. En ese orden, y el orden es todo el asunto.

Z(componente) = recorte±3 [ signo · (x − media) / desviación ]
Z(factor) = recorte±3 [ media de los Z de sus componentes disponibles ]
Z(multi) = ( Z_momentum + Z_value + Z_quality + Z_growth ) / 4

La media y la desviación se calculan sobre el universo puntuado de esa fecha, no sobre una tabla histórica: la desviación es poblacional, se exigen al menos 20 empresas con ese componente y una desviación estrictamente positiva. El signo es −1 para el apalancamiento (más deuda, peor) y +1 para todo lo demás. La winsorización a ±3 se aplica dos veces, al componente y al factor.

Por qué no se promedia en crudo. Cada componente vive en una escala distinta, así que el que más varía se lo come todo. Medido el 20/7/2026 sobre el S&P 500, el peso real dentro de Quality al promediar sin normalizar era: margen bruto 54,2%, margen operativo 45,0%, ROE 0,2%, ROA 0,0%, deuda/patrimonio 0,6%. Es decir, «Quality» eran los márgenes y nada más: el ROE, que es la primera métrica que nombra la web, pesaba dos milésimas. Normalizando primero, los cinco pesan igual.

El multifactorial solo puntúa a empresas que tienen los cuatro factores. Puntuar con dos y compararla con otra que tiene cuatro no es comparar. Ese es el motivo de que el ranking multifactorial sea más corto que los de un factor: en la sesión del 21/10/2026 había 494 empresas con momentum, 491 con value, 491 con growth, 471 con quality y 464 con los cuatro, sobre una lista de 503 constituyentes.

6. El walk-forward

Nuestro backtest está construido para responder a una sola pregunta: qué habría pasado de verdad. La forma más fácil de hacer que una estrategia parezca brillante es elegir a las ganadoras con los datos de hoy y luego medirlas contra los precios del pasado —produce cifras espectaculares y cero valor predictivo—, así que aquí se hace exactamente al revés, y de forma reproducible: la historia hasta el 21/8/2026 se calculó una vez y se congeló, y cada mes nuevo lo añade el ciclo diario (regenerar_carteras_honesto.py, y su gemelo de laboratorio backtest_honesto.py):

1. Situarse en una fecha del pasado
Un rebalanceo cada 21 sesiones —aproximadamente mensual—, sobre el calendario real de negociación.
2. Puntuar solo con lo que era público ese día
Precios hasta esa sesión incluida, nada posterior; fundamentales ya presentados en la SEC según su campo filed; y solo las empresas que estaban en el índice ese día.
3. Comprar las N mejores, equiponderadas
10, 20, 50 o 100 posiciones, cada una con el mismo peso. La tabla de posiciones que ves usa esos mismos pesos, porque si no la curva describiría una cartera distinta de la que se te enseña.
4. Avanzar un periodo y repetir
Con las reglas idénticas en todos los periodos. Ningún parámetro se reajusta año por año para que la curva quede más bonita.

La rentabilidad es total: el rendimiento de cada tramo es (precio_final − precio_inicial + dividendos) / precio_inicial, contando los dividendos cuya fecha ex cae dentro del tramo. Se aplica igual a la estrategia y al mercado.

Y una posición que deja de cotizar se cierra, no se evapora. Si la cotización se corta a mitad de tramo por una opa, una fusión o una exclusión, devolver «sin dato» borraría a esa empresa del promedio como si nunca se hubiera comprado, y el sesgo de supervivencia volvería a entrar por la puerta de atrás. Se liquida al último precio conocido y ese resultado cuenta.

Las métricas, y cómo se miden para no favorecer a la cartera

MétricaCómo se calcula
CAGRSobre años reales de calendario entre la primera compra y el último punto de la curva, no sobre 252/21 periodos «de media». Con 59 rebalanceos la cuenta teórica daría 4,917 años cuando de verdad han pasado 4,942, y ese error iría siempre a favor de la cartera.
Sharpe / SortinoExceso sobre la letra del Tesoro a 3 meses de cada día (^IRX; entre el 0,02% y el 5% según el año), dividido por la volatilidad (Sharpe) o solo por la de las bajadas (Sortino), anualizado con 12 periodos por año.
Caída máximaMedida día a día, no en los puntos de rebalanceo, y con el pico arrancando en el capital inicial. Medirla mensualmente esconde varios puntos, siempre a favor de la cartera: en la multifactorial de 10 la cifra mensual sale −62,3% cuando la caída real día a día llega a −65,9%, y en la de momentum de 10, −74,2% frente a −77,6% (carteras.json del 11/9/2026). Por eso el Calmar también se calcula sobre la caída diaria.
Beta y alfaContra el S&P 500 equiponderado en la misma ventana. Cada tramo del gráfico (1, 2, 3, 4 años o todo) recalcula todo sobre ese tramo: un beta de toda la historia aplicado a un año sería mezclar ventanas.
YTDContra el valor de la cartera el último día hábil del año anterior, no contra el primer rebalanceo de enero, que se comería las dos primeras semanas.

Cuándo empieza cada curva, y por qué no en cero

Desde diciembre de 1998 el universo punto-en-el-tiempo ya llena las veinte carteras, así que hoy todas arrancan el mismo día. La regla sigue ahí para cuando no sea así: un periodo sin cartera es un hueco declarado, nunca un cero inventado: un mes plano que no existió bastaría para que dos pantallas dieran dos CAGR distintos del mismo acumulado. La serie empieza en el primer periodo con la cartera llena de verdad, y un hueco después de haber empezado no se rellena: el programa se para y avisa.

Las cinco estrategias de un mismo tamaño arrancan todas en la fecha en la que el universo llena las cinco, que es la de la multifactorial (necesita las cuatro componentes a la vez y es la más exigente). Con el fichero del 21/10/2026: las carteras de 10 y 20 posiciones arrancan el 31/12/1998 y las de 50 y 100 el 31/12/1998. Momentum, value y quality podían haber empezado antes; empezar más tarde no es inventar un dato, callarlo sí lo sería.

7. Costes

Muy pocas webs te cuentan lo que cuesta seguir su estrategia; aquí está medido y publicado. Y para que lo leas con las cartas boca arriba, primero lo importante: ninguna curva de esta web lleva costes. Ni comisiones, ni horquilla de compraventa, ni deslizamiento, ni impuestos. Tu resultado real será inferior. Está escrito en los avisos que acompañan a cada cartera en carteras.json y se dice aquí otra vez porque es la limitación que más pesa sobre una estrategia que rota cada mes.

Lo que sí se mide, aparte, es la rotación y lo que costaría (medir_senal.py). El supuesto está escrito: 10 puntos básicos por lado (0,10% del importe operado, en cada lado), una cifra redonda y deliberadamente conservadora para valores del S&P 500 —cubre comisión de un bróker minorista, media horquilla de una empresa grande y algo de deslizamiento—. Se cambia con --coste. El coste anual en puntos es rotación_anual × 2 × 0,0010, porque cada renovación es una venta y una compra.

CarteraPosiciones que cambian por rebalanceoRotación anualCoste anual a 10 pb/ladoCon banda de histéresis
Multifactorial 2025,3%303%0,61 puntos132% → 0,26 puntos
Multifactorial 1028,6%344%0,69 puntos167% → 0,33 puntos
Momentum 2035,9%431%0,86 puntos233% → 0,47 puntos
Value 2014,7%177%0,35 puntos54% → 0,11 puntos
Quality 205,7%68%0,14 puntos22% → 0,05 puntos
Growth 2015,4%185%0,37 puntos117% → 0,23 puntos

Fuente: medir_senal.py, medición del 14/8/2026 sobre 59 rebalanceos entre el 10/8/2021 y el 20/7/2026. Ojo: esa medición se hizo sin universo punto-en-el-tiempo (constituyentes de hoy) y sobre la muestra corta de 4,9 años, así que no es la misma ventana que las curvas publicadas. La rotación es de una dirección: la anual es la media por periodo multiplicada por 12.

La banda de histéresis es la forma barata de recortar rotación sin cambiar la señal: una posición se mantiene mientras siga dentro del top 2N y solo se vende cuando cae por debajo; los huecos se rellenan con los mejores no poseídos. Mismo criterio de entrada, uno más laxo de salida. No está aplicada en las carteras que publica la web: es una medición, no la estrategia.

El medio punto al año de arriba es el coste de la rotación bajo un supuesto que conviene decir en voz alta: 10 puntos básicos por lado, sobre 59 rebalanceos de 2021-2026 y sin universo punto-en-el-tiempo. La misma cartera, medida con medir_costes.py sobre los 330 rebalanceos de la historia larga, cuesta 31 pb al año suponiendo una horquilla declarada de 3 pb, y 219-274 pb con la horquilla que estiman nuestros dos estimadores de los máximos y mínimos del día, que es una cota alta. Las tres cifras son el mismo cálculo con supuestos distintos, no tres resultados que se contradigan. Por eso toda cifra de coste de esta web dice tres cosas: si la horquilla es supuesta o estimada, con qué comisión y qué capital, y sobre qué ventana. Sin esas tres, dos números del mismo cálculo se leen como una contradicción. No incluye el cambio de divisa —que para un inversor en euros puede ser el gasto mayor y es el más fácil de evitar— ni impuestos: una cartera que rebalancea cada mes realiza plusvalías cada mes, y un fondo indexado las difiere.

8. Qué dicen las pruebas

Casi tres décadas de walk-forward reproducible, fichero a fichero: pocas casas pueden enseñarte una muestra así, y esta es la nuestra. Todas las cifras de esta sección salen de carteras.json tal como está publicado hoy, sobre la ventana 31/12/1998 → 21/10/2026: 27,81 años y 333 meses medibles, los mismos para todos los tamaños de cartera. (Los rebalanceos son uno más que los meses: el último ya está comprado y su mes no ha cerrado.)

EstrategiaCAGRSharpeCaída máx.VolatilidadAlfa vs equiponderadoBeta
Multifactorial 1011,83%0,46−65,91%28,65%+3,57%0,76
Multifactorial 2011,32%0,47−63,55%25,32%+2,88%0,78
Multifactorial 5010,54%0,47−61,69%22,08%+1,94%0,80
Multifactorial 10010,66%0,50−59,72%20,58%+1,84%0,83
Momentum 108,32%0,35−77,58%28,35%+0,80%0,67
Momentum 209,85%0,42−65,31%25,14%+2,53%0,65
Value 2011,10%0,44−80,01%28,83%−3,17%1,50
Quality 2010,33%0,47−53,81%21,77%+1,60%0,82
Growth 207,86%0,34−70,12%26,70%−2,58%1,03
S&P 500 equiponderado (calculado)10,22%0,48−60,41%20,23%0,00%1,00

Fuente: carteras.json (sesión 2026-10-21) (la vara equiponderada la mide el mismo motor, sobre su curva diaria y con las mismas fórmulas que las carteras). Acumulados de la ventana completa: multifactorial 20 +1871% y el S&P 500 equiponderado +1395%.

Y una muestra de que aquí no se maquilla nada: léanse con cuidado las filas de Value y de Growth: son las de alfa negativa, y Value tiene además la beta más alta y la peor caída de la tabla (carteras.json del 11/9/2026). Una estrategia puede terminar arriba y aun así no haber batido a nada, y se publica igual.

La ventaja: medida, no demostrada

Someter tu propia ventaja a un test estadístico y publicar el resultado aunque no te favorezca es rarísimo en este sector. Nosotros lo hacemos en cada arranque del servidor, sobre la curva publicada:

Lo que dicen los 333 meses de la cartera multifactorial de 20

  • Le saca al S&P 500 equiponderado +0,11% al mes de media, y gana en 188 de 333 meses (56%). Compuesto, eso son los ~1,1 puntos anuales de diferencia de CAGR.
  • La ventaja apunta a favor, pero es pequeña frente a su propia variación: t = 0,46 y, si la ventaja real fuera cero, todavía habría alrededor de un 32,2% de probabilidad de ver 27,8 años así de buenos o mejores por azar.
  • Dicho como horquilla, que es más honesto que una sola cifra: con bootstrap estacionario por bloques (Politis-Romano, bloques de seis meses de media, 10.000 remuestreos con semilla fija, recalculando en cada uno la diferencia de CAGR), la ventaja anual queda entre −4,0 y +6,4 puntos con un 90% de confianza y entre −5,1 y +7,4 con un 95%. El cero está dentro de las dos, y en un 35,2% de los remuestreos la ventaja sale negativa.

Es el más conservador de los tres métodos que se probaron el 22/8/2026: la t de Student y el bootstrap del exceso excluían el cero al 90% por una o dos décimas; este no. Se publica el que no lo excluye. El cálculo vive en server.js (getTrackRecord / intervaloVentaja) y se rehace en cada arranque a partir de la curva publicada, así que no puede ir escrito a mano ni quedarse viejo.

El árbitro de señales: ¿ordena la puntuación?

Un backtest de cartera responde «cuánto habría ganado una cartera de 20». Es una trayectoria: depende del corte en 20, del azar de unos pocos valores y de la suerte de las fechas. Para decidir entre dos definiciones parecidas del mismo factor hace falta medir la señal, no la cartera (medir_senal.py). Cuatro estadísticos, con su definición exacta escrita en el propio fichero:

El coeficiente de información, sobre la historia larga

  • Medido sobre los 331 meses de la historia larga (diciembre de 1998 a agosto de 2026, datos de Sharadar con todas las empresas que pasaron por el índice, universo por fecha), el IC del multifactorial a un mes es +0,0121 con una desviación de 0,156 entre meses: t = 1,41 (medir_senal.py, medición del 11/9/2026). Con los umbrales de siempre sigue sin llegar a significativo: la señal apunta en la dirección correcta, se separa del ruido algo más que con la historia corta, y no lo bastante.
  • La rentabilidad con la que se mide es total —precio más los dividendos de Sharadar desde 1998—, y la cartera que sale de esa misma medición cuadra con la publicada: el multifactorial de 20 da 11,37% al año frente al 10,37% del equiponderado, las dos cifras de la portada.
  • Con la historia anterior (185 meses de 2011 a 2026, nuestros datos de siempre) salía t = 0,72, y medida solo con precio en el tramo que no tenía dividendos habría aparentado 0,99. Se publicó la medida bien hecha, no la que favorecía.

Publicar t = 1,41 sabiendo que no llega a 2 resume la regla de esta casa: la cifra es la que sale, no la que conviene.

Coeficiente de información (IC)
Correlación de rango de Spearman entre la puntuación del día de decisión y la rentabilidad posterior, calculada como el Pearson de los rangos promediados —no con la fórmula corta, que solo vale sin empates, y la winsorización a ±3 crea empates reales en el tope—. El IC-IR es la media dividida por la desviación típica muestral de la serie.
Escalera de deciles
El universo puntuado se parte en diez grupos y se mide la rentabilidad media de cada uno en exceso sobre la media de todos los puntuados ese día. Ahí se ve si el factor funciona en todo el rango o solo en el extremo: uno que solo distingue el decil 10 es un puñado de valores, no un factor. La monotonía es la correlación entre número de decil y rentabilidad, con el signo cambiado, para que +1 signifique escalera perfecta.
Solapamiento
Con horizontes de más de un periodo las observaciones se solapan, lo que no sesga la media pero infla la significación aparente. Por eso se da también el IC-IR calculado sobre la submuestra de fechas independientes.
Fuga de futuro
El contexto que recibe cada variante solo da acceso a lo que era público ese día; no hay forma de pedirle un dato posterior. Y además se comprueba con veneno: se meten cifras falsas fechadas después de la fecha preguntada y se exige que no cambie ni un número —y, como control de potencia, que el mismo veneno sí cambie la puntuación cuando ya es pasado, porque si no la prueba no probaría nada— (verificar_backtest.py).
FactorIC medioIC-IRMeses con IC positivoMonotonía de decilesDecil 1 − decil 10
Momentum+0,0123+0,0657,1%+0,05+0,17%
Value+0,0103+0,0653,5%+0,90+0,33%
Quality+0,0020+0,0251,7%−0,58−0,06%
Growth−0,0011−0,0150,5%−0,77−0,09%
Multifactorial+0,0121+0,0855,6%+0,08+0,12%

Fuente: medicion_senal_larga.json (11/9/2026), producido por medir_senal.py sobre los datos de Sharadar. Horizonte de un periodo (21 sesiones), 331 fechas entre el 31/12/1998 y el 21/8/2026, universo punto-en-el-tiempo: en cada fecha, los miembros del índice ese día (entre 490 y 502 puntuables), de las 1.124 empresas que pasaron por él. Rentabilidad total, con dividendos. Es la misma medición que la cifra del recuadro.

Conviene leer esa tabla entera y no solo la última fila. Son IC pequeños —una centésima de media— con una desviación de 0,12 a 0,21 entre meses: las señales ordenan poco y con mucho ruido. Value es el único factor con la escalera de deciles ordenada de arriba abajo (monotonía +0,90; a doce meses su mejor decil le saca 3,4 puntos al peor). Momentum tiene IC positivo pero la escalera plana, quality la tiene al revés con un IC casi nulo, y growth sale invertido: a doce meses sus peor puntuadas rinden 2,8 puntos más que las mejor puntuadas. El multifactorial promedia todo eso: IC positivo y escalera casi plana. Con la historia corta, quality salía invertido y momentum era el más limpio; con casi el doble de historia el reparto cambia, que es lo que cabe esperar de señales tan débiles. Todo está publicado porque todo está medido; no se elige lo que favorece.

9. Lo que no sabemos

Una sección como esta es de lo más raro que vas a encontrar en una web financiera, y es de lo que más orgullosos estamos: decirte con precisión dónde acaba lo que sabemos es la mejor prueba de que todo lo demás está medido de verdad. Nada de lo que sigue resta a lo anterior; lo delimita.

La otra mitad del sesgo de supervivencia, casi cerrada

El lado de la pertenencia está resuelto: en cada fecha solo entran las que estaban en el índice ese día. El de los precios también, casi del todo: desde que el histórico sale de Sharadar tenemos la serie de las empresas que salieron del índice, y en las fechas de decisión solo le falta precio a en torno al 0,1% de los puestos de miembro. Con nuestros datos de antes faltaba el de casi un tercio de los miembros de 2011. Lo que queda está medido y declarado en los avisos de cada cartera.

Sigue siendo una sola historia del mercado

27,8 años de decisiones de compra mensuales. Cubre el pinchazo de las puntocom, la crisis de 2008, el desplome de 2020 y el mercado bajista de 2022. Son muchos ciclos, pero de un solo mercado. Y los 333 meses no son 333 observaciones independientes: una cartera que rota un cuarto de sus posiciones al mes arrastra las mismas empresas durante trimestres.

La ventaja no está demostrada

Las dos formas de mirarlo coinciden. Por el lado de la cartera, el cero cae dentro del intervalo de confianza del 90% y del 95%; por el lado de la señal, el IC del multifactorial, medido sobre la historia larga, da t = 1,41 (§8). No decimos que no funcione: decimos que ni 27,8 años y quinientas empresas bastan para separarlo del ruido en la versión equiponderada, y que quien invierta debería contar con esa posibilidad. Un componente de esa incertidumbre es puramente estadístico y no se arregla con mejor código: haría falta más historia de la que existe.

Los factores no están comparados entre sí

Los cuatro entran con el mismo peso —una media aritmética— y eso es una decisión, no un resultado. Y conviene saber que una media aritmética de cuatro Z no reparte 25/25/25/25: reparte según lo que se disperse cada uno. Medido el 31/8/2026 sobre 188 rebalanceos, con el histórico 2011-2026 de antes de alargarlo hasta 1998 (así que las rentabilidades de la cartera que salen abajo son de esa ventana, no de la tabla del §8 de hoy): momento 34,0 %, crecimiento 23,4 %, valor 22,2 % y calidad 20,3 %. Igualarlos de verdad —normalizando otra vez cada Z antes de promediar— se probó y sale peor: el poder de ordenar baja (t pareada −0,81) y la cartera de 20 pasa de 16,4 % a 15,4 % anual neto. Así que el reparto se queda como está, y ahora por una medición en vez de solo por prudencia. Ponderarlos por su rendimiento pasado seguiría siendo ajustar el modelo a la muestra que se usa para medirlo.

Los datos son de terceros

Sharadar para el histórico; la SEC, las APIs de mercado y la tabla de constituyentes de Wikipedia para el día a día. Su exactitud no está bajo nuestro control: pueden traer errores de origen, revisiones posteriores o desfases de publicación. El cálculo es automático y un fallo en una fuente puede propagarse a una puntuación sin que nadie lo revise a mano ese día. Por eso hay veintinueve verificadores (§10) vigilando las costuras con cada fuente: aquí la desconfianza hacia el dato está automatizada.

Un verificador solo caza lo que alguien pensó en comprobar

Los veintinueve guardianes en verde no demuestran que la web esté bien: demuestran que las veintinueve clases de fallo más dañinas para una web de datos no están presentes hoy. Una clase de fallo que nadie pensó en comprobar sigue pudiendo pasar entera (verificar_todo.py, sus propias palabras).

Hay además un desfase que no es un fallo y conviene entender: los fundamentales son trimestrales y un trimestre tarda unas seis semanas en llegar a la SEC. Hasta esa fecha el modelo sigue con el trimestre anterior. Es el retraso que tiene también cualquier inversor real, no un sesgo.

10. Cómo comprobarlo tú mismo

No te pedimos un acto de fe: te damos los datos. Publicar la metodología sirve de poco si no se pueden bajar los números, así que todo lo que pinta esta web se descarga gratis y sin cuenta, del mismo fichero que pinta la tabla: no puede decir otra cosa que la pantalla.

QuéDónde
El ranking completo del día, en CSV
Las ~500 empresas con su Z de cada factor y su precio; no diez filas y el resto detrás de un registro.
/api/descarga/ranking.csv?factor=multifactor&lang=es
factor: multifactor, momentum, value, quality, growth
La curva walk-forward de una cartera, en CSV
Cada fecha es un rebalanceo, con la cartera y el S&P 500 equiponderado en base 100 y el rendimiento de cada mes. Ojo a lo que este fichero NO permite rehacer: es mensual, y el Sharpe, el Sortino, la volatilidad, la caída máxima y el Calmar del cuadro se calculan sobre la curva DIARIA, que no se publica. Con los puntos mensuales salen cifras distintas y siempre más favorables —para la multifactorial de 20, Sharpe 0,52 en vez de 0,47, volatilidad 21,21% en vez de 25,35% y caída máxima −61,14% en vez de −63,55%—, así que lo publicado es lo severo, no lo bonito. El CAGR (11,37%), la beta, el alfa, el Treynor y el porcentaje de meses ganados sí se reproducen exactos desde aquí. Comprobado el 12/9/2026 recalculándolo con código independiente sobre los 331 puntos mensuales que van del 31/12/1998 al 21/8/2026.
/api/descarga/curva.csv?id=multi_20&lang=es
id: multi/spmo/value/qual/growth _10/_20/_50/_100
Las carteras y sus métricas/carteras.json — incluye performance, history, assets, fechaCompra, metodologia y avisos de cada una
El ranking del día/algoritmos.json
Por qué una casilla está vacía/motivos_factores.json — el código y la cifra que emitió quien descartó el componente
El histórico de rankings y la escalera de deciles/api/ranking-historico, /api/ranking-historico/deciles?factor=…, /api/ranking-historico/serie
Descargas en hoja de cálculo/api/descarga/estrategias.xlsx, /api/descarga/deciles.xlsx

Cada CSV lleva su fecha en la cabecera y en el nombre del fichero, para que dentro de un mes se sepa de cuándo es.

Los veintinueve guardianes

Una comprobación que se hace una sola vez no es una garantía: es la foto de un día bueno. Veintinueve verificadores corren sobre los datos antes de publicarlos, con una sola orden (verificar_todo.py), y distinguen tres estados y no dos: bien, mal y no examinado — porque «no he podido comprobarlo» no es «está bien», y un verificador que confunde los dos aprueba en falso.

GuardiánQué comprueba
verificar_carteras.pyque el backtest publicado no sea circular ni esté inflado
verificar_ventanas_coherentes.pyque la ficha de una cartera y el gráfico de al lado den el mismo rendimiento
verificar_frescura.pyque ningún fichero haya dejado de avanzar
verificar_misma_pantalla.pyque dos cifras con el mismo nombre no se contradigan en la misma pantalla
verificar_aviso_ciclo.mjsque el aviso por correo avise cuando el ciclo falla, y que calle cuando toca
verificar_datos.pycosturas de precios y coherencia entre ficheros
verificar_backtest.pylas cifras del backtest, incluida la prueba del veneno contra la fuga de futuro
verificar_maquetacion.mjshuecos, desbordes y saltos en 36 páginas por 4 anchos, con navegador de verdad
verificar_precios_cruzado.pyque los precios publicados cuadren con una segunda fuente
verificar_cadenas.pyque el ciclo del servidor y el del portátil regeneren lo mismo
horario_mercado.test.jsque el ciclo no se equivoque de sesión: fines de semana, festivos y cambios de hora
verificar_ranking_vs_simulador.jsque cada cartera sea el top-N del ranking y que ninguna empresa tenga dos precios
verificar_simulador_snapshot.pyque el simulador reproduzca las curvas publicadas: la promesa «es la misma maquinaria»
verificar_seo.mjslo que ve un buscador: canonical, hreflang, sitemaps y títulos, contra producción
verificar_cartera_comprada.pyque la cartera que se enseña como comprada sea la del último rebalanceo, no el ranking de hoy
verificar_insiders.pyque la cadena de Formularios 4 llegue entera: compras y ventas, y no solo las ventas
verificar_presentaciones_sec.pyel único que pregunta a la SEC en vez de a nuestros ficheros: que cada 10-Q y 10-K presentado esté ingerido
verificar_rutas.mjsque ninguna página reviente al servirse: 64 rutas, una de cada familia, antes de subir nada
verificar_series_ajenas.pyque la serie de precios de cada empresa sea suya y no de otra
verificar_capitalizacion.pyque ninguna empresa tenga la capitalización de una clase de acción con el precio de otra
medir_cobertura_pit.pyque el fichero que lee el backtest cubra el índice de cada fecha, no solo el de hoy
verificar_navegacion.mjsque pulsar una fila del ranking, elegir empresa en el buscador de la cabecera o cambiar de empresa dentro de la ficha lleven a la empresa que se pulsa, y no a la ficha por defecto
verificar_url_estable.mjsque la dirección con la que llega el visitante siga en la barra después de cargar: las páginas que reutilizan la vista de otra sección se reescribían solas y al recargar se perdían
verificar_sesiones.mjsque una sesión revocada deje de valer en los seis sitios que la comprueban, que el pase del correo no sea un token de acceso, y que la baja de los avisos se pueda dar sin iniciar sesión
verificar_barrido_visitas.mjsque el registro de visitas se borre de verdad a los 12 meses como promete el aviso legal, y que rotarlo no pierda las visitas que entran mientras rota
verificar_accesibilidad.mjsque la web se pueda usar con teclado y con lector de pantalla: foco, nombres, cabeceras de tabla, contraste real e idioma declarado
verificar_jsonld.mjsque el dato estructurado que lee un buscador diga lo mismo que la página que ve el visitante, y que cada descarga que promete responda
verificar_reciente_ssr.mjsque lo que pinta el servidor y lo que app.js reescribe encima digan exactamente lo mismo: una página que se cambia el texto a sí misma al cargar le enseña un parpadeo al visitante y deja al buscador leyendo la versión corta
verificar_ficha_ssr.mjsque las cifras que la ficha sirve ya escritas en su HTML sean exactamente las que app.js deja un segundo después: esos 27 números están escritos dos veces, una en el servidor y otra en el navegador, y cuando las dos copias se separan el visitante ve la cifra más grande de la página cambiarse de formato sola

Uno de esa lista, medir_cobertura_pit.py, vigila un riesgo que ningún otro mira: que el backtest cayera en silencio a un fichero de fundamentales con solo las empresas de hoy —507 en vez de 880—. Eso dejaría a 205 de los 498 miembros del índice de febrero de 2011 sin fundamentales, elegiría el top-20 de 2011 entre supervivientes e inflaría la cartera multifactorial de 20 en +2,06 puntos de CAGR —medido en agosto de 2026 sobre la historia anterior, que empezaba en 2011—. Y el verificador del backtest no lo cazaría: su prueba del veneno busca fugas de futuro, y esto no es una fuga, es un sesgo de selección. Por eso la cobertura de cada fecha tiene guardián propio.

Si encuentras una cifra que no cuadra, escribe a [email protected] indicando la página y el valor. Los errores se corrigen; no se discuten.

Todo el cálculo diario se rehace tres veces cada día hábil (00:00, 15:31 y 22:20, hora de España) y los ficheros de datos se reescriben enteros en cada ciclo; la historia hasta el 21/8/2026 está congelada y no se recalcula. Las cifras vivas —las que cambian de un ciclo al siguiente— las escribe el servidor al servir la página, tomándolas del fichero publicado. Las mediciones puntuales sí están escritas a mano, y por eso llevan al lado la fecha en que se hicieron: nadie las regenera, y una medición sin fecha no valdría nada.

Quién está detrás de esto

No hay redacción, ni equipo, ni mesa de análisis. Esto lo hace Pol Gracia Serrahima, ingeniero de IA y automatización (n8n), desde Cerdanyola del Vallès, y lleva más de veinte años invirtiendo en el S&P 500. Ha construido la web entera él solo: el motor que puntúa a las empresas del índice cada día de mercado, los verificadores que lo vigilan y cada una de las páginas que estás leyendo, esta incluida. Es el titular del sitio, con nombre, empresa y NIF, en el aviso legal.

Una persona sola no pide que se la crea: enseña el método. Por eso esta página es tan larga y por eso lo incómodo se publica junto a lo bueno — de dónde sale cada dato (§3), qué cuesta operarlo (§7), qué dicen las pruebas (§8) y lo que no sabemos, empezando por que la ventaja está medida pero no demostrada. Nadie elige ni retoca a mano ningún valor de ningún ranking ni de ninguna cartera: lo hace el algoritmo con la regla que está escrita aquí arriba. Los resultados de los backtests son simulados, no operaciones reales, y rentabilidades pasadas no garantizan rentabilidades futuras.

También declara lo suyo. Las acciones que tiene y que aparecen en esta web están publicadas con su fecha en la declaración de intereses, y se actualizan el mismo día en que cambian; no intervienen en el algoritmo, que sale igual las tenga o no. Quant500 no cobra de las empresas analizadas, ni de brókeres, ni por publicidad, ni por enlaces de afiliación.

Y lo que sale de todo esto se regala. Los rankings, las carteras modelo, las fichas de empresa, el simulador, las guías y las descargas en CSV del apartado anterior están abiertos, gratis y sin registro: el ranking completo del día con la puntuación de cada factor, no diez filas y el resto detrás de una cuenta. Publica a diario desde agosto de 2026.

La cartera del modelo, cada semana en tu correo

Cada sábado, su semana en un minuto: cómo fue, lo mejor y lo peor, y qué directivos compraron con su dinero. Y el día que el modelo se rehace, qué entra y qué sale. Es una simulación, no un consejo. Como mucho un correo a la semana, sin publicidad y sin cuenta; te das de baja con un clic. Lo hace una persona: Pol Gracia.

Cartera modelo con resultados simulados, no una recomendación personalizada. Tu correo se usa solo para esto: privacidad.

Gravedad del S&P 500