El Deflated Sharpe Ratio: ¿Cuántos de los 'ganadores' de tu backtest sobreviven al multiple testing?
Parte de la serie "Backtests Without Illusions".
📄 Este artículo se convirtió en un paper de investigación. Cada número de este texto proviene de un único script determinista que construye una verdad de referencia controlada — búsquedas de ruido puro, búsquedas con edge plantado y un grid de parámetros real y correlacionado — y luego corre sobre ella el Deflated Sharpe Ratio, el recorte de multiple testing de Harvey-Liu y el Reality Check de White / SPA de Hansen, midiendo directamente la tasa de falsos descubrimientos y el power de detección de cada método. Lee el paper online (versión interactiva + PDF) en deflated-sharpe.marketmaker.cc, código y datos en github.com/suenot/deflated-sharpe-search.
Corres un barrido de parámetros. Dieciséis longitudes rápidas, cuarenta longitudes lentas, 640 combinaciones de un cruce de medias móviles. El grid termina y una celda brilla: un Sharpe anualizado de 3,9, un p-value de test único de . Doce ceros de significancia. Has encontrado algo.
O no has encontrado nada, y la búsqueda lo encontró por ti.
Una búsqueda de parámetros no es un test. Es una máquina para encontrar el más afortunado de N intentos, y cuantos más intentos le des, más afortunado se ve su ganador — con o sin ningún edge real debajo. El mejor Sharpe de entre N está inflado por selección de la misma manera en que el más alto de mil personas al azar es alto: no porque la altura sea real, sino porque buscaste. Las estadísticas de test único impresas junto al ganador — su p-value, su t-stat, su "¿es significativo?" — fueron diseñadas para una hipótesis pre-registrada. Aliméntalas con el sobreviviente de una búsqueda y mienten, con confianza, cada vez.
Este artículo mide con exactitud qué tan mal mienten, y luego mide tres herramientas que lo corrigen. Todo el punto es la verdad de referencia controlada: generamos retornos donde conocemos la respuesta — a veces ruido puro con cero edge, a veces un edge plantado de fuerza conocida — de modo que "¿el método acertó?" sea un hecho, no un juicio de valor. Aquí va el titular por adelantado. En búsquedas de nulo conocido, donde la respuesta honesta siempre es "no hay descubrimiento", así de seguido cada test grita "lobo":
| Test | Tasa de falsos descubrimientos en búsquedas de nulo conocido | Veredicto |
|---|---|---|
| "¿Es significativo el mejor Sharpe?" ingenuo | 1,000 | marca un descubrimiento cada vez |
| Deflated Sharpe Ratio (DSR ≥ 0,95) | 0,001 | controlado |
| Recorte Harvey-Liu — Bonferroni | 0,057 | ~controlado |
| Recorte Harvey-Liu — Holm | 0,057 | ~controlado |
| Recorte Harvey-Liu — BHY | 0,007 | controlado |
| Reality Check de White (bootstrap) | 0,022 | controlado |
1.000 estrategias por búsqueda, 1.000 observaciones cada una, 2.000 búsquedas nulas independientes, Sharpe verdadero = 0 en todas partes. Retornos Normales iid sintéticos, semilla 0, α = 0,05, 252 periodos/año. La tasa de falsos descubrimientos del test ingenuo no es alta — es exactamente uno.
Lee la primera fila hasta que duela. Un test que debería dispararse el 5% de las veces sobre ruido puro se dispara el 100% de las veces — porque no le estás mostrando ruido puro, le estás mostrando el máximo de mil extracciones de ruido puro, y el máximo de mil lanzadores de moneda siempre parece un genio. Cada otra fila es un método que sabe esto y lo corrige. Este es todo el artículo: por qué la primera fila es 1,000, por qué las otras no lo son, y el único lugar (la última sección) donde incluso los buenos métodos necesitan una segunda corrección para seguir siendo honestos.
Acto 1 — La trampa: una búsqueda fabrica Sharpe de la nada

Empecemos con la trampa más limpia posible. Genera estrategias cuyos retornos son ruido Normal estándar independiente — sin drift, sin habilidad, Sharpe verdadero exactamente cero para todas ellas. Cada una tiene observaciones. Ahora haz lo que hace toda búsqueda de parámetros: quédate con la mejor.
El Sharpe por observación del mejor-de-1000 promedia 0,1027, que anualizado da 1,63 (derivado: ). Ese no es un número modesto. Un Sharpe anualizado de 1,63 es el tipo de resultado que hace que una estrategia consiga financiamiento, se publique, reciba asignación de capital. Salió de un generador de números aleatorios con el drift fijado en cero.
Ahora entrégale el ganador al test de significancia ingenuo — el que imprime gratis toda librería de backtesting. Convierte su Sharpe en un estadístico t (), toma el p-value de una cola, llámalo descubrimiento si :
El p-value mediano de test único de estos ganadores de ruido es 0,000686 — tres ceros de "significancia" para una estrategia sin edge. Y a través de 2.000 búsquedas nulas independientes, el test ingenuo declara un descubrimiento en cada una de ellas: una tasa de falsos descubrimientos de 1,000. No "inflada". No "algo alta". Un test que es correcto, por construcción, como mucho el 5% de las veces sobre una única hipótesis nula, está equivocado el 100% de las veces sobre el ganador de una búsqueda.
El mecanismo no es sutil una vez nombrado. El test ingenuo pregunta "¿podría este Sharpe surgir por azar bajo el nulo?" — una pregunta justa para una estrategia elegida antes de mirar los datos. Pero elegiste esta porque tenía el Sharpe más alto de entre mil. Has condicionado sobre el máximo, y la distribución muestral de un máximo no se parece en nada a la distribución muestral de una única extracción. Es la misma enfermedad que diagnosticó nuestra taxonomía de look-ahead bias desde el otro extremo — allí, una fuga de una barra fabricaba un Sharpe de 15 a partir de ruido; aquí, una búsqueda fabrica un Sharpe de 1,63 a partir de ruido sin fuga alguna, puramente por selección. Mecanismo distinto, síntoma idéntico: un Sharpe de aspecto excelente que no significa nada.
El número 1,63 es el importante, así que guárdalo. Es el techo de ruido para esta búsqueda: el Sharpe que deberías esperar que publique el más afortunado de 1.000 estrategias de edge cero. Cualquier test honesto del ganador de una búsqueda tiene que compararlo no contra cero, sino contra esto — contra lo que la suerte sola entrega cuando miras mil veces.
Acto 2 — El arsenal: tres formas de tasar la búsqueda

Tres programas de investigación, llegando de forma independiente, alcanzan la misma solución: dejar de comparar al ganador contra cero, y empezar a compararlo contra lo que produce por azar una búsqueda de este tamaño. Difieren en cómo construyen esa comparación.
PSR y el Deflated Sharpe Ratio (Bailey & López de Prado, 2012 / 2014)
El Probabilistic Sharpe Ratio hace una pregunta más afilada que "¿es positivo el Sharpe?". Pregunta: dada la longitud de la muestra y la forma de los retornos (skew, colas gruesas), ¿cuál es la probabilidad de que el Sharpe verdadero supere un benchmark ?
Aquí es la CDF Normal estándar, el skew, y la kurtosis en la convención no-excedente (Normal ⇒ ; sustituye kurtosis excedente aquí sin sumar 3 y la deflación sale mal). Fija y PSR es simplemente un test de significancia de muestra finita. La magia está en elegir bien .
El Deflated Sharpe Ratio es el PSR evaluado en un benchmark que no es cero sino el máximo Sharpe esperado de toda la búsqueda:
donde es la varianza a través de los N Sharpes de trial (la dispersión que la propia búsqueda produjo), es la constante de Euler-Mascheroni, y los dos términos Normal-inversa son la aproximación de la Teoría de Valores Extremos al máximo esperado de extracciones Normales estándar. En código es casi demasiado corto para impresionar:
def expected_max_sharpe(sr_variance, N, mean_sr=0.0):
"""E[max of N independent SR estimates ~ N(mean_sr, sr_variance)]
(Bailey & LdP 2014)."""
g = EULER_MASCHERONI # 0.5772156649
a = norm.ppf(1.0 - 1.0 / N) # Z^{-1}(1 - 1/N)
b = norm.ppf(1.0 - 1.0 / (N * E)) # Z^{-1}(1 - 1/(N e))
return float(mean_sr + np.sqrt(sr_variance) * ((1.0 - g) * a + g * b))
Entonces el DSR es simplemente el PSR con esa barra deflacionada:
def deflated_sharpe(sr_max, sr_estimates, T, skew=0.0, kurt=3.0, N=None):
"""DSR = PSR(sr_max, SR0). Returns (dsr, sr0)."""
v = float(np.asarray(sr_estimates).var(ddof=1)) # dispersion of the search
m = float(np.asarray(sr_estimates).mean())
if N is None:
N = len(sr_estimates)
sr0 = expected_max_sharpe(v, N, mean_sr=m)
return psr(sr_max, sr0, T, skew, kurt), sr0
El DSR es una probabilidad. Declaramos un descubrimiento cuando : el Sharpe verdadero del ganador supera al mejor esperado por suerte con 95% de confianza. Nota la suposición que carga el peso, incrustada en : los trials se tratan como independientes. El Acto 5 trata enteramente sobre qué pasa cuando no lo son.
El recorte de Harvey-Liu (2015)
Harvey y Liu atacan el mismo problema mediante ajustes de p-value de multiple testing — la maquinaria clásica para "corrí M tests, no dejes que me engañe a mí mismo". Ordena los p-values de test único e ínflalos:
Bonferroni es el instrumento contundente (controlar la probabilidad de cualquier falso positivo multiplicando cada p-value por ); Holm es su prima escalonada, uniformemente más poderosa. El tercero, Benjamini-Yekutieli (BHY), controla la tasa de falsos descubrimientos — la fracción esperada de tus rechazos que son incorrectos — y, crucialmente, lo hace bajo dependencia arbitraria entre los tests, usando el normalizador armónico en el numerador:
Ese es el precio que cobra BHY por no asumir que tus 1.000 trials son independientes — infla el umbral de FDR en un factor que crece como . El "recorte" en sí es la métrica que remata: convierte el p-value ajustado de vuelta en un Sharpe y reporta cuánto del Sharpe original tuviste que afeitar. Un recorte del 100% significa que el ganador se explica enteramente por multiple testing; 15% significa que sobrevive en su mayor parte.
El Reality Check de White y el SPA de Hansen (2000 / 2005)
La tercera herramienta no hace ninguna suposición distribucional. El Reality Check de White toma los retornos reales de cada regla, forma el estadístico de máximo-sobre-reglas, y bootstrapea su distribución nula directamente:
donde es el desempeño medio de la regla sobre el benchmark. Resamplea los retornos con el bootstrap estacionario (Politis-Romano — bloques de longitud aleatoria para que la correlación serial sobreviva al resampleo), recentra cada extracción para satisfacer el nulo por construcción, recalcula el máximo en cada extracción, y reporta el p-value como la fracción de máximos de bootstrap que superan al observado. El SPA de Hansen afila el RC de dos maneras: estudentización (dividir la media de cada regla por su propio error estándar, de modo que una regla salvaje de alta varianza no pueda secuestrar el máximo) y un recentrado consistente y dependiente de la muestra del nulo. Nuestra implementación añade la estudentización pero no el paso completo de recentrado consistente — así que donde este artículo reporta un p-value tipo SPA, léelo como un Reality Check estudentizado, no como el SPA completo de Hansen. Donde el DSR pregunta "¿es especial el ganador dentro de esta búsqueda?", el Reality Check pregunta "¿le gana la mejor regla al efectivo después de contabilizar honestamente cuántas reglas probé?" — y maneja reglas correlacionadas de forma nativa, a través del bootstrap, sin contar trials nunca. Guarda esa distinción; la última sección gira en torno a ella.
Acto 3 — La calibración es toda la prueba

Un método que no marca nada también tendría una tasa de falsos descubrimientos de cero — y sería inútil. Así que el único test significativo de estas herramientas es de doble filo: en datos de nulo conocido deben controlar los falsos descubrimientos en o por debajo de , y en datos de edge conocido (siguiente sección) deben seguir disparándose. Esta sección es la primera mitad.
Corre 2.000 búsquedas independientes, cada una sobre 1.000 estrategias de edge cero, y cuenta cuántas veces cada método declara un descubrimiento. Ese conteo, dividido por 2.000, es la tasa de falsos descubrimientos — y como la verdad es sin edge, cada descubrimiento es falso:
| Test | Tasa de falsos descubrimientos (α = 0,05) |
|---|---|
| Significancia ingenua | 1,000 |
| Deflated Sharpe Ratio | 0,001 |
| Harvey-Liu — Bonferroni | 0,057 |
| Harvey-Liu — Holm | 0,057 |
| Harvey-Liu — BHY | 0,007 |
| Reality Check de White | 0,022 |
Cada método principiado aterriza en o cerca de la línea del 5% — los dos recortes FWER un poco por encima, DSR/BHY/RC por debajo — mientras que el test ingenuo se sienta en 100. (Bonferroni y Holm imprimen el mismo 0,057 aquí, y no por suerte: para la única estrategia mejor, el primer paso de Holm es , idéntico a Bonferroni por construcción, así que son una confirmación, no dos.) Pero el número más profundo de todo el estudio no está en esta tabla — es el benchmark deflacionado que produce la columna DSR. Promediado a través de las búsquedas nulas, sale en un 0,1030 por observación, que anualizado da 1,63 (derivado: ) — el mismo 1,63 que publica el ganador de ruido promedio (1,63). Eso no es coincidencia; es la idea entera funcionando:
La barra deflacionada se sitúa exactamente en el techo de ruido. El DSR no le pide al ganador de una búsqueda que le gane a cero. Le pide al ganador que le gane al mejor puntaje que la suerte sola produce en una búsqueda de este tamaño — 1,63 anualizado aquí. Un ganador que apenas iguala el techo de ruido puntúa DSR ≈ 0,5 (un lanzamiento de moneda), por lo que el DSR nulo promedio es 0,495, no algo pequeño. Para ser un descubrimiento, el ganador debe superar 1,63 y algo más — lo suficiente para empujar el PSR por encima de 0,95.
Esto replantea todo el ejercicio. El test ingenuo mide la distancia respecto a cero; cada búsqueda supera esa barra trivialmente, por eso es inútil. El DSR mide la distancia respecto al techo de ruido, y superar esa barra es genuinamente difícil — como debería ser. El recorte de Harvey-Liu y el Reality Check alcanzan el mismo control por caminos distintos (una inflación para BHY, una distribución de máximo por bootstrap para RC), y aterrizan en el mismo vecindario: 0,001 a 0,057, en o cerca de . El 0,057 de Bonferroni/Holm está un pelo por encima de la línea del 5%, pero apenas: con 2.000 búsquedas Monte Carlo, el error estándar de una estimación de FDR cerca de 0,05 es de aproximadamente 0,005, así que 0,057 se sitúa a aproximadamente 1,4 errores estándar por encima de — ruido de Monte Carlo, no una garantía rota. "Controla el FWER" es de todos modos una promesa asintótica, no una exacta al bit en .
Acto 4 — Power: ¿sigue conservando los edges reales?

Controlar los falsos descubrimientos es solo la mitad de un test — un método paranoico que rechaza todo obtiene un 0,000 perfecto y es inútil. La otra mitad: cuando un edge genuino está presente, ¿lo encuentra el DSR?
Plántalo. En un campo de 1.000 estrategias, haz que 25 de ellas lleven un edge real de fuerza conocida y deja el resto como ruido, luego corre la búsqueda y pregunta si el DSR marca al ganador. Barre el edge plantado de débil a fuerte y el power de detección traza una curva en S limpia (tasa de falsos positivos sostenida en ~0 durante todo el recorrido):
| Sharpe verdadero plantado (anualizado) | Power de detección DSR | Tasa de falsos positivos DSR |
|---|---|---|
| 0,79 | 0,005 | 0,000 |
| 1,27 | 0,090 | 0,000 |
| 1,90 | 0,651 | 0,000 |
| 2,54 | 0,998 | 0,000 |
| 3,17 | 1,000 | 0,000 |
Mira dónde gira la curva. Por debajo del techo de ruido — un Sharpe anualizado verdadero de 0,79, bien por debajo de 1,63 — el DSR se dispara el 0,5% de las veces, negándose correctamente a llamarlo: un edge tan débil es genuinamente indistinguible de la suerte que genera una búsqueda de 1.000 trials, y fingir lo contrario sería deshonesto, no poderoso. Justo alrededor del techo la curva sube abruptamente (0,09 en 1,27, 0,65 en 1,90). En un Sharpe anualizado de 2,54 el power es 0,998; en 3,17 es un perfecto 1,000. Los edges fuertes se conservan esencialmente siempre, los falsos positivos permanecen anclados en cero, y el cruce del 50% de power se sitúa en un Sharpe anualizado de aproximadamente 1,73 (derivado por interpolación entre las filas 1,27 y 1,90) — justo por encima del techo de ruido de 1,63, exactamente donde una barra honesta debería ponerlo: el punto donde un edge empieza a superar lo que una búsqueda de 1.000 trials inventa.
Esa es la propiedad que realmente quieres, expresada como curva en S: los edges por debajo del techo de ruido se descartan correctamente como suerte; los edges cómodamente por encima se conservan con power que se acerca a uno. El test ingenuo, en contraste, "detecta" el edge plantado el 67% de las veces incluso con un Sharpe verdadero de 0,79 — pero ese número no significa nada, porque ya vimos que detecta un edge inexistente el 100% de las veces. Un test que se dispara con todo no tiene power; no tiene discriminación. El DSR cambia un poco de sensibilidad a edges marginales (las filas 0,79 y 1,27) por lo que importa: que sus descubrimientos sean reales.
Acto 5 — La trampa del practicante: grids correlacionados

Todo lo hecho hasta ahora usó estrategias independientes — el entorno más limpio posible, y aquel en el que la suposición de independencia del DSR se sostiene exactamente. Los grids de parámetros reales no son así, y aquí es donde una herramienta usada ingenuamente se convierte en una nueva forma de equivocarse.
Toma una búsqueda honesta de cruce de medias móviles: 16 longitudes rápidas 40 longitudes lentas trials, cada uno con 755 observaciones. Un grid así está empapado en correlación — fast=45/slow=120 y fast=45/slow=125 son casi la misma estrategia, así que sus series de retornos se mueven juntas. Correlación promedio por pares medida a través de los 640 trials: alrededor de 0,61. Esas no son 640 apuestas independientes. Ni de cerca.
Caso A — caminata aleatoria (sin edge): cada método la elimina, correctamente
Corre el grid sobre una caminata aleatoria pura. El ganador se ve tentador: parámetros fast=45/slow=120, mejor Sharpe anualizado 0,81, p-value de test único 0,081. Cada método lo ve a través:
| Método | Resultado | Veredicto |
|---|---|---|
| DSR (K crudo = 640) | 0,431 | rechaza (< 0,95) |
| p del Reality Check | 0,570 | rechaza |
| p tipo SPA (RC estudentizado) | 0,569 | rechaza |
| Recorte Harvey-Liu | 100% | rechaza |
Empieza por la señal que no necesita ninguna deflación en absoluto: incluso la significancia de muestra finita sin ajustar de este ganador, -contra-cero, es de solo 0,918 — ya por debajo de 0,95 antes de corregir por uno solo de los 640 trials. La deflación luego lo entierra: la barra es un por observación, anualizado ~0,91 (derivado: ) — por encima del 0,81 del ganador. La mejor estrategia ni siquiera alcanza el techo de ruido, DSR ≈ 0,43 (peor que un lanzamiento de moneda), y el Reality Check, el test tipo SPA, y un recorte del 100% coinciden todos: no hay nada aquí. Perfecto. Este es el caso fácil, y funciona — y, como veremos, sigue rechazado en cada conteo de trials efectivos que probemos.
Caso B — un edge de régimen genuino: el DSR crudo se equivoca
Ahora corre el mismo grid sobre una serie con cambio de régimen que lleva un edge real, explotable. El ganador es enfático: parámetros fast=3/slow=55, mejor Sharpe anualizado 3,92 — este es el Sharpe in-sample, seleccionado, en sí inflado por selección debido a la búsqueda (no un edge verdadero u out-of-sample), pero el efecto de régimen subyacente es genuino — con un p-value de test único de y significancia sin deflacionar -contra-cero esencialmente 1,000. Hay un edge real aquí y el ganador lo encontró. Observa cómo el DSR crudo lo rechaza de todos modos:
| Método | Resultado | Veredicto |
|---|---|---|
| DSR (K crudo = 640) | 0,748 | rechaza (< 0,95) ✗ sobre-deflacionado |
| p del Reality Check | 0,0024 | confirma ✓ |
| p tipo SPA (RC estudentizado) | 0,0038 | confirma ✓ |
| Recorte Harvey-Liu | 15% | confirma ✓ |
El DSR crudo de 0,748 es un falso rechazo de un edge genuino. La razón es la suposición de independencia, ahora violada duramente: el DSR construyó su barra deflacionada tratando 640 trials correlacionados como 640 extracciones independientes, lo que infla el máximo esperado a un 0,221 por observación — anualizado ~3,51 (derivado: ). Contra una barra de 3,51, un ganador de 3,92 apenas la supera modestamente, y el DSR aterriza en 0,748 — por debajo de 0,95. Dos cosas inflan esa barra: el conteo crudo (640 miradas en lugar de un puñado de efectivas), y la dispersión de habilidad genuina entre los trials — algunos pares de parámetros son realmente mejores en una serie de régimen, lo que amplía y eleva más allá de lo que la suerte pura por sí sola entregaría. Ambas empujan en la misma dirección, y la barra termina siendo demasiado alta porque la búsqueda nunca fue realmente 640 miradas independientes; fueron unas pocas apuestas independientes, muestreadas 640 veces.
Aliméntale al DSR el número efectivo de trials en su lugar. El one-liner usado arriba es una estimación cruda a partir de la correlación promedio por pares:
def effective_n_trials(returns_matrix):
"""N_eff = N / (1 + (N-1) * rho_bar), clipped to [1, N].
Correlated trials -> fewer independent bets."""
C = np.corrcoef(returns_matrix, rowvar=False)
rho_bar = max(np.nanmean(C[np.triu_indices(C.shape[0], k=1)]), 0.0)
N = returns_matrix.shape[1]
neff = N / (1.0 + (N - 1) * rho_bar)
return float(min(max(neff, 1.0), N))
Con y , esto colapsa el grid a un trials efectivos (derivado: ), y el DSR salta a 1,000. Pero detente antes de celebrar ese número, porque es la evidencia más débil de toda esta sección. En la barra deflacionada colapsa a un anualizado — esencialmente la media de los trials, esencialmente cero. La deflación ahí está apagada: el DSR en simplemente re-reporta la significancia de muestra finita sin deflacionar del ganador (-contra-cero ). El veredicto es heredado de la significancia cruda, no producido por la corrección de multiple testing. Y la advertencia especular en el lado de la caminata aleatoria: su rechazo en solo se sostiene porque ese ganador ya era marginal de forma independiente para empezar (-contra-cero ). Ancla todo el argumento en 1,6 y un escéptico tiene razón en encogerse de hombros: apagaste la corrección y reportaste lo que había debajo.
Así que no anclarse en un solo estimador. El movimiento honesto — y el más fuerte — es calcular de cinco formas estándar distintas y leer el veredicto a través de toda la banda. Aquí van cinco estimadores aplicados al mismo grid de señal de 640 trials, cada uno con la barra deflacionada que implica y el DSR que produce:
| Estimador de trials efectivos | Barra deflacionada (anual) | DSR | Veredicto | |
|---|---|---|---|---|
| Correlación promedio | 1,6 | 0,25 | 1,000 | retiene |
| Ratio de participación | 2,4 | 0,43 | 1,000 | retiene |
| PCA (95% de la varianza) | 16 | 1,85 | 1,000 | retiene |
| Kaiser (autovalores > 1) | 21 | 2,00 | 0,999 | retiene |
| Cheverud-Nyholt | 370 | 3,31 | 0,845 | rechaza |
| conteo crudo del grid (sin ajuste) | 640 | 3,51 | 0,748 | rechaza |
Estimadores: correlación promedio es el one-liner de arriba; el ratio de participación y los conteos PCA-95%/Kaiser leen la dimensionalidad efectiva de los autovalores de la matriz de correlación; Cheverud-Nyholt es un estimador de varianza-de-autovalores de la literatura de genética que es conocido por sobre-contar bajo equicorrelación cercana.
Ahora el punto aterriza, y no es "cualquier ajuste te salva". Mira el término medio defendible — PCA-95% () y Kaiser (). Estos no son el régimen de deflación-apagada; imponen una barra anualizada real de 1,85 a 2,00 — un recorte serio, bien por encima del ruido, una penalización de multiple testing genuina para 16-21 miradas efectivas. Y el edge de 3,92 la supera igual (DSR 1,000 y 0,999). La señal sobrevive al DSR para cualquier por debajo de 144,8 (derivado del punto de cruce); falla solo bajo el de Cheverud-Nyholt, un estimador que demostrablemente sobre-cuenta cuando los trials están casi equicorrelacionados — e incluso el conteo crudo, sin ajustar, de 640 solo empuja el DSR hacia abajo a 0,748, no a cero. El ganador de la caminata aleatoria, corrido a través de los mismos cinco estimadores, está rechazado en cada uno de ellos (no sobrevive para ningún por encima de 1). Ese es el resultado real: no un número afortunado único, sino un veredicto que es estable a través de toda la banda de estimadores estándar de trials efectivos — lo cual es evidencia mucho más fuerte que confiar en cualquiera de ellos.
Una advertencia técnica sobre el estimador más crudo, porque explica por qué se sitúa en el extremo blando: es en realidad el factor de reducción de varianza para la media de variables correlacionadas (cuánto compra el promediado bajo correlación ). El benchmark del DSR es una cantidad de valor extremo — el máximo esperado de los trials — así que usar una contracción de varianza de media como su conteo de trials es un desajuste funcional: correcto en dirección (correlacionado ⇒ menos trials efectivos), pero no la cantidad de la que realmente depende la distribución del máximo. Es exactamente por eso que los estimadores basados en autovalores en el medio de la banda son la lectura más confiable, y por qué la banda, no el punto, es lo que se entrega.
La lección: usa ambas herramientas, y alimenta al DSR con la N correcta

Dos cosas se desprenden del Caso B, y ambas cargan peso:
- El tamaño crudo del grid es la N equivocada para el DSR siempre que los trials estén correlacionados — y ninguna N efectiva única es la correcta tampoco. Insertar 640 en una fórmula que asume independencia sobre-deflaciona: fabrica un techo de ruido mucho más alto de lo que la búsqueda realmente alcanzó y entierra edges reales debajo de él. El DSR necesita el conteo de trials efectivo — pero la solución no es confiar en un solo estimador (mucho menos el más crudo, donde la corrección se apaga cerca de ). Es leer el veredicto a través de toda la banda de estimadores estándar (aquí 1,6 a 370) y ver si es estable. Para este edge lo fue: retenido en todas partes donde la deflación está genuinamente activa (una barra anual real de 1,85-2,00 en -), fallando solo bajo un estimador que sobre-cuenta. Un veredicto estable a través de la banda es mucho más fuerte que cualquier número único.
- Empareja el DSR con un Reality Check. Nota que el Reality Check y su primo tipo SPA (estudentizado) acertaron el Caso B sin ninguna cirugía de conteo de trials en absoluto (p = 0,0024 y 0,0038) — manejan la dependencia de forma nativa, a través del bootstrap estacionario, porque resamplean las series de retornos realmente correlacionadas en lugar de contar apuestas hipotéticamente independientes. Ese es el desempate para todo el lío del N efectivo: el RC no necesita N. El DSR y el RC responden preguntas distintas: el DSR pregunta "¿es especial el ganador dentro de esta búsqueda?" (y necesita saber cuántas miradas efectivas tomó la búsqueda); el RC/tipo SPA pregunta "¿le gana la mejor regla al efectivo después de data-snooping?" (y lee la dependencia directamente de los datos). Quieres ambos. Cuando discrepan — como lo hicieron aquí el DSR de conteo crudo y el RC — la discrepancia es diagnóstica: usualmente significa que tu N está mal.
Esta es la misma advertencia estructural que nuestros estudios de speed-ladder e IPC-tax venían señalando desde el lado de la ingeniería — una búsqueda rápida que corre un grid enorme y correlacionado no te está comprando un número enorme de apuestas independientes, y tratar el tamaño del grid como conteo de trials engaña tanto a tu optimizador como a tu test de significancia. El próximo artículo complementario sobre la probabilidad de overfitting de backtest ataca el mismo sesgo de selección desde el lado del resampleo (CSCV), y se combina naturalmente con todo lo de aquí: el DSR tasa al ganador, el PBO tasa el procedimiento.
Notas de honestidad
Tres advertencias, dichas con franqueza, porque todo el punto de un estudio controlado es no sobrevenderlo.
- Los retornos son sintéticos. Normal iid para los experimentos de calibración y power, un proceso de cambio de régimen para el caso de edge genuino — elegidos por verdad de referencia controlada, no por realismo de mercado. Los retornos reales tienen colas gruesas, están autocorrelacionados y son no estacionarios, y los términos de skew/kurtosis del PSR existen precisamente para manejar el primero de esos. Lo que se entrega aquí es el método calibrado, no una estrategia: solo podemos demostrar que un test controla los falsos descubrimientos corriéndolo sobre datos donde sabemos que no hay nada que descubrir. Eso requiere fabricar la verdad de referencia.
- Ningún estimador de N efectiva es canónico — por eso reportamos cinco. El one-liner de correlación promedio es legible para un revisor y direccionalmente correcto (más correlación ⇒ menos trials efectivos), pero es el factor de reducción de varianza para una media — un desajuste funcional con el benchmark de máximo del DSR — y cerca de apaga la deflación por completo. Los estimadores de autovalores (ratio de participación, PCA-95%, Kaiser) están mejor emparejados pero siguen siendo heurísticos, y Cheverud-Nyholt sobre-cuenta bajo equicorrelación. El enfoque más completo y principiado es el clustering de trials (Apéndice 3 del DSR de Bailey & López de Prado): agrupar trials por estructura de correlación y contar clusters en lugar de colapsar todo a un escalar. Reportamos toda la banda precisamente porque la elección no está zanjada — un veredicto estable a través de los cinco estimadores es la afirmación honesta; uno que dependiera de elegir un único estimador no lo sería.
- El bootstrap es un Reality Check estudentizado, no el SPA completo de Hansen, y los conteos de resampleo difieren por experimento. Donde este artículo dice "tipo SPA", significa el Reality Check de White con estudentización por regla; el recentrado consistente y dependiente de la muestra completo de Hansen no está implementado. Las tasas de falsos descubrimientos de calibración usan 500 resampleos de bootstrap estacionario por búsqueda a través de 400 búsquedas; los dos p-values de RC/tipo SPA de los estudios de caso usan 5.000 resampleos cada uno. Longitud de bloque promedio 20 en todo momento (Politis-Romano), , 252 periodos/año para la anualización. Cambia esto y los números del tercer decimal se mueven; la historia — ingenuo 1,000 contra principiado 0,001-0,057, una curva en S que alcanza el 50% de power justo por encima del techo de ruido, y una trampa de grid correlacionado cuyo veredicto debe leerse a través de la banda de N efectiva — no.
Conclusiones
- Una búsqueda de parámetros es una máquina de multiple testing, y el test de significancia ingenuo es ciego a ello. En 1.000 estrategias de edge cero el mejor Sharpe anualizado promedia 1,63 con una mediana de p-value de test único de 0,000686 — y el test "¿es significativo?" declara un descubrimiento el 100% de las veces (tasa de falsos descubrimientos 1,000). Un Sharpe excelente de la nada, certificado significativo por un test que nunca hizo la pregunta correcta.
- El Deflated Sharpe Ratio mueve la meta de cero al techo de ruido. El DSR compara al ganador no contra cero sino contra , el mejor esperado por suerte de una búsqueda de este tamaño — que para el caso nulo aterriza en un 1,63 anualizado, exactamente donde se sitúa el ganador de ruido promedio (derivado: ). Su tasa de falsos descubrimientos nula es 0,001; el recorte de Harvey-Liu (Bonferroni/Holm 0,057, BHY 0,007) y el Reality Check de White (0,022) alcanzan el mismo control por otros caminos.
- Conserva los edges reales. El power de detección del DSR traza una curva en S que alcanza el 50% de power en un Sharpe anualizado de ~1,73 — justo por encima del techo de ruido de 1,63: 0,005 en un Sharpe verdadero anualizado de 0,79, 0,651 en 1,90, 0,998 en 2,54, 1,000 en 3,17, falsos positivos ~0 durante todo el recorrido. Los edges por debajo del techo se descartan correctamente como indistinguibles de la suerte; los edges por encima se retienen con power que se acerca a uno.
- Los grids correlacionados rompen el DSR crudo — y ninguna N efectiva única lo rescata; la banda sí. En un cruce de medias móviles de 640 celdas (correlación promedio por pares ~0,61), el DSR de conteo crudo rechazó falsamente un edge genuino (seleccionado in-sample, anual 3,92) (0,748 < 0,95) porque 640 trials correlacionados no son 640 apuestas independientes. Pero la solución no es una N_eff mágica única — en la estimación más cruda () la deflación está esencialmente apagada (barra ~anual 0,25) y el DSR simplemente hace eco de la significancia cruda. La evidencia real es que el edge se retiene a través de toda la banda de estimadores estándar — DSR 1,000/1,000/1,000/0,999 en 1,6/2,4/16/21, incluyendo una barra anual genuina de 1,85-2,00 en el rango medio defendible PCA-95%/Kaiser — sobreviviendo para cualquier , y fallando solo bajo el 370 de sobre-conteo de Cheverud-Nyholt. La caminata aleatoria es rechazada en cada estimador. Lee la banda, no un punto.
- Empareja el DSR con un Reality Check, porque responden preguntas distintas. El Reality Check y su primo tipo SPA (estudentizado) confirmaron el edge real (p = 0,0024 y 0,0038) sin ninguna cirugía de conteo de trials — manejan la dependencia de forma nativa a través del bootstrap estacionario, que es exactamente el desempate cuando la N efectiva está en disputa. El DSR pregunta "¿es especial el ganador dentro de esta búsqueda?"; el RC/tipo SPA pregunta "¿le gana el mejor al efectivo después de data-snooping?" Una discrepancia entre ellos es una señal de que tu N está mal. Corre ambos.
El ganador de una búsqueda es culpable hasta que se demuestre su inocencia. El p-value ingenuo no es una prueba de inocencia — es el propio testimonio inflado de la búsqueda, y avalará ruido puro con doce ceros de confianza. Deflaciona el benchmark a lo que entrega la suerte, cuenta tus trials efectivos con honestidad, y bootstrapea el máximo para una segunda opinión. Lo que supere las tres barras podría de verdad ser real. Lo que supera solo la ingenua es el más alto de mil lanzadores de moneda.
El experimento completo — el arnés de calibración nula, el barrido de power de edge plantado, las búsquedas de grid correlacionado, y cada número de este artículo regenerable a partir de un único script determinista — está en el paper complementario en deflated-sharpe.marketmaker.cc, con código y datos en github.com/suenot/deflated-sharpe-search.
Authors
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.