Diseño de la función objetivo: la métrica que optimizas elige en secreto tu estrategia
Parte de la serie "Backtests sin ilusiones".
📄 Este artículo se convirtió en un paper de investigación. Cada número de abajo proviene de un script determinista que construye una verdad de base controlada — un mercado sintético con un edge conocido en una banda de señal moderada y ruido de colas pesadas en todas partes — y luego ejecuta una búsqueda de umbral bajo seis funciones objetivo distintas, midiendo, fuera de muestra, qué estrategia elige realmente cada objetivo. Lee el paper en línea (versión interactiva + PDF) en objective-design.marketmaker.cc, código y datos en github.com/suenot/objective-design-degeneracy.
Quieres la mejor estrategia. Así que ejecutas una búsqueda — barres un umbral, un lookback, una distancia de stop, y conservas cualquier configuración que puntúe más alto. La búsqueda termina y te entrega un ganador. Razonable. Estándar. Es lo que hace cualquier optimizador, grid search o afinador de hiperparámetros en el mundo.
Pero mira el verbo: puntúe más alto. ¿Más alto en qué? Antes de que la búsqueda pueda coronar algo, tuviste que darle un único número a maximizar — una función objetivo. PnL. Sharpe. Sharpe sobre las barras operadas. Retorno sobre drawdown máximo. Escribiste uno de estos, probablemente sin pensarlo mucho, y luego la búsqueda gastó un millón de evaluaciones haciendo exactamente lo que le pediste.
Esa elección no es una formalidad. Es toda la decisión. La búsqueda no encuentra "una buena estrategia" — eso no existe en abstracto. Encuentra la estrategia que maximiza el escalar que elegiste, y distintos escalares apuntan a estrategias radicalmente diferentes sobre los mismos datos. El objetivo es la mano secreta en el volante, y la mayoría de las veces nadie la está mirando.
Aquí está todo el artículo en una tabla. Una búsqueda de umbral, un mercado sintético con un edge real y conocido, seis objetivos — y las seis estrategias que seleccionan, medidas en datos reservados:
| Objetivo (lo que maximiza la búsqueda) | Exposición media al mercado | Sharpe in-sample | Sharpe fuera de muestra | Ganadores degenerados |
|---|---|---|---|---|
| PnL bruto | 0.859 | 1.76 | 1.61 | 0% |
| Sharpe de línea temporal completa | 0.740 | 1.82 | 1.71 | 0% |
| Sharpe por operación ("activo") | 0.286 | 1.00 | 0.70 | 57% |
| Piso de exposición () | 0.740 | 1.82 | 1.71 | 0% |
| Shrinkage por número de operaciones (conf_k) | 0.523 | 1.54 | 1.31 | 20.7% |
| Robusto (piso + conf_k) | 0.675 | 1.78 | 1.70 | 0.2% |
600 semillas independientes, barras cada una, 80 umbrales candidatos por búsqueda, in-sample y fuera de muestra extraídos de forma independiente. Sharpe anualizado (252 periodos/año). "Degenerado" = el ganador elegido está en el mercado menos del 5% del tiempo, o registra un Sharpe fuera de muestra no positivo. El óptimo verdadero de este mercado es un Sharpe anualizado fuera de muestra de 1.77.
Lee la tercera fila hasta que duela. El Sharpe por operación — un representante de toda la familia de métricas condicionadas a la actividad (Sharpe por operación, expectancy, el SQN de van Tharp, tasa de acierto), todas calculadas solo en las barras operadas — elige una estrategia que fuera de muestra es peor que la mitad de las demás, y lo hace de forma degenerada 57% de las veces. No es un objetivo sutilmente peor. Con estos datos es una trampa, y la búsqueda cae en ella más de la mitad de las veces. Ahora lee la fila justo arriba: el simple Sharpe de línea temporal completa nunca degenera y puntúa 1.71 fuera de muestra. Ese es el remate de toda la reparación, revelado desde el principio — la solución honesta es simplemente medir en la línea temporal completa; los arreglos más sofisticados de las filas inferiores, en el mejor de los casos, solo igualan ese número, nunca lo superan. Este artículo es la anatomía de esa trampa y su reparación, con la verdad de base conocida en todo momento, de modo que "¿el objetivo eligió la estrategia correcta?" es un hecho, no una opinión.
Acto 1 — La decisión secreta: la ley de Goodhart es la búsqueda

En 1975 el economista Charles Goodhart escribió una frase que ha sobrevivido a todo lo demás que hizo:
"Any observed statistical regularity will tend to collapse once pressure is placed upon it for control purposes."
La paráfrasis popular, generalmente atribuida a Marilyn Strathern, es más precisa: cuando una medida se convierte en objetivo, deja de ser una buena medida.
Una búsqueda de parámetros es la instancia más pura posible de la ley de Goodhart. La función objetivo es la medida. La búsqueda es la presión — miles, millones de intentos de empujar esa medida tan alto como pueda llegar. Y a la búsqueda no le importa en absoluto lo que quisiste decir con la medida. Solo le importa el número. Si hay alguna manera de hacer el número grande que no tenga nada que ver con un edge real y operable — operar rara vez, quedarse plano la mayor parte del tiempo, atrapar un par de valores atípicos afortunados — la búsqueda encontrará esa manera, porque encontrar el máximo es lo único para lo que está construida.
Este es el mismo fallo que la literatura de seguridad en IA llama reward hacking: un agente que optimiza un proxy de lo que quieres explotará cada brecha entre el proxy y el objetivo. Tu búsqueda es ese agente. "Sharpe ratio" es ese proxy. "Una estrategia en la que pueda confiar para operar con dinero real el próximo trimestre" es el objetivo. La brecha entre ambos es donde vive toda la disciplina.
Para observar cómo se abre esa brecha, necesitamos un mundo donde conozcamos la verdad. Así que construimos uno.
El mercado. En cada periodo llega un predictor (una señal normal estándar), seguido del retorno que predice parcialmente. El edge es real pero acotado — existe solo dentro de una banda de señal moderada , y desaparece fuera de ella:
Dos decisiones de diseño importan. Primero, el edge vive en la banda moderada: las señales extremas no llevan información predictiva, así que una estrategia debería operar el centro y saltarse las colas. Segundo, el ruido es de colas pesadas (Student- con 4 grados de libertad, el tipo de cola pesada que los retornos reales realmente tienen) — pero este ingrediente está aquí por realismo, no por mecanismo. Es tentador decir que las colas pesadas son lo que hace posible la trampa, y eso mismo asumimos hasta que ejecutamos el control: una versión con ruido gaussiano de este mercado (gaussian_control en los resultados, 300 semillas) reproduce la trampa esencialmente sin cambios — el objetivo por operación aún degenera el 55.7% del tiempo con ruido gaussiano frente al 57.0% con colas pesadas, y su Sharpe fuera de muestra es 0.71 frente a 0.70. Así que la trampa no se trata de colas pesadas. Es un efecto puro de muestra pequeña más selección: toma el máximo, sobre ~20 umbrales de baja exposición, de un Sharpe calculado con un puñado de observaciones, y algún rincón afortunado siempre parecerá espectacular. Cualquier distribución de ruido lo hace; una estrategia en el mercado solo unas pocas barras puede, por pura suerte, atravesar un par de movimientos favorables y registrar un número in-sample que no significa nada. Mantenemos las colas pesadas porque los retornos reales las tienen, no porque la trampa las necesite.
La estrategia. Una familia de un parámetro. Operar en la dirección de la señal siempre que su magnitud esté por debajo de un umbral , de lo contrario permanecer plano:
Un diminuto opera solo con las señales más pequeñas e insignificantes — una lotería de operaciones raras, casi nunca en el mercado. Un cercano al borde de la banda captura todo el edge real y está bien expuesto. Un enorme opera todo, incluidas las barras fuera de banda que no llevan edge y solo añaden ruido.
def gen_dataset(T, rng, beta=0.30, band=1.0, tail_df=4):
s = rng.standard_normal(T)
edge = beta * np.where(np.abs(s) <= band, s, 0.0) # edge ONLY inside |s| <= 1
t = rng.standard_t(tail_df, T) / np.sqrt(tail_df / (tail_df - 2.0)) # fat tails, unit var
return s, edge + t
def simulate(s, r, theta):
pos = np.where(np.abs(s) <= theta, np.sign(s), 0.0) # trade the band, skip outliers
strat = pos * r
active = pos != 0.0
exposure = active.mean() # fraction of bars in a position
sharpe_full = strat.mean() / strat.std(ddof=1) # on the WHOLE timeline
sharpe_active = strat[active].mean() / strat[active].std(ddof=1) # on ONLY the active bars
return dict(exposure=exposure, n_trades=int(active.sum()),
sharpe_full=sharpe_full, sharpe_active=sharpe_active, pnl=strat.sum())
Como nosotros construimos el mercado, podemos calcular la verdad directamente — el rendimiento promedio en cada umbral sobre las 600 semillas, fuera de muestra. El óptimo verdadero se sitúa en : justo en el borde de la banda de señal, en el mercado alrededor del 70% del tiempo (derivado: una señal normal estándar cae dentro de con probabilidad ), con un Sharpe anualizado fuera de muestra de 1.77. Ese es el número que todo objetivo está intentando encontrar. Manténlo presente: θ≈1.04, Sharpe OOS 1.77, alrededor del 70% de la línea temporal en el mercado. Cualquier cosa que un objetivo seleccione lejos de esto es un fallo del objetivo, no que el mercado sea difícil.
Acto 2 — La trampa: ocho operaciones afortunadas, un Sharpe de 21, un espejismo

Ahora dejemos suelto a un objetivo ingenuo sobre una extracción concreta de este mercado — semilla 6. Divulgación completa sobre la semilla: no fue la primera extracción ni una aleatoria. Escaneamos semillas buscando un ganador por operación marcadamente degenerado y elegimos esta, precisamente para que el mecanismo sea imposible de pasar por alto. El resultado que muestra es completamente típico — como confirmará el Acto 3, el objetivo por operación elige una lotería con menos del 5% de exposición en el 56% de todas las semillas — pero la magnitud de la semilla 6 está en el extremo de esa distribución. Léelo como una instancia especialmente cruda de un fallo común, no como una mediana. Optimizamos el Sharpe por operación: el Sharpe ratio calculado solo en las barras en las que la estrategia realmente está en posición. Es algo extremadamente natural de reportar. "Cuando opera, ¿qué tan buenas son sus operaciones?" Da la sensación de aislar la habilidad de la inactividad. Hace lo contrario.
Esta es la estrategia que el Sharpe por operación corona en la semilla 6:
- Umbral — opera solo con las señales más diminutas.
- Exposición al mercado 0.4% — plana el 99.6% del tiempo.
- Ocho operaciones. Ocho. En 2000 barras.
- Sharpe anualizado por operación in-sample: 21.09.
- Sharpe de línea temporal completa in-sample: 0.82.
- Sharpe de línea temporal completa fuera de muestra: 0.13.
La métrica por operación marca 21.09 — un número que ninguna estrategia real ha registrado jamás, del tipo que lanzaría un fondo. Y es un espejismo completo. Esas ocho operaciones capturaron por casualidad algunos movimientos favorables; medido solo sobre esas ocho barras, la razón entre media y desviación estándar es astronómica. Pero en la línea temporal completa — donde la estrategia está plana el 99.6% del tiempo — ese "edge" no aporta prácticamente nada: un Sharpe de línea temporal completa de 0.82 in-sample, que colapsa a 0.13 en datos frescos. El ganador que seleccionó el objetivo es, a efectos de trading, plano.
Y ni siquiera es un edge real en ese umbral. Recuerda el mercado: el edge vive en la banda , y está justo en el centro muerto donde la señal es más débil. La curva verdadera fuera de muestra en es −0.01 — indistinguible de cero (derivado de la curva de verdad de base). La búsqueda no encontró un pequeño edge real. Encontró ocho extracciones afortunadas de ruido y las reportó como un Sharpe de 21.
Esta es la trampa en miniatura: el Sharpe por operación premia a la estrategia por operar lo menos posible, porque cuantas menos barras se mantengan, más fácil es que un par de ellas sean afortunadas, y la métrica nunca pregunta "¿pero de verdad estabas en el mercado?" La magnitud de la semilla 6 está elegida a propósito — buscamos deliberadamente una cruda — pero su naturaleza no lo está. En las 600 semillas, el Sharpe por operación selecciona un ganador degenerado (uno que apenas opera, o pierde fuera de muestra) en 57% de ellas, y específicamente una lotería con menos del 5% de exposición en 56%. La elección degenerada típica es mucho más moderada que el Sharpe de 21 de la semilla 6: promediado sobre las 600 semillas, el ganador del objetivo por operación tiene un Sharpe por operación in-sample de 4.58 y exposición media 0.286 — todavía plano la mayor parte del tiempo, solo que no 99.6% plano. La semilla 6 dramatiza el mecanismo; el 56% es la parte que debería preocuparte. Más de la mitad de las veces, esta métrica cotidiana te entrega un billete de lotería y lo llama estrategia.
Acto 3 — La verdad estadística: seis objetivos, 600 semillas

Una semilla no prueba nada; solo ilustra. Para medir un objetivo tenemos que preguntar qué selecciona en promedio, a través de muchos mercados independientes, y puntuar esa selección con datos que la búsqueda nunca vio. Así que: 600 semillas, cada una una extracción independiente del mercado; en cada una, ejecutamos la búsqueda de 80 umbrales bajo cada objetivo; registramos la exposición, el Sharpe in-sample y fuera de muestra de lo que eligió, y si esa elección fue degenerada.
| Objetivo | Exposición media | Sharpe in-sample | Sharpe fuera de muestra | Caída IS→OOS (abs.) | Degenerado |
|---|---|---|---|---|---|
| PnL bruto | 0.859 | 1.76 | 1.61 | 0.15 | 0.0% |
| Sharpe de línea temporal completa | 0.740 | 1.82 | 1.71 | 0.11 | 0.0% |
| Sharpe por operación | 0.286 | 1.00 | 0.70 | 0.30 | 57% |
| Piso de exposición () | 0.740 | 1.82 | 1.71 | 0.11 | 0.0% |
| Shrinkage conf_k () | 0.523 | 1.54 | 1.31 | 0.23 | 20.7% |
| Robusto (piso + conf_k) | 0.675 | 1.78 | 1.70 | 0.08 | 0.2% |
La columna "Caída IS→OOS" es la caída absoluta en Sharpe anualizado de in-sample a fuera de muestra (por ejemplo, es una caída de 0.30), no un porcentaje. Y observa que la fila "Piso de exposición" es idéntica byte a byte a "Sharpe de línea temporal completa": eso no es coincidencia, y el Acto 5 explica por qué.
Saltan tres hechos, y cada uno es una lección.
El Sharpe por operación es el único objetivo ingenuo que degenera. Su exposición media es 0.286 — selecciona estrategias que están planas la mayor parte del tiempo — y su Sharpe in-sample de 1.00 cae 0.30 hasta un fuera de muestra de 0.70, el peor del campo. Nota el indicio: su número in-sample (1.00) ni siquiera es impresionante, pero en cualquier semilla individual reportará alegremente una cifra por operación de 21. El promedio se diluye porque las ventanas afortunadas apuntan en direcciones aleatorias; lo que sobrevive hasta fuera de muestra es solo 0.70, y el 57% de las selecciones individuales son directamente basura.
Los objetivos conscientes de la exposición son seguros por naturaleza. El PnL bruto y el Sharpe de línea temporal completa nunca degeneran (0.0%). La razón es estructural: ambos se miden sobre la totalidad de la línea temporal, así que una estrategia que está plana el 99.6% del tiempo gana casi nada bajo ellos. No se puede manipular una métrica de línea temporal completa operando rara vez — estar plano se penaliza directa y automáticamente, porque las barras planas están en el denominador. Esta es la idea más importante del artículo, y volvemos a ella en el Acto 6.
El PnL bruto es seguro pero no óptimo — sobreexpone. Mira de cerca: la exposición media del PnL bruto es 0.859, la más alta de todas, y su Sharpe fuera de muestra (1.61) está un escalón por debajo del Sharpe de línea temporal completa (1.71) y del óptimo verdadero (1.77). El PnL premia estar en el mercado, así que la búsqueda empuja demasiado alto (en la semilla 6, el PnL bruto elige frente al óptimo 1.04), arrastrando barras fuera de banda que no llevan edge y solo añaden ruido. No explota — pero se aleja del óptimo real en la dirección opuesta a la trampa por operación. Objetivo distinto, sesgo distinto, misma lección: la métrica eligió la estrategia.
Las dos filas que aún no hemos discutido — el piso de exposición y conf_k — son la reparación. Ese es el siguiente acto.
Acto 4 — Por qué ocho operaciones nunca pueden ser confiables

Antes de reparar la trampa, vale la pena ser preciso sobre por qué ocho operaciones producen un Sharpe de 21 que no significa nada — porque la solución se deriva directamente de esa razón.
Un Sharpe ratio es una estimación, y las estimaciones tienen barras de error. El resultado de Andrew Lo de 2002 da el error estándar de un Sharpe ratio estimado a partir de observaciones, bajo el supuesto más generoso posible (retornos gaussianos IID):
El error se reduce solo como . Alimentémoslo con la trampa. El Sharpe por operación en la semilla 6 es anualizado, que es por observación, calculado sobre barras. El error estándar es
(derivado de la fórmula de Lo). La estimación puntual es ; su barra de error de un sigma es del orden de — léelo como una magnitud ilustrativa, no como un intervalo de confianza calibrado, ya que la fórmula asume retornos gaussianos IID que nuestro ruido de colas pesadas viola. Aun así, el mensaje es inequívoco: el "Sharpe de 21" es un número extraído de una distribución tan ancha que no lleva prácticamente información — y ese es el cálculo caritativo, porque la extensión de Mertens muestra que las colas pesadas y la asimetría solo inflan aún más el error estándar. El Sharpe de un backtest con pocas operaciones es menos confiable que su valor puntual en todas las direcciones a la vez: muy pocas observaciones, y la distribución equivocada.
Esto es exactamente lo que formaliza la Minimum Track Record Length (Bailey & López de Prado, 2012). Invierte la pregunta — ¿cuántas observaciones necesito antes de poder creer un Sharpe de este tamaño con confianza ? —
convirtiendo "confía menos en los backtests con pocas operaciones" en un número explícito y verificable de operaciones. El punto profundo para el diseño de objetivos es este: un buen objetivo debería exigir un track record mínimo desde dentro, en lugar de dejar que un humano note, después del hecho, que el ganador descansa sobre ocho observaciones. El Sharpe por operación hace lo contrario — se maximiza empujando el número de observaciones hacia el mínimo. Cualquier objetivo cuyo óptimo esté en "el menor número de operaciones posible" es, por construcción, un objetivo que busca su propia estimación menos confiable.
Dos fallos se combinan en la trampa, y nombrar ambos nos dice cómo arreglarla. Primero, ruido de muestra pequeña: ocho observaciones no pueden fijar ningún ratio. Segundo, selección: esas ocho barras no se nos entregaron — la búsqueda eligió el umbral que aterrizó en ellas, en parte porque fueron afortunadas. La búsqueda es un maximizador; siempre encontrará el rincón del espacio donde el ruido parece señal por casualidad. Esto no se puede superar con una mejor estimación puntual. Hay que cambiar qué significa "mejor" para que el rincón afortunado no sea el máximo.
Acto 5 — La reparación: un piso de exposición y un shrinkage por número de operaciones

Tenemos dos enfermedades identificadas — opera con demasiada poca frecuencia y descansa sobre demasiado pocas observaciones — así que escribimos dos curas, cada una dirigida a una.
Cura 1: un piso de exposición. El arreglo más simple posible. Rechaza de plano cualquier estrategia que no esté en el mercado al menos del tiempo — si apenas opera, su puntuación es y la búsqueda no puede seleccionarla. Pero hay una sutileza honesta en qué se pone bajo el piso, y es la lección silenciosa de todo este artículo. Como objetivo independiente pusimos un piso al Sharpe de línea temporal completa, y en este mercado eso no cambia nada en absoluto: el propio ganador del Sharpe de línea temporal completa ya está en ~74% de exposición, así que un piso del 20% nunca se activa. Por eso las filas "piso de exposición" y "Sharpe de línea temporal completa" en las tablas anteriores son idénticas byte a byte — atornillar un piso a una métrica ya segura simplemente vuelve a derivar el Sharpe completo. El piso solo hace un trabajo visible cuando protege a una métrica que de otro modo correría hacia el rincón: una métrica por operación, como en el objetivo robusto de abajo. En otras palabras, "exigir exposición" y "medir en la línea temporal completa" son, con estos datos, dos nombres para la misma intervención.
Cura 2: un shrinkage por número de operaciones — "conf_k". Para cuando estás atrapado con una métrica por operación y quieres una corrección suave en lugar de un corte duro: descuenta el Sharpe continuamente según en cuántas operaciones se apoya. Multiplica por , donde es el número de operaciones y es una "constante de confianza" fija — una fuerza de prior equivalente en operaciones elegida antes de la búsqueda:
Cuando la puntuación se aplasta a cero sin importar cuán grande sea el Sharpe crudo; cuando la puntuación converge al Sharpe crudo. Es la misma lógica correctiva que MinTRL y el error estándar del Acto 4 — encoger una estimación de muestra pequeña hacia cero como función decreciente de su tamaño muestral — plegada directamente en el objetivo en lugar de aplicada como filtro posterior. El precedente con nombre más cercano es el System Quality Number de van Tharp (), que igualmente hace que una métrica de calidad por operación escale con el número de operaciones — aunque la forma funcional difiere ( crece sin límite, mientras que satura en 1). En forma, la nuestra es un shrinkage bayesiano ponderado por precisión / al estilo empírico-bayesiano; es nuestra construcción para este problema, no un estimador con nombre tomado de la literatura.
def obj_active_sharpe(m): # the trap: Sharpe on only the active bars
return m["sharpe_active"]
def _shrink(n, conf_k): # trade-count shrinkage n / (n + k)
return n / (n + conf_k) if (n + conf_k) > 0 else 0.0
def obj_confk(m, conf_k=40.0): # few trades -> little credit
return m["sharpe_active"] * _shrink(m["n_trades"], conf_k)
def obj_robust(m, e_min=0.20, conf_k=40.0): # both cures at once
if m["exposure"] < e_min: # floor: reject strategies that barely trade
return -np.inf
return m["sharpe_active"] * _shrink(m["n_trades"], conf_k)
Ahora la parte honesta: ¿cuánto piso, cuánto shrinkage? Se barren ambos y se lee toda la superficie. Cada celda es el Sharpe medio fuera de muestra a través de 200 semillas (un subconjunto de un tercio de las 600, para mantener económico el barrido bidimensional) con la tasa de degeneración al lado:
| \ conf_k | |||
|---|---|---|---|
| 0.00 | 0.66 (59.5%) | 1.26 (22.5%) | 1.47 (11.5%) |
| 0.05 | 1.43 (10.0%) | 1.53 (6.0%) | 1.60 (4.0%) |
| 0.10 | 1.64 (1.5%) | 1.65 (1.0%) | 1.67 (1.0%) |
| 0.20 | 1.71 (0.0%) | 1.71 (0.0%) | 1.71 (0.0%) |
| 0.35 | 1.73 (0.0%) | 1.73 (0.0%) | 1.73 (0.0%) |
Sharpe anualizado medio fuera de muestra, con la tasa de degeneración entre paréntesis. La celda superior izquierda es el Sharpe por operación crudo — sin piso, sin shrinkage: OOS 0.66, degenerado 59.5%. Es el mismo objetivo que la fila por operación del Acto 3, que marcaba 0.70 / 57%; la pequeña diferencia se debe puramente al conjunto de semillas — este barrido usa 200 semillas, el Monte Carlo usó las 600. Misma métrica, muestra más pequeña.
La superficie cuenta una historia clara en tres lecturas.
Cada cura funciona sola. Muévete a la derecha a lo largo de la fila superior (añade shrinkage, sin piso): el OOS sube y la degeneración cae . Muévete hacia abajo en la columna izquierda (añade piso, sin shrinkage): el OOS sube y la degeneración cae . Cualquier perilla, girada sola, eleva independientemente el rendimiento fuera de muestra y mata la degeneración. El piso de exposición es la palanca individual más fuerte aquí, porque ataca de frente el rasgo definitorio de la trampa — exposición cercana a cero.
Juntas alcanzan la meseta — y la meseta es exactamente el Sharpe de línea temporal completa. En la fila está plana en OOS 1.71 con 0% de degeneración en todos los niveles de shrinkage; empujando a sube ligeramente a 1.73. Pero mira bien qué es ese 1.71: es exactamente la puntuación que el Sharpe de línea temporal completa simple registra en el Acto 3 sin piso y sin ningún shrinkage. En el mejor de los casos, los arreglos no superan al Sharpe de línea temporal completa — lo reconstruyen. Y el objetivo robusto totalmente reparado ni siquiera llega del todo: en las 600 semillas se ubica en OOS 1.70 con una degeneración residual de 0.17%, un pelo por debajo del 1.71 / 0% del Sharpe completo — está débilmente dominado por la métrica más simple. Un ajuste intermedio moderado, con , alcanza OOS 1.65 con 1% de degeneración — útil si te imponen una métrica por operación, pero nunca una razón para preferir una.
Los números exactos dependen de la escala — la forma es el resultado. Los valores específicos , que reparan completamente este mercado están ajustados a este proceso generador de datos; en otro mercado con frecuencias de operación y grosor de cola distintos, la meseta se ubica en otro lugar. Lo que generaliza no son las coordenadas sino la superficie: una elevación monótona en ambas direcciones, degeneración llevada a cero, una meseta en la verdad. Encuentras tus propias coordenadas barriendo, exactamente como arriba.
Junta ambas curas — el objetivo robusto, piso 0.20 más conf_k 40 — y vuelve a la semilla 6. La trampa coronó , ocho operaciones, un Sharpe OOS de línea temporal completa de 0.13. El objetivo robusto en cambio selecciona : exposición al mercado 0.66, 447 operaciones, Sharpe anualizado fuera de muestra 1.77. Ese está un punto de la cuadrícula por debajo del óptimo verdadero , así que recupera un umbral casi óptimo y bien expuesto en lugar de dar en el centro exacto — su Sharpe fuera de muestra de una sola semilla (1.77) coincide por casualidad con el óptimo poblacional. Mismos datos, misma búsqueda, mismos 80 umbrales candidatos. Solo cambió la definición de "mejor", y eso movió al ganador de un espejismo plano de ocho operaciones al edge real y bien expuesto — que, reveladoramente, es exactamente el mismo umbral que elige el Sharpe de línea temporal completa simple en esta semilla.
Una advertencia que el barrido hace explícita: conf_k solo no basta en este mercado. Con sin piso, la degeneración sigue en 22.5% a través de las semillas — y en la semilla 6 específicamente, conf_k solo elige , 35 operaciones, un Sharpe fuera de muestra de −0.06. Treinta y cinco operaciones sobreviven a un shrinkage de con suficiente puntuación restante para ganar. El piso de exposición es lo que cierra esa última brecha, porque apunta directamente a la firma verdadera de la trampa — estar plano — en lugar de confiar en el número de operaciones como proxy de ello.
Acto 6 — La lección más profunda: medir en toda la línea temporal

Da un paso atrás de la reparación y observa qué separó realmente a los objetivos seguros de la trampa. No fue sofisticación. El PnL bruto y el Sharpe de línea temporal completa son más simples que el Sharpe por operación, y nunca degeneraron — 0% en 600 semillas — sin piso, sin shrinkage, sin ningún ajuste.
La línea divisoria es una única propiedad: ¿qué ventana mide la métrica? El Sharpe por operación mide solo las barras en las que la estrategia eligió estar de pie — una ventana autoseleccionada que la búsqueda puede encoger a voluntad. El Sharpe de línea temporal completa y el PnL total miden la totalidad de la línea temporal, barras planas incluidas. Y no se puede hacer grande una métrica de línea temporal completa operando rara vez, porque cada hora que se está plano es una hora en el denominador que no gana nada. El piso de exposición y conf_k son, al final, solo formas de reparar la métrica por operación con la consciencia de exposición que las métricas de línea temporal completa tienen gratis — y el barrido ya nos dijo el techo de esa reparación: en el mejor de los casos iguala al Sharpe de línea temporal completa (OOS 1.70 frente a 1.71), nunca lo supera. Si eres libre de elegir la ventana, elige toda la línea temporal y sáltate la reparación por completo.
Así que el principio de diseño, expresado con claridad:
Diseña el objetivo para que no pueda ser manipulado por operaciones raras y afortunadas. Tienes tres herramientas, en orden aproximado de preferencia:
- Mide en la línea temporal completa. El valor por defecto del que casi nunca deberías apartarte. El Sharpe de línea temporal completa y el retorno total son conscientes de la exposición por construcción — la inactividad se penaliza automáticamente porque las barras planas cuentan. Si te encuentras reportando una métrica calculada "solo en las barras en que estuvimos activos", detente y pregúntate qué hará la búsqueda con la libertad de elegir esas barras.
- Exige exposición. Si tienes que usar una métrica condicionada a la actividad, pon un piso a la exposición para que la búsqueda no pueda seleccionar una estrategia que apenas opere. Esta es la palanca individual más fuerte contra esta trampa específica.
- Encoge por número de operaciones. Descuenta cualquier ratio por para que un Sharpe que descansa sobre un puñado de observaciones gane solo una fracción del crédito de uno que descansa sobre miles. Esto es la aplicación a nivel de objetivo de la Minimum Track Record Length: un número obtenido con pocas observaciones no es confiable (Acto 4), así que un objetivo honesto incorpora esa falta de fiabilidad en lugar de confiar en que un humano la note después.
Nada de esto hace más inteligente a la búsqueda. Hace honesto al objetivo, de modo que cuando la búsqueda hace exactamente lo que siempre hace — encontrar el máximo — el máximo es una estrategia que realmente quieres.
Notas de honestidad
Tres advertencias, expresadas con claridad, porque un estudio controlado se gana sus conclusiones solo si nombra sus límites.
- El mercado es sintético, y deliberadamente. Una señal normal estándar, un edge lineal confinado a , ruido Student-() de colas pesadas — elegidos por verdad de base controlada, no por realismo de mercado. Solo podemos demostrar que un objetivo elige la estrategia equivocada ejecutándolo sobre datos donde sabemos cuál es la estrategia correcta. Los mercados reales son no estacionarios, autocorrelacionados y cambiantes de régimen. Las colas pesadas son un ingrediente realista que conservamos, pero — al contrario de una primera intuición natural, y al contrario de un borrador anterior de este mismo artículo — no son lo que impulsa la trampa: un control con ruido gaussiano (300 semillas) degenera 55.7% de las veces frente a 57.0% aquí, con Sharpe fuera de muestra 0.71 frente a 0.70. La trampa es un artefacto de muestra pequeña más selección que sobrevive con o sin colas pesadas. El resultado real es el diagnóstico y el patrón de reparación, no una estrategia ni una constante universal.
- Los valores de reparación dependen de la escala. El piso específico y el shrinkage que cierran completamente la trampa están ajustados a este proceso generador de datos — sus frecuencias de operación, su grosor de cola, el tamaño de su edge. En otros datos, la meseta se mueve. Lo que se transfiere es la forma de la superficie del barrido (elevación monótona en ambas perillas, degeneración a cero, una meseta en la verdad) y el método para encontrar tus propias coordenadas: barre ambas y lee la superficie, no copies los números.
- conf_k es nuestra construcción, no un estimador con nombre. El shrinkage por número de operaciones es un dispositivo bayesiano ponderado por precisión / al estilo empírico-bayesiano que construimos para este problema; su justificación se apoya en el resultado verificado de error estándar de Lo/Mertens y en el MinTRL de Bailey–López de Prado, y su pariente con nombre más cercano es el System Quality Number de van Tharp (, una forma funcional distinta), pero no afirmamos que en sí aparezca con nombre en la literatura. Sus curas complementarias — el piso de exposición, la medición en línea temporal completa — son práctica estándar expresada con precisión. Y nota qué objetivos ya eran seguros aquí: el PnL bruto y el Sharpe de línea temporal completa nunca necesitaron reparación, porque son conscientes de la exposición desde el principio — tanto que poner un piso al Sharpe de línea temporal completa se reduce al Sharpe de línea temporal completa, cuyo ganador ya supera cualquier piso razonable. La trampa es específicamente el Sharpe por operación / activo — e incluso el objetivo por operación totalmente reparado solo iguala al Sharpe de línea temporal completa (OOS 1.70 frente a 1.71), nunca lo supera. La lección principal no es la reparación; es medir en la línea temporal completa desde el principio.
Conclusiones clave
- El objetivo es la decisión, no una formalidad. Una búsqueda no encuentra "una buena estrategia" — encuentra el maximizador de cualquier escalar que le hayas dado, y distintos escalares seleccionan estrategias radicalmente diferentes sobre datos idénticos. Elegir el objetivo es elegir la estrategia; todo lo demás río abajo es contabilidad. Esa es la ley de Goodhart: en el momento en que tu métrica se convierte en el objetivo de la búsqueda, la búsqueda explotará cada brecha entre ella y lo que querías decir.
- El Sharpe por operación es una trampa. Medido solo en las barras que opera una estrategia, se maximiza operando lo menos posible — cuantas menos observaciones, más fácil que un par de movimientos afortunados inflen el ratio (un control gaussiano confirma que las colas pesadas no son necesarias; es un efecto de muestra pequeña más selección). En 600 semillas elige una lotería con menos del 5% de exposición en 56% de ellas y degenera en 57%; la elección degenerada típica promedia un Sharpe por operación in-sample de 4.58. En una semilla deliberadamente extrema, coronó una estrategia de ocho operaciones y 0.4% de exposición con un Sharpe por operación in-sample de 21.09 que colapsa a un Sharpe fuera de muestra de línea temporal completa de 0.13. Un ratio construido sobre ocho observaciones tiene un error estándar del orden de ±7.7 anualizado (Acto 4) — nunca fue información.
- Los objetivos conscientes de la exposición son seguros por naturaleza. El PnL bruto y el Sharpe de línea temporal completa nunca degeneraron (0%), porque miden la totalidad de la línea temporal y la inactividad se penaliza automáticamente. No se puede manipular una métrica de línea temporal completa operando rara vez. El único defecto del PnL bruto es el sesgo opuesto — sobreexpone (exposición media 0.859, OOS 1.61 frente al verdadero 1.77), alejando del óptimo para estar más en el mercado.
- Las reparaciones funcionan — pero solo te devuelven al Sharpe de línea temporal completa. Un piso de exposición y un shrinkage por número de operaciones (conf_k) elevan cada uno de forma independiente el Sharpe fuera de muestra y llevan la degeneración hacia cero; juntos alcanzan una meseta. Pero esa meseta es el Sharpe de línea temporal completa: la degeneración cae de 59.5% en a 0% en y el Sharpe OOS sube de 0.66 a 1.71 — exactamente el número que el Sharpe completo simple registra sin ayuda, y el objetivo robusto totalmente reparado en realidad se queda un pelo por debajo (OOS 1.70, 0.17% de degeneración: débilmente dominado). En la semilla 6, el objetivo robusto recupera un umbral casi óptimo y bien expuesto (, un punto de cuadrícula por debajo del verdadero ; 447 operaciones; Sharpe OOS 1.77). Trata a conf_k como un respaldo para cuando te imponen una métrica por operación, no como una mejora sobre medir la línea temporal completa. Las coordenadas exactas dependen de la escala; la forma de la superficie es el resultado transferible.
- Diseña el objetivo para que no pueda ser manipulado por operaciones raras y afortunadas. En orden de preferencia: mide en la línea temporal completa (por defecto), exige exposición (palanca individual más fuerte), encoge por número de operaciones (Minimum Track Record Length a nivel de objetivo). Nada de esto hace más inteligente a la búsqueda — hace honesto al objetivo, de modo que el máximo que la búsqueda inevitablemente encuentra es una estrategia que realmente operarías.
Una búsqueda de parámetros es un genio obediente. Concede exactamente el deseo que formulas, no el que quisiste decir — y "maximiza esta métrica" es el deseo. Fórmalo como un Sharpe por operación y conjurará ocho operaciones afortunadas y las llamará fortuna. Fórmalo de modo que estar plano se castigue y un puñado de operaciones gane solo un puñado de crédito, y el mismo genio, con los mismos datos, te entrega el edge real. La estrategia que despliegas se eligió en el momento en que escribiste el objetivo. Elígela a propósito.
El experimento completo — el mercado sintético, los seis objetivos, el Monte Carlo de 600 semillas y la superficie de barrido de reparación, cada número regenerable desde un script determinista — está en el paper complementario en objective-design.marketmaker.cc, con código y datos en github.com/suenot/objective-design-degeneracy.
Este es un frente de la misma guerra que nuestros otros estudios libran desde ángulos distintos. El Deflated Sharpe Ratio pone precio al ganador de una búsqueda tras el multiple testing — donde este artículo pregunta si el objetivo eligió la estrategia correcta en primer lugar, el DSR pregunta si la estrategia elegida supera lo que la suerte sola produciría. El próximo estudio de probabilidad de sobreajuste del backtest ataca el mismo sesgo de selección desde el lado del remuestreo, puntuando el procedimiento en lugar del ganador. Y la taxonomía de look-ahead bias cataloga al otro gran fabricante de Sharpe falso — una fuga desde el futuro — que produce el mismo síntoma idéntico (un backtest glorioso que muere en vivo) mediante un mecanismo completamente distinto. Diseño de objetivos, deflación, probabilidad de sobreajuste, look-ahead: cuatro nombres para una sola disciplina — no dejarse engañar por el propio backtest.
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.