La Puerta de Fidelidad: el Backtesting de Grueso a Fino te Engaña Más Rápido, a Menos que el Proxy Barato Clasifique Igual que el Costoso
Parte de la serie "Backtests sin Ilusiones".
Toda búsqueda de parámetros seria choca con la misma pared: el espacio es enorme y cada evaluación honesta es costosa. Una estrategia multi-timeframe con una docena de umbrales y tres periodos de indicador, evaluada sobre una división walk-forward de múltiples pliegues, puede costar segundos por configuración. Diez mil configuraciones son horas. Así que buscas un atajo, y el atajo es siempre la misma idea: evaluar barato, ascender a la evaluación costosa solo a los supervivientes. Filtra diez mil configuraciones en un pliegue, quédate con las mejores unas pocas centenas, y ejecútalas en todos los pliegues. Filtra en velas horarias y profundiza a 1 segundo solo para los finalistas.
Esto es la búsqueda de grueso a fino — profundización progresiva, multi-fidelidad, eliminación sucesiva, Hyperband, ASHA — y es una de las ideas genuinamente buenas en optimización. Puede convertir un día de cómputo en una hora. Nosotros la usamos. Pero esconde una trampa tan silenciosa que la mayoría de quienes la despliegan nunca la comprueban, y la trampa es esta: todo el método asume que tu proxy barato clasifica las configuraciones de la misma manera que la evaluación costosa. Si no lo hace, no estás buscando más rápido. Estás descartando a tus futuros ganadores en la primera puerta y ascendiendo al ruido — simplemente te estás engañando más rápido.
Este artículo trata sobre la única medición que te dice si tu profundización progresiva es real o una ilusión. La aplicamos a nuestra propia búsqueda multi-timeframe, y la respuesta fue incómoda: en la fidelidad más barata, nuestro proxy clasificaba las configuraciones casi al azar (ρ de Spearman ≈ 0.03). Si hubiéramos podado agresivamente en esa fidelidad —como invita a hacer cualquier configuración por defecto de ASHA lista para usar— habríamos descartado a los ganadores finales en la primera ronda. La solución es una puerta obligatoria que se ejecuta antes de la búsqueda: medir la correlación de rango y negarse a podar por debajo de la fidelidad en la que es fiable.
Qué es en realidad la búsqueda multi-fidelidad

La familia de métodos tiene una única forma. Defines una fidelidad (también llamada recurso o presupuesto): un dial de barato a costoso que, en su máximo, da el objetivo verdadero. Luego ejecutas configuraciones a baja fidelidad, las clasificas, te quedas con la mejor fracción y vuelves a ejecutar solo a esos supervivientes a mayor fidelidad — repitiendo hasta que un pequeño número de finalistas haya sido evaluado a fidelidad completa.
La eliminación sucesiva (Jamieson & Talwalkar, 2016) es el núcleo: empieza con N configuraciones en el recurso mínimo, quédate con el mejor 1/η, multiplica el recurso por η, repite. Hyperband (Li et al., 2018) envuelve la eliminación sucesiva en un bucle externo que cubre distintos recursos de partida, para que no tengas que adivinar con qué agresividad podar. ASHA (Li et al., 2020) es la versión asíncrona y apta para paralelismo. La tasa de eliminación η es el único parámetro que comparten; el valor por defecto canónico es η = 3 — quédate con el mejor tercio en cada escalón, triplica el presupuesto.
La fidelidad en sí puede ser casi cualquier cosa de barato a costoso que converja hacia la verdad:
- Número de pliegues walk-forward. Evalúa en 1 pliegue, luego 2, luego 3, hasta K. Esta es la fidelidad que estudiamos a continuación, porque es la natural para un backtest con una división out-of-sample móvil.
- Resolución de velas. Filtra en barras de 1 hora, asciende a 1 minuto, profundiza a 1 segundo o a operaciones en bruto solo para los finalistas. Esta es la idea de la profundización adaptativa aplicada a la búsqueda en lugar de a la simulación de ejecución.
- Longitud del historial, épocas, submuestra del dataset — las fidelidades clásicas de ML.
En un backtest, los pliegues y la resolución son las dos que importan, y —este es el punto de todo el artículo— no son igual de seguras. Una de ellas tiene un sesgo que selecciona silenciosamente los parámetros equivocados sin importar cuán cuidadosamente la controles con una puerta.
La única suposición sobre la que descansa todo

Anota lo que la eliminación sucesiva realmente necesita para ser correcta. No necesita que la fidelidad barata dé el valor correcto del objetivo —a nadie le importa que un pliegue reporte un Sharpe distinto que seis pliegues. Necesita algo más débil pero mucho más específico: la fidelidad barata debe clasificar las configuraciones de la misma manera que la costosa. Si la configuración A vence a la configuración B en fidelidad completa, A también debería tender a vencer a B en baja fidelidad. Eso es todo. Eso es también todo.
Formalmente, la cantidad que gobierna si la profundización progresiva funciona es la correlación de rango entre el objetivo de baja fidelidad y el de alta fidelidad, a través del espacio de configuraciones. Si esa correlación es alta, los supervivientes de la ronda barata son las mismas configuraciones que habrían ganado la ronda costosa, y has ahorrado cómputo gratis. Si es baja, la ronda barata es un filtro aleatorio: descarta configuraciones buenas y asciende a las malas, y has gastado tu presupuesto acelerando tu camino hacia una peor respuesta. No hay un ajuste intermedio de η que te rescate: un proxy malo podado con suavidad igual filtra ganadores; podado agresivamente, los desangra.
El fallo es invisible de la manera habitual. La búsqueda termina, reporta un campeón, el campeón se ve bien in-sample. Nada lanza un error. Solo descubres que el proxy mentía cuando el campeón se desmorona out-of-sample —y para entonces ya has atribuido el fallo a la estrategia, no a la búsqueda que la seleccionó. Así que la disciplina es la misma a la que esta serie llega una y otra vez: mide aquello que el método asume, antes de confiar en el método. Para la profundización progresiva, lo que hay que medir es la correlación de rango, y la medición es barata.
Cómo medirla: la puerta de fidelidad

La puerta es un pequeño experimento que ejecutas una vez, antes de la búsqueda propiamente dicha, sobre el mismo espacio que estás a punto de explorar. El procedimiento:
- Extrae unos pocos cientos de configuraciones al azar del espacio de parámetros (nosotros usamos ~200 — suficiente para una estimación estable de Spearman, lo bastante barato como para permitírnoslo).
- Evalúa cada una en todos los escalones de fidelidad: en 1 pliegue, 2 pliegues, … hasta los K pliegues completos. Para una fidelidad basada en el número de pliegues esto es casi gratis, porque los pliegues que calculas para los escalones baratos se reutilizan en el costoso — un promedio acumulado.
- Para cada escalón
r, calcula la correlación de rangos de Spearman entre la clasificación de r pliegues y la clasificación completa de K pliegues, a través de esas ~200 configuraciones. - El primer escalón donde ρ cruza un umbral (nosotros usamos ρ ≥ 0.5) es la fidelidad más superficial en la que se te permite podar. Por debajo de ella, la clasificación es demasiado ruidosa como para confiar en ella; no debes eliminar configuraciones ahí.
Todo esto son un par de docenas de líneas. Su núcleo:
def fidelity_check(cache, n_probe, seed=7):
"""Spearman ρ: cumulative mean over the first r folds (in FOLD_ORDER)
vs the full K-fold objective, on n_probe random configs."""
rng = np.random.default_rng(seed)
k = len(FOLDS)
per_fold = np.empty((k, n_probe))
order_win = np.array([list(FOLDS[fi]) for fi in FOLD_ORDER], np.int64)
for j in range(n_probe):
p = _unit_to_params(rng.random(len(PNAMES))) # random config
scores, *_ = eval_group(cache, p, _sp_of(p)[None, :], order_win, False)
per_fold[:, j] = scores[0] # score on each fold
cums = np.cumsum(per_fold, axis=0) / np.arange(1, k + 1)[:, None] # r-fold mean
rhos = []
for r in range(1, k):
rho = spearmanr(cums[r - 1], cums[-1]).statistic # r folds vs all K
rhos.append(0.0 if math.isnan(rho) else rho)
return rhos
Nota un detalle deliberado: los pliegues se toman en FOLD_ORDER, un orden intercalado que alterna segmentos tempranos y tardíos del calendario (pliegue 0, luego un pliegue intermedio, luego el pliegue 1, luego uno más tardío, …). Esto importa enormemente y es el tema de una sección posterior: significa que "1 pliegue" es un segmento que abarca la mitad de la historia, y "2 pliegues" es un segmento temprano más uno tardío — nunca una ventana reciente contigua. La fidelidad barata se abarata usando menos pliegues, no pliegues más recientes.
Resultados: un solo pliegue clasifica casi al azar

Esto es lo que reportó la puerta, ejecutada en dos de nuestras configuraciones multi-timeframe. El número es la ρ de Spearman entre la clasificación de r pliegues y la clasificación completa de K pliegues a través de ~200 configuraciones aleatorias —cuán fielmente la clasificación de baja fidelidad predice la clasificación de fidelidad completa.
Pliegues r |
Ejecución multi-TF | Un régimen más difícil |
|---|---|---|
| 1 | +0.43 | +0.03 |
| 2 | +0.67 | +0.43 |
| 3 | +0.78 | +0.78 |
| 4 | +0.82 | — |
| 5 | +0.91 | +0.91 |
Lee primero la columna del régimen más difícil, porque es la alarmante. En un pliegue, ρ = 0.03. Eso no es una correlación débil; es ninguna correlación — la clasificación de un pliegue de doscientas configuraciones es estadísticamente indistinguible de barajarlas. Una ejecución de eliminación sucesiva configurada (como lo están la mayoría, por defecto) para empezar a podar en min_resource = 1 haría, en este régimen, su primer y más agresivo corte a cara o cruz. Las configuraciones que eventualmente ganarían en fidelidad completa tienen una probabilidad de 50/50 de sobrevivir a la primerísima ronda. Para cuando llegas a la fidelidad en la que la clasificación significa algo (ρ = 0.78 en tres pliegues), la mayoría de ellas ya han desaparecido.
La columna multi-TF es más suave pero plantea el mismo punto de otra manera. Incluso ahí, un pliegue da ρ = 0.43 — por debajo de nuestra puerta de 0.5. Parece una correlación decente, y ese es exactamente el peligro: 0.43 es lo bastante alta como para adormecerte y lo bastante baja como para filtrar tus mejores configuraciones. Solo a los dos pliegues (ρ = 0.67) la clasificación se vuelve fiable.
De aquí se generalizan dos cosas. Primero, ρ en un pliegue depende del régimen y no es fiable —medimos desde 0.03 hasta 0.43 según la configuración, y en ninguno de los dos casos un solo pliegue superó el umbral. Segundo, ρ sube de forma monótona y rápida: a los tres pliegues ambas configuraciones están en 0.78, y a los cinco convergen en 0.91. La señal está ahí; solo tienes que gastar suficiente fidelidad para verla. El trabajo de la puerta es encontrar el escalón exacto donde empieza lo "suficiente" —y prohibir la poda por debajo de él.
Por qué un solo pliegue es tan ruidoso
El ruido no es un fallo en nuestra construcción de pliegues; es intrínseco, y entender por qué te impide "arreglarlo" de la manera equivocada. Un solo pliegue walk-forward es una ventana corta —semanas de un único régimen de mercado. La puntuación de una estrategia en esa ventana está dominada por qué tan bien sus parámetros resultan ajustarse a ese régimen, lo cual solo está débilmente relacionado con qué tan bien generalizan. Dos configuraciones genuinamente distintas en calidad pueden intercambiar posiciones en un solo pliegue solo porque una de ellas capturó una tendencia que ese pliegue resultó contener. El objetivo en un pliegue es un estimador de alta varianza del objetivo que realmente te importa, y la correlación de rango es exactamente lo que la alta varianza destruye primero — puedes preservar la media de un estimador mientras su clasificación es puro ruido.
Añadir pliegues promedia esa varianza a la baja. Cada pliegue es una extracción parcialmente independiente de condiciones de mercado; la media de r pliegues es un estimador de menor varianza, y su clasificación converge hacia la clasificación de fidelidad completa. Eso es precisamente el ascenso ρ = 0.03 → 0.43 → 0.78 → 0.91: no es el objetivo el que cambia, sino su estimación de rango la que se estabiliza a medida que la suerte específica del régimen se promedia. La lección es que la fidelidad, para un backtest, trata fundamentalmente de cuántos regímenes independientes has muestreado —y uno casi nunca es suficiente para clasificar sobre él.
Esto también explica por qué el régimen más difícil empieza en 0.03 mientras que la ejecución multi-TF empieza en 0.43. En el régimen más difícil, el pliegue único es más idiosincrático del régimen —las puntuaciones de un pliegue de las configuraciones están más impulsadas por la suerte y menos por una ventaja duradera, así que clasifican más cerca del azar. La puerta lee esa diferencia automáticamente y responde exigiendo más pliegues antes de permitir la poda. No necesitas saber de antemano en qué régimen estás: mides.
La puerta en código: elevar automáticamente la fidelidad mínima
La salida de la puerta es un único entero: min_resource, la fidelidad más superficial en la que se permite podar a ASHA. La regla es mecánica —recorre los escalones y toma el primero cuya ρ supere el umbral:
RHO_GATE = 0.5
min_res = len(FOLDS) # default: pruning OFF (full fidelity)
rhos = fidelity_check(cache, n_probe=200) # [ρ@1, ρ@2, …, ρ@(K-1)]
passing = [r for r, rho in enumerate(rhos, 1) if rho >= RHO_GATE]
if passing:
min_res = passing[0] # first rung that clears the gate
pruner = SuccessiveHalvingPruner(min_resource=min_res, reduction_factor=3)
Sigámoslo a través de las dos ejecuciones. En la configuración multi-TF, ρ@1 = 0.43 no supera la puerta pero ρ@2 = 0.67 sí lo hace, así que min_resource se eleva automáticamente a 2: ASHA ejecuta cada configuración en al menos dos pliegues antes de que se le permita eliminar nada, y luego poda con normalidad a partir de ahí. En el régimen más difícil, tanto ρ@1 = 0.03 como ρ@2 = 0.43 fallan; ρ@3 = 0.78 es la primera en superarla, así que min_resource pasa a ser 3. Y el respaldo crucial: si ningún escalón alcanza 0.5, passing queda vacío y min_resource se mantiene en K —la poda se desactiva por completo, y la búsqueda degrada con elegancia a una simple búsqueda de fidelidad completa en lugar de a una rápida pero equivocada. Una profundización progresiva que no puede demostrar su proxy simplemente se niega a podar.
Esta es toda la filosofía en una línea de flujo de control. El valor por defecto de toda librería de eliminación sucesiva es "poda desde min_resource = 1, confía en el escalón barato". La puerta reemplaza eso con "poda desde el primer escalón que los datos dicen que es fiable, y si ninguno lo es, no podes". Cuesta una sola sonda de ~200 configuraciones por adelantado y convierte la profundización progresiva de un acto de fe en una decisión medida. La tasa de eliminación η = 3 se mantiene tal cual; la puerta no toca cuán agresivamente podas, solo cuán temprano se te permite empezar.
Una nota de honestidad visible en el código de arriba: elevar min_resource recorta la aceleración. Podar en 3 pliegues en lugar de 1 significa que cada configuración —incluidas las que vas a descartar— paga por tres pliegues. Ese es el precio de la corrección, y es el intercambio correcto: una aceleración 2× menor en una búsqueda que encuentra ganadores reales vence a una aceleración 6× en una búsqueda que los descarta. La puerta hace ese intercambio de forma explícita en lugar de ocultarlo.
El eje barato equivocado: un historial más corto es una trampa
Hay una fidelidad barata que es tentadora, obvia y sesgada, y vale la pena señalarla por su nombre porque todo el mundo recurre a ella primero: un historial más corto. Filtra configuraciones en el último mes, asciende a los supervivientes a los dos años completos. Es trivialmente barato y se siente como la misma idea que usar menos pliegues. No lo es.
Menos pliegues y un historial más corto difieren en una manera decisiva. Una fidelidad basada en el número de pliegues, bien hecha, sigue abarcando todo el calendario —solo lo muestrea de forma más gruesa. Una fidelidad de historial más corto muestrea densamente un subintervalo del calendario. Y un subintervalo del historial de mercado es un régimen específico. Cuando clasificas configuraciones en el último mes, no estás obteniendo una estimación ruidosa pero insesgada de su clasificación en el periodo completo; estás obteniendo una estimación sesgada que favorece sistemáticamente a las configuraciones ajustadas al régimen del último mes. Aumenta el tamaño de muestra todo lo que quieras —promedia sobre más configuraciones, más pruebas— y el sesgo no se reduce, porque no es varianza. Vas a ascender a las configuraciones que mejor se ajustan a la ventana de filtrado, y esas son exactamente las que más probablemente están sobreajustadas a un régimen transitorio.
Por esto nuestra fidelidad recorre los pliegues en un orden intercalado en lugar de cronológico. Con K pliegues repartidos por toda la historia, "1 pliegue" es un único segmento cerca de la mitad, "2 pliegues" es un segmento temprano y uno tardío, "3 pliegues" reparte temprano/medio/tardío —cada nivel de fidelidad, incluso el más barato, muestrea a través de todo el calendario. El proxy barato es una vista gruesa del periodo completo, nunca una vista nítida de un segmento de él. Ese intercalado es lo que hace que la fidelidad basada en pliegues sea meramente ruidosa (curable por la puerta) en lugar de sesgada (lo cual ninguna puerta puede arreglar —una ρ alta contra un objetivo sesgado solo certifica que vas a elegir de forma fiable la configuración ajustada al régimen). Si tu única manera de abaratar una fidelidad es hacerla más reciente, no tienes una fidelidad válida. En su lugar, hazla más gruesa.
La resolución como el eje barato honesto
El otro eje barato evita el sesgo por completo, y es el socio natural de la profundización adaptativa que describimos para la simulación de ejecución: la resolución de velas. Filtra todo el espacio en barras de 1 hora, asciende a los supervivientes a 1 minuto, y profundiza a 1 segundo o a operaciones en bruto solo para el puñado de finalistas. Velas más gruesas sobre el mismo historial completo son más baratas de evaluar —menos barras, pasadas de indicadores más rápidas, simulación más rápida— y, a diferencia de una ventana más corta, una vista gruesa de todo el calendario está insesgada: ve todos los regímenes, solo con menos detalle intrabarra.
La resolución y los pliegues son ejes de fidelidad complementarios, y la puerta de fidelidad se aplica a ambos. Antes de confiar en un filtrado de 1 hora, ejecuta la misma sonda: toma ~200 configuraciones, puntúalas a 1h y a 1m, y mide la correlación de rango. Si ρ(1h, 1m) es alta, filtrar en horas es seguro y has comprado honestamente una gran aceleración. Si es baja —lo cual ocurre cuando la ventaja de la estrategia vive en estructura intrabarra que las velas horarias difuminan— entonces el filtrado horario es un filtro aleatorio para esa estrategia, y la puerta te dice que empieces más fino. La regla nunca cambia: solo se te permite podar en una fidelidad después de haber medido que su clasificación concuerda con la verdad.
Los dos ejes también fallan de maneras opuestas, lo cual es útil. La resolución gruesa pierde información intrabarra; menos pliegues pierden información entre regímenes. Una estrategia de momentum en horizontes diarios puede clasificar perfectamente en velas horarias pero necesitar muchos pliegues para promediar la suerte del régimen; una estrategia de scalping puede clasificar bien con pocos pliegues pero desmoronarse por encima de la resolución de 1 segundo. La puerta, ejecutada por eje, te dice en qué fidelidad te puedes permitir ser barato para esta estrategia —en lugar de asumir una respuesta que resulta ser conveniente.
De dónde vienen en realidad los ahorros
Una advertencia que mantiene honesta a la profundización progresiva: una fidelidad solo ahorra cómputo donde realmente vive el costo. En nuestro motor multi-timeframe, la parte costosa es precalcular los indicadores —la HMA multi-timeframe y las señales de separación— lo cual se paga una vez por configuración, antes de que se ejecute cualquier pliegue. La simulación por pliegue sobre las señales en caché es comparativamente barata. Así que podar según el número de pliegues solo ahorra el costo de simulación, no el costo de indicadores que domina; la fidelidad basada en pliegues es real pero su techo es más bajo de lo que sugiere la proporción bruta de pliegues.
El eje de resolución, en cambio, ataca directamente el costo dominante: velas más gruesas significan menos barras sobre las cuales calcular indicadores, así que tanto el precálculo costoso como la simulación barata se reducen juntos. Esto no es un detalle: decide qué profundización progresiva vale la pena construir. Antes de invertir en una búsqueda multi-fidelidad, pregúntate adónde van tus segundos. Si el 90% es precálculo de indicadores compartido entre pliegues, una fidelidad basada en pliegues te compra poco y una fidelidad de resolución te compra mucho. Perfila primero; el eje barato correcto es el que elimina el costo que realmente tienes, y aun así debe superar la puerta.
Dónde encaja esto
La puerta de fidelidad se sitúa en un punto específico de la cadena de higiene de backtesting de esta serie:
- Está corriente arriba del control de sobreajuste. Una profundización progresiva que poda sobre un proxy malo es una nueva manera de sobreajustar —estás dejando que un escalón temprano y ruidoso seleccione a tus finalistas. El campeón todavía tiene que sobrevivir a Deflated Sharpe y PBO, y el recuento de pruebas que alimenta esas puertas debe incluir cada prueba podada, no solo a los supervivientes —podar no exime a una prueba del registro de pruebas múltiples.
- Comparte su enemigo con el análisis de meseta: una configuración que gana en un pliegue o una ventana de filtrado y en ningún otro lugar es el mismo artefacto de ajuste al régimen que ambas herramientas existen para rechazar. La puerta se niega a seleccionar sobre un pliegue así; el análisis de meseta se niega a confiar en un campeón que se sostiene sobre uno solo.
- Presupone debajo la honesta división walk-forward —pliegues que abarcan todo el calendario, con el out-of-sample reservado aparte— y es el complemento en tiempo de búsqueda de la profundización progresiva que construimos para la simulación de ejecución: el mismo principio de grueso a fino, aplicado a qué configuraciones evaluar en lugar de a con qué precisión ejecutarlas.
- Y depende absolutamente de que la fidelidad esté libre de fugas en cada escalón. Si el escalón barato tiene sesgo de anticipación que le falta al costoso, ρ mide el acuerdo con un objetivo contaminado y la puerta certifica una fuga. Mide la correlación de rango, sí —pero sobre un objetivo honesto.
La idea unificadora, de nuevo, es la que esta serie no dejará de repetir: un backtest es un experimento estadístico, y cada atajo en él es una hipótesis que estás obligado a poner a prueba. La hipótesis de la profundización progresiva es "clasificación barata ≈ clasificación costosa". Es comprobable en ~200 configuraciones. Compruébala.
Conclusiones
- La búsqueda de grueso a fino descansa sobre una suposición: el proxy barato clasifica las configuraciones igual que el costoso. No el mismo valor —la misma clasificación. Si la correlación de rango es baja, la poda agresiva descarta a tus futuros ganadores y asciende al ruido. Buscas más rápido hacia una peor respuesta.
- Mídela antes de confiar en ella. Extrae ~200 configuraciones aleatorias, puntúalas en cada escalón de fidelidad, y calcula la ρ de Spearman entre cada escalón barato y la clasificación de fidelidad completa. Son un par de docenas de líneas y una sonda barata.
- Un solo pliegue clasifica casi al azar. Medimos ρ@1 desde 0.03 (cara o cruz) hasta 0.43 (todavía por debajo de la confianza) según el régimen; sube a 0.67, 0.78, 0.82 y 0.91 a medida que se acumulan los pliegues. El
min_resource = 1por defecto de cualquier ASHA lista para usar es, para un backtest, generalmente equivocado. - Eleva automáticamente la fidelidad mínima al primer escalón donde ρ ≥ 0.5, y si ninguno la supera, no podes en absoluto. La puerta se convirtió en
min_resource = 2para una configuración y en3para una más difícil; el respaldo degrada con elegancia a una búsqueda de fidelidad completa. La corrección cuesta algo de aceleración —págala. - Elige el eje barato según si está sesgado, no según si es barato. Un historial más corto está sesgado —selecciona parámetros ajustados al régimen y ningún tamaño de muestra lo arregla. Usa menos pliegues que abarquen todo el calendario (intercalados, no contiguos) o una resolución más gruesa sobre el periodo completo. Y gasta el eje barato donde realmente vive tu costo.
La profundización progresiva es una de las mejores aceleraciones en backtesting, y una de las más fáciles de convertir en una manera más rápida de engañarte a ti mismo. La diferencia entre ambas es un único número que puedes medir antes de que empiece la búsqueda. Si tu proxy no puede demostrar que clasifica como la verdad, no es un proxy —es un generador de números aleatorios con un perfil de costo verosímil.
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.