Búsqueda aleatoria vs. inteligente: el cruce es el costo de evaluación, no el algoritmo
Parte de la serie "Backtests sin ilusiones".
Existe una idea recibida en la optimización de hiperparámetros: la búsqueda aleatoria es una línea base que se termina superando. El resultado clásico de Bergstra & Bengio (2012) estableció que lo aleatorio supera a grid; luego se suponía que la optimización bayesiana, TPE, CMA-ES y los métodos multi-fidelidad como Hyperband/ASHA superarían a lo aleatorio a su vez. Así que cuando nos sentamos a comparar métodos de búsqueda de parámetros para nuestro propio motor de trading, esperábamos la escalera habitual: lo aleatorio abajo, un sampler inteligente arriba.
Obtuvimos lo contrario — y después obtuvimos también la respuesta de manual. Misma estrategia, mismo espacio de parámetros, mismo objetivo, misma máquina. Lo único que cambiamos fue cuán costoso era un solo backtest, y el ranking de los métodos de búsqueda se invirtió. Cuando cada evaluación era barata, una secuencia de Sobol scrambled y tonta aplastó a todos los samplers "inteligentes". Cuando hicimos que cada evaluación fuera costosa, los métodos inteligentes tomaron la delantera y encontraron la única configuración que sobrevivió fuera de muestra.
La lección no es que "lo aleatorio esté subestimado" ni que "lo bayesiano esté sobrestimado". Es que el cruce entre la búsqueda aleatoria y la inteligente está gobernado por el costo de evaluación, no por la inteligencia del algoritmo. Elige tu optimizador según cuánto cuesta un backtest, no según su reputación. Este artículo mide exactamente dónde se ubica el cruce, por qué se ubica ahí, y una condición previa — la fidelidad — que decide si los trucos del régimen costoso (early stopping, pruning multi-fidelidad) son siquiera seguros de usar.
Todo lo que sigue proviene de dos scripts de nuestro backtester: bench_search.py (v4, commit ee092f1) para el régimen barato de un solo timeframe, y bench_search_multitf.py (commit 102853c) para el régimen costoso multi-timeframe. Ambos están libres de leaks — decisión al cierre de la barra i, fill en open[i+1] — y ambos puntúan cada método con un objetivo walk-forward rodante multi-fold, con una ventana de test reservada que la búsqueda nunca ve.
La pregunta: ¿throughput o eficiencia por muestra?

Todo método de búsqueda gasta su presupuesto de wall-clock en dos cosas: decidir dónde muestrear a continuación (el cómputo propio del sampler) y evaluar la muestra (correr el backtest). Llamemos al primero el costo de ask/tell y al segundo el costo de evaluación. El poder de búsqueda efectivo de un método sobre un presupuesto de wall-clock fijo es, aproximadamente:
y su calidad final es ese conteo multiplicado por cuán bien colocado está cada punto. Dos perillas, tirando una contra la otra:
- Throughput — puntos por segundo. Los samplers tontos (aleatorio, Sobol/QMC scrambled) tienen un costo de ask/tell casi nulo: emiten un punto de baja discrepancia y siguen adelante. Maximizan el conteo.
- Eficiencia por muestra — calidad por punto. Los samplers inteligentes (TPE, CMA-ES, ASHA) gastan cómputo real modelando el objetivo para colocar cada punto mejor. Maximizan la colocación, a costa del throughput.
Qué perilla gana depende enteramente del denominador. Cuando el costo de evaluación es minúsculo, el costo de ask/tell domina el denominador, así que cualquier cosa que lo infle — un modelo sustituto, una estimación de densidad por kernel, una actualización de covarianza — reduce directamente el número de puntos que exploras. Cuando el costo de evaluación es grande, el costo de ask/tell es un error de redondeo, así que la inteligencia es efectivamente gratis y deberías comprar toda la que puedas.
Esa es toda la tesis en una frase: el impuesto de ask/tell es fijo, pero su importancia la determina el costo de evaluación contra el que se divide. Ahora veamos cómo sucede.
El régimen barato: el Sobol tonto gana en throughput

Nuestra estrategia de un solo timeframe es una regla de separación HMA/HMA3 libre de leaks sobre un espacio de 7 parámetros, evaluada por un eval_batch de numba in-process que corre prange sobre las configuraciones sin overhead entre procesos. En este motor, un backtest es casi gratis — el kernel crudo evalúa configuraciones a razón de unos 3–4k cfg/s. Este es el régimen barato, y es donde el trading difiere marcadamente del entorno de deep learning del que proviene la mayor parte del folclore de HPO: nuestra "función objetivo" no es un entrenamiento de GPU de 6 horas, es un pase de array de 0.3 milisegundos.
Le dimos a cada método el mismo presupuesto — 1,500 evaluaciones — y registramos el wall-clock que cada uno necesitó para gastar esas evaluaciones, más el objetivo de test reservado que encontró. Como el presupuesto de evaluaciones es fijo, la columna de wall-clock es una lectura directa del overhead de cada sampler:
| Método | Evals | Wall-clock | Throughput | TEST reservado |
|---|---|---|---|---|
| sobol (QMC) | 1,500 | 0.53 s | ~2,830 cfg/s | −259 |
| random | 1,500 | 0.85 s | ~1,770 cfg/s | −27 |
| sobol→cmaes | 1,500 | 1.38 s | ~1,085 cfg/s | −367 |
| cmaes | 1,500 | 1.76 s | ~850 cfg/s | −85 |
| tpe | 1,500 | 9.76 s | ~154 cfg/s | −161 |
| tpe-mv+sobol | 1,500 | 12.15 s | ~123 cfg/s | −151 |
| asha (folds) | 1,500 | 15.79 s | ~95 cfg/s | −165 |
TEST es el objetivo walk-forward (PnL anualizado por tiempo activo × confianza por cantidad de trades) sobre una ventana reservada que la búsqueda nunca tocó; más alto es mejor.
Saltan dos hechos a la vista. Primero, mira la columna de throughput. Sobol scrambled corre a ~2,830 cfg/s — cerca del techo del motor. TPE corre a ~154 cfg/s y ASHA a ~95. Eso es una desaceleración de 18–30x para hacer el número idéntico de evaluaciones. Los samplers inteligentes no están evaluando nada extra; están gastando ese tiempo dentro de su propia maquinaria de ask/tell.
Segundo — y esta es la parte que mantiene la historia honesta — ningún método encontró un resultado positivo fuera de muestra. Todos los valores de TEST son negativos. En el régimen de un solo timeframe, nuestra estrategia simplemente no tiene un edge OOS duradero, así que "qué método gana" no es una pregunta sobre la ganancia final; es una pregunta sobre eficiencia de búsqueda. Y en eficiencia de búsqueda con un presupuesto de evaluaciones fijo, los métodos tontos ganan de manera contundente: Sobol y random alcanzan números reservados iguales o mejores que los samplers inteligentes mientras gastan 1/20 del wall-clock.
Ahora invirtamos la comparación de la forma en que un practicante realmente la experimenta — fija el wall-clock, no el conteo de evaluaciones. Si le das a cada método los 15.8 segundos que ASHA necesitó para sus 1,500 evaluaciones, Sobol no se detiene en 1,500. Sigue adelante, hasta aproximadamente 45,000 configuraciones. En el régimen barato la pregunta nunca es "qué sampler coloca mejor 1,500 puntos" — es "¿preferirías tener 1,500 puntos colocados con astucia o 45,000 puntos scrambled, cuando cada punto es casi gratis?" Con una evaluación casi gratuita, gana la amplitud. Treinta veces más cobertura de un espacio de 7 dimensiones supera a un mejor modelo de ese espacio.
El impuesto de ask/tell
¿A dónde va ese 20x? No al backtest — eso es idéntico entre métodos. Va a la contabilidad por punto del sampler, ejecutada en Python, dentro del loop:
- TPE ajusta un par de estimaciones de densidad por kernel (trials buenos vs. malos) en cada
ask, y el costo crece con el historial de trials. TPE multivariado los ajusta conjuntamente entre dimensiones — más modelado, más Python. - CMA-ES actualiza y muestrea desde una matriz de covarianza en cada generación. Más barato que TPE aquí (corrió a ~850 cfg/s), pero aun así un orden de magnitud de overhead por encima de emitir un punto de Sobol.
- ASHA paga la contabilidad de promoción/rung del pruner y, en nuestro diseño de folds-como-fidelidad, paga el precómputo fijo del indicador antes de poder podar nada — así que sus evaluaciones "ahorradas" ahorran menos de lo que sugiere la contabilidad.
Nada de esto es una crítica a los algoritmos. Ese es justamente el punto: el costo de ask/tell es una cantidad de milisegundos por punto aproximadamente fija, y cuando la evaluación que envuelve también son unos pocos milisegundos, ese costo fijo de repente es el 90% de tu presupuesto. El sampler inteligente gasta nueve décimas partes de su wall-clock pensando dónde mirar y una décima parte realmente mirando. Una secuencia de Sobol scrambled gasta todo mirando. Cuando mirar es barato, mirar gana.
Deliberadamente no incluimos en el benchmark un optimizador bayesiano de proceso gaussiano completo aquí, y por la misma razón: un surrogate GP es en el número de trials. Contra una evaluación que cuesta milisegundos, ajustar el surrogate consumiría todo el presupuesto de búsqueda antes de evaluar una fracción significativa del espacio. En el régimen barato, GP-BO queda descalificado por aritmética.
El régimen costoso: el cruce se invierte

Ahora hagamos que un backtest sea costoso. La estrategia multi-timeframe apila un timeframe alto, uno medio y uno bajo (triple-TF), cada uno aportando un pase de indicador y sus propios umbrales, todo puntuado con el mismo walk-forward multi-fold. Una sola evaluación ahora cuesta del orden de 0.1–0.5 segundos en lugar de 0.3 milisegundos — un salto de tres órdenes de magnitud. El costo de evaluación se movió del término de error de redondeo de nuestro denominador al término dominante. Según la tesis, el impuesto de ask/tell debería dejar de importar y la inteligencia debería empezar a pagar. Y así es.
Corrimos cada método bajo un presupuesto fijo de ~150 segundos de wall-clock en el problema triple-TF (un espacio de 18 parámetros), dejamos que cada uno gastara ese presupuesto como su sampler dictara, y evaluamos la única mejor configuración que devolvió en una ventana de test reservada:
| Método (triple-TF, 150 s) | Evals | TEST reservado | Veredicto |
|---|---|---|---|
| sobol (QMC) | 349 | −673 | pierde |
| cascade (sobol²×64) | 20,864 | −585 | pierde |
| asha (folds) | 292 eff. | −239 | pierde |
| tpe-mv+sobol | 455 | −43 | pierde |
| sobol→cmaes | 15,239 | +226 | único OOS-positivo |
TEST es el mismo objetivo walk-forward que antes. Solo un método cruzó el cero.
La línea base de Sobol tonta que dominó el régimen barato ahora está última, sin remedio, con −673. El muestreo ciego de baja discrepancia de un espacio de 18 dimensiones, con solo 349 evaluaciones para gastar porque cada una es costosa, nunca localiza nada. El método inteligente, sobol→cmaes — 30% del presupuesto en Sobol para sembrar una cuenca, luego refinamiento con CMA-ES desde la mejor semilla — es el único método que produjo, en absoluto, un resultado positivo fuera de muestra. En el holdout final, nunca tocado, el campeón devolvió +2.62% (19 trades, ~6.6% de exposición de capital) sobre una ventana de test que devolvió +16.35% (46 trades, ~15.7% de exposición). El campeón de cada competidor perdió dinero fuera de muestra.
Ese es el cruce, medido sobre la misma familia de estrategias, el mismo objetivo, la misma máquina: no cambies nada más que el costo de una evaluación, y el ranking de los métodos de búsqueda se invierte. En el régimen barato, Sobol gana y los samplers inteligentes son un desperdicio de 20x; en el régimen costoso, el sampler inteligente es lo único que funciona y Sobol es el desperdicio.
Por qué "lo inteligente" gana aquí — y no es solo eficiencia por muestra

La versión prolija de esta historia es "las evaluaciones costosas premian la eficiencia por muestra, así que gana el método que coloca menos puntos, pero mejores." Eso es medio cierto, y los datos obligan a la otra mitad, honesta y más interesante.
Mira otra vez los conteos de evaluaciones. sobol→cmaes no ganó evaluando menos puntos que Sobol ciego — evaluó 15,239 contra los 349 de Sobol, cuarenta veces más, en los mismos 150 segundos. ¿Cómo? Porque nuestro costo de evaluación multi-TF está estructurado, no es uniforme. Hay dos ejes: un eje costoso de indicador (los períodos de timeframe y las longitudes de HMA, de 30–500 ms cada uno de computar, porque fuerzan un recómputo del indicador) y un eje barato de umbral (los niveles de separación de entrada/salida, ~1–2 ms cada uno sobre señales en caché). La brecha entre ellos es de 30–100x.
Sobol ciego ignora esta estructura. Cada punto que dibuja hace jitter en el eje costoso del indicador, forzando un recómputo desde cero — así que paga precio completo en las 349 evaluaciones. sobol→cmaes, una vez que CMA-ES ha localizado una región prometedora, tiende a mantener la estructura gruesa del indicador aproximadamente fija y perturbar los umbrales continuos, que caen sobre señales en caché y cuestan casi nada. El método inteligente convierte el mismo wall-clock en tanto puntos mejor colocados como muchos más de ellos, porque ser adaptativo aquí significa ser consciente del costo: quedarse en el eje barato una vez que el eje costoso está fijado. Nuestro exploit explícito cascade(sobol²×64) hace esto de la forma más agresiva — 20,864 evaluaciones agrupando umbrales baratos sobre señales en caché — y aunque perdió en el test triple-TF, en la variante de dos timeframes ganó la ventana de test de forma contundente con +20.2% (antes de fallar en su propio holdout — más sobre esto más abajo).
Así que la formulación más afilada del cruce: en el régimen costoso, el impuesto de ask/tell se vuelve insignificante, lo cual te libera para ser inteligente — y "ser inteligente" significa adaptarse a la estructura de costo del objetivo, no solo a su forma. El muestreo ciego no puede hacer ninguna de las dos cosas. Esta es precisamente la estructura de dos ejes que nuestro motor de drill-down de resolución adaptativa está construido para explotar, y por eso los métodos multi-fidelidad pertenecen al régimen costoso — siempre que se cumpla una condición.
Fidelidad: la condición previa oculta para el pruning
Los métodos multi-fidelidad — Hyperband, ASHA, cualquier pruner de early stopping — descansan en una suposición: que una evaluación barata y parcial ordena las configuraciones de la misma manera que lo haría la evaluación costosa y completa. Si una configuración que se ve bien en un fold de walk-forward tiende a verse bien en todos ellos, puedes matar temprano a las perdedoras y gastar el presupuesto de las sobrevivientes en las ganadoras. Si la fidelidad barata ordena al azar, el early stopping simplemente descarta buenas configuraciones a cara o cruz.
Así que antes de confiar en cualquier pruner, medimos la suposición directamente. Nuestra fidelidad es el número de folds de walk-forward (evaluar sobre r folds de forma barata, o los K folds completos a costo total), y el gate de fidelidad calcula la correlación de rango de Spearman ρ entre el objetivo barato de r folds y el objetivo completo, sobre una muestra de configuraciones aleatorias. ρ@1 es la correlación cuando juzgas con un solo fold — la fidelidad más agresiva y más barata. Esto es lo que reportó ese gate en los dos regímenes:
| Fidelidad (folds usados) | Single-TF ρ | Multi-TF ρ |
|---|---|---|
| ρ@1 (1 fold) | ~0.03 | 0.43 |
| ρ@2 | — | 0.67 |
| ρ@3 | — | 0.78 |
| ρ@4 | — | 0.82 |
| ρ@5 | — | 0.91 |
En el régimen de un solo timeframe, un fold ordena las configuraciones con una correlación de ~0.03 respecto a la verdad — estadísticamente indistinguible de lo aleatorio. Esto no es una coincidencia; es el mismo hecho que "ningún método encontró un edge OOS." Cuando una estrategia no tiene señal duradera, su desempeño por fold es en su mayoría suerte, así que cualquier fold individual es un sorteo casi aleatorio, y el pruning de baja fidelidad mataría buenas configuraciones y promovería a las afortunadas. El multi-fidelidad es inseguro en el régimen barato aquí — no porque el método sea malo, sino porque la señal barata es ruido. (Nuestro gate marca esto y se niega a podar de forma agresiva.)
En el régimen multi-timeframe, existe un edge real, y el panorama de fidelidad se transforma: ρ@1 sube a 0.43, y para el quinto fold ρ trepa a 0.91. Ahora un fold lleva información de ordenamiento real, y cinco folds llevan casi toda. El early stopping se vuelve seguro — una configuración que pierde en los primeros dos folds es genuinamente probable que sea una perdedora. Esta es la segunda razón por la que los métodos multi-fidelidad pertenecen al régimen costoso: no solo que las evaluaciones costosas hacen que el pruning valga la pena, sino que el régimen costoso es donde la fidelidad barata finalmente ordena como la costosa.
La regla que esto te entrega es directa y barata de ejecutar: mide ρ antes de podar. La correlación de fidelidad es un cómputo de dos líneas sobre unos cientos de configuraciones aleatorias, y es la diferencia entre que la búsqueda multi-fidelidad te acelere o que la búsqueda multi-fidelidad te sabotee en silencio.
Ganar la búsqueda no es sobrevivirla
Una nota más de honestidad, porque esta serie trata sobre backtests que mienten. Nuestro campeón triple-TF, sobol→cmaes, fue el único método en registrar un holdout positivo — +2.62%, sobre un +16.35% en la ventana de test. Esa es la buena noticia. Aquí está la salvedad: no sobrevivió a la deflación estadística.
El campeón es el mejor entre decenas de miles de configuraciones probadas en todos los métodos. Bajo tanto multiple testing, un holdout de +2.62% no es automáticamente real. Corrimos las compuertas de sobreajuste en las que se apoya toda la serie — el Ratio de Sharpe Deflactado con N-efectivo corregido por la correlación entre trials, y PBO vía validación cruzada combinatoriamente simétrica. El campeón pasó PBO (0.12, cómodamente por debajo del umbral de 0.2 — su rank es estable entre los splits de CSCV) pero su Sharpe deflactado colapsó a cero (el gate exige ≥ 0.95). Veredicto: no sobrevive.
Lee eso con cuidado, porque es el punto de todo el ejercicio. El resultado del cruce es real: la búsqueda inteligente ganó la búsqueda en el régimen costoso, de forma decisiva, y Sobol la perdió. Pero ganar la búsqueda es una afirmación sobre el optimizador, no sobre la estrategia. La mejor configuración que un buen optimizador puede encontrar en un espacio sin edge sigue sin tener edge — la deflación es lo que te dice cuál tienes en las manos. Elegir el método de búsqueda correcto te consigue la mejor respuesta disponible de forma eficiente; no fabrica un edge que nunca estuvo ahí. El optimizador y las compuertas de sobreajuste son instrumentos distintos que miden cosas distintas, y necesitas ambos.
Una regla de decisión que realmente puedes aplicar
No necesitas volver a correr nuestro benchmark para elegir un optimizador. Necesitas un solo número: ¿cuánto tarda un backtest? Cronometra una sola evaluación de tu objetivo — un pase completo de walk-forward, todos los folds — y de ahí lee el régimen.
- Evaluación barata (≲ ~10 ms/backtest): compra throughput. Usa Sobol/QMC scrambled o random. El impuesto de ask/tell en TPE/CMA-ES/ASHA te costará 10–30x tu conteo de puntos por una colocación que una evaluación casi gratis no recompensa. No te molestes con pruning multi-fidelidad — y si te tienta, revisa primero ρ@1; en un régimen barato de bajo edge probablemente esté cerca de cero, lo que significa que podar es como tirar una moneda. Gasta el tiempo de ingeniería ahorrado en ampliar la búsqueda, no en achicarla.
- Evaluación costosa (≳ ~100 ms–segundos/backtest): compra eficiencia por muestra. Usa CMA-ES, TPE, o un híbrido de CMA-ES sembrado con Sobol; el overhead del sampler ahora es un error de redondeo frente a la evaluación. Si tu costo de evaluación es estructurado (un eje de indicador lento y un eje de umbral rápido, como en multi-TF), prefiere métodos que exploten esa estructura — cascadas, drill-downs, cualquier cosa consciente del costo — por encima de métodos que traten cada dimensión como igualmente costosa.
- En un punto intermedio, o si no estás seguro: un híbrido sembrado con Sobol (
sobol→cmaes) es la opción robusta por defecto. Se comporta como un Sobol de amplitud primero al principio (barato, sin modelo que ajustar) y como un refinador inteligente después, así que se degrada con elegancia en cualquiera de los dos regímenes en que termines estando — exactamente por eso fue nuestro campeón del régimen costoso. - Antes de cualquier pruner, mide la fidelidad. Calcula ρ de Spearman entre la fidelidad barata y el objetivo completo sobre unos cientos de configuraciones aleatorias. Si ρ@1 es bajo, evita podar con un solo fold; sube el recurso mínimo hasta que ρ supere ~0.5. Esto cuesta dos líneas de código y evita que tu acelerador descarte en silencio tus mejores configuraciones.
- Gane quien gane la búsqueda, corre las compuertas de deflación. El ganador del optimizador es el objeto más propenso al sobreajuste que producirás en toda la semana. DSR y PBO, no el puntaje del optimizador, deciden si es operable.
Dónde encaja esto
Este resultado se ubica en el centro de varios hilos que esta serie ha estado tirando:
- Presupone que el motor de fondo es honesto. Toda la ventaja del régimen barato existe porque nuestro motor numba in-process alcanza miles de configuraciones por segundo sin IPC — la escalera de velocidad es lo que te pone, en primer lugar, en el régimen donde gana el throughput. Un motor lento, con impuesto de framework, pondría todo problema en el régimen costoso por defecto, y nunca verías el cruce.
- El exploit del régimen costoso es la estructura de costo de dos ejes en torno a la cual está diseñado nuestro motor de drill-down de resolución adaptativa: localizar en el eje grueso y costoso, y luego explotar el eje fino y barato.
- Cada método aquí solo es confiable porque el motor está libre de leaks. Una búsqueda sobre decenas de miles de trials es la máquina más eficiente posible para encontrar y explotar un bug de look-ahead — el "ganador" sería cualquier configuración que más se apoyara en el leak. Primero arregla el reloj, después busca.
- Y el destino del campeón — ganar la búsqueda, fallar la deflación — es todo el argumento para tratar la búsqueda de parámetros y el control de sobreajuste como etapas separadas con instrumentos separados.
El trasfondo académico es el mismo al que el campo sigue regresando: Bergstra & Bengio (2012) sobre por qué lo aleatorio supera a grid; el Hyperband de Li et al. (2018) y su continuación ASHA (2020) sobre multi-fidelidad; y Bailey & López de Prado (2014) sobre por qué el ganador de cualquier búsqueda grande debe ser deflactado antes de creerle. Ninguno de ellos prescribe un único mejor optimizador, porque no existe tal cosa — existe un régimen, y un costo que lo selecciona.
Conclusiones clave
- El cruce entre la búsqueda aleatoria y la inteligente lo determina el costo de evaluación, no el algoritmo. Invertimos el ranking de todos los métodos sin cambiar nada más que cuán costoso era un backtest.
- Evaluación barata → el Sobol tonto gana en throughput. En nuestro motor single-TF (~3–4k cfg/s), TPE y ASHA corrieron 18–30x más lento para el mismo conteo de evaluaciones — ~95–154 cfg/s frente a ~2,830 de Sobol. A igual wall-clock, la amplitud le gana a un mejor modelo del espacio cuando cada punto es casi gratis.
- Evaluación costosa → los métodos inteligentes ganan en eficiencia. En el problema triple-TF,
sobol→cmaesfue el único método en encontrar un resultado positivo fuera de muestra (+16.35% test, +2.62% holdout); Sobol ciego terminó último, sin remedio. - En el régimen costoso, "inteligente" significa consciente del costo. El ganador explotó la brecha de 30–100x entre el eje costoso del indicador y el eje barato del umbral — hizo más evaluaciones y las colocó mejor, quedándose en el eje barato una vez que el costoso estaba fijado.
- La fidelidad es la condición previa para el pruning. La correlación de rango de un solo fold subió de ρ@1 ≈ 0.03 (single-TF, esencialmente aleatorio) a 0.43 (multi-TF), llegando a 0.91 con cinco folds. El multi-fidelidad/ASHA solo vale la pena una vez que la fidelidad barata ordena como la costosa — así que mide ρ antes de podar.
- Ganar la búsqueda no es sobrevivirla. El campeón pasó PBO pero falló la compuerta del Sharpe Deflactado. Elige el optimizador según el costo de evaluación; decide la operabilidad con las compuertas de deflación. Son instrumentos distintos, y necesitas ambos.
Elige tu optimizador según lo que cuesta un backtest. Después recuerda que la mejor respuesta que un optimizador puede encontrar en un espacio sin edge sigue sin tener edge — y deja que las compuertas, no la búsqueda, te digan cuál tienes en las manos.
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.