Eugen Soloviov

Eugen Soloviov

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.

Articles

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

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

La búsqueda de profundización progresiva / multi-fidelidad (ASHA, eliminación sucesiva, Hyperband) filtra miles de configuraciones de forma barata y solo asciende a los supervivientes a la evaluación completa y costosa. Es una aceleración genuina, pero colapsa en silencio si la clasificación de baja fidelidad no coincide con la de alta fidelidad. Medimos la correlación de rango entre pliegues: en un solo pliegue, la ρ de Spearman puede ser 0.03 (clasifica casi al azar), subiendo a 0.43, 0.67, 0.78, 0.91 a medida que se acumulan los pliegues. La solución es una puerta obligatoria: medir primero ρ(barato, completo) y elevar automáticamente la fidelidad mínima hasta el primer escalón donde ρ ≥ 0.5.

Búsqueda aleatoria vs. inteligente: el cruce es el costo de evaluación, no el algoritmo

Búsqueda aleatoria vs. inteligente: el cruce es el costo de evaluación, no el algoritmo

Cuando un backtest es barato, un Sobol scrambled y tonto gana en throughput puro — los samplers inteligentes (TPE, CMA-ES, ASHA) pagan un impuesto de ask/tell en Python que los frena 20 veces, por lo que evalúan muchos menos puntos al mismo wall-clock y pierden. Haz que cada evaluación sea costosa (multi-TF + folds de walk-forward) y el cruce se invierte. Medimos ambos regímenes, y por qué la fidelidad de rank por fold (ρ@1 subiendo 0.03→0.43) es la condición previa para que el pruning valga la pena.

El espacio de parámetros de dos ejes: por qué la mayor parte de tu barrido debería ser casi gratis

El espacio de parámetros de dos ejes: por qué la mayor parte de tu barrido debería ser casi gratis

No todos los parámetros cuestan lo mismo al buscar. Los parámetros de una estrategia se dividen en un eje costoso (indicadores, recalculados sobre toda la serie) y un eje barato (umbrales de decisión, un recorrido O(n) sobre señales precalculadas). Como los indicadores son invariantes a los umbrales, los calculas una vez y barres miles de configuraciones de umbrales a ~5.600 cfg/s, aproximadamente 1.600 veces más barato que recalcular por configuración. Una re-tasación de la maldición de la dimensionalidad.

El impuesto del framework: cuando tu librería de backtest es más lenta que un bucle ingenuo de pandas

El impuesto del framework: cuando tu librería de backtest es más lenta que un bucle ingenuo de pandas

Comparamos ocho motores de backtest en un mismo barrido de parámetros idéntico: 150k barras, 80 combinaciones de cruce de HMA, con la paridad de número de operaciones fijada en 2707. Dos de los frameworks orientados a eventos más populares resultaron más lentos que un bucle de pandas escrito a mano, mientras que un motor vectorizado/compilado ejecutó el mismo trabajo unas 13,000× más rápido. Un estudio de la sobrecarga por barra que las librerías populares nunca fueron diseñadas para amortizar.

La Probability of Backtest Overfitting: ¿superó su búsqueda a una moneda al aire?

La Probability of Backtest Overfitting: ¿superó su búsqueda a una moneda al aire?

El Deflated Sharpe Ratio evalúa la estrategia ganadora; PBO evalúa la búsqueda que la eligió. Combinatorially Symmetric Cross-Validation ejecuta C(16,8) = 12.870 divisiones train/test sobre una matriz de rendimiento de 1000x200 y pregunta: ¿el ganador in-sample cae en la mitad inferior fuera de muestra? La trampa que casi todos pasan por alto: el valor nulo de PBO es 0.5, no 1. En 200 estrategias sin edge, el mejor Sharpe anualizado in-sample de 1.98 colapsa a 0.06 fuera de muestra y PBO = 0.476: una moneda al aire, sobreajuste total. Plante un edge real (Sharpe anualizado 2.38) y PBO cae a 0.001, con el 3.73 in-sample sobreviviendo a un 2.34 fuera de muestra. Una grilla de medias móviles sobre un paseo aleatorio puro tampoco tiene habilidad fuera de muestra —PBO 0.463 promediado en 60 matrices, estadísticamente indistinguible del nulo— y en una matriz representativa el espejismo es evidente: un mejor Sharpe in-sample de 2.33 colapsa a una mediana fuera de muestra de -0.22, PBO 0.573, un 63% de probabilidad de pérdida.

El impuesto IPC: pon el motor de backtesting detrás de un socket y pierde un 13% — casi nada de eso es del socket

El impuesto IPC: pon el motor de backtesting detrás de un socket y pierde un 13% — casi nada de eso es del socket

Portamos un kernel de backtesting de numba línea por línea a Rust y lo llamamos a través de un límite de proceso de cuatro formas, con una puerta de equivalencia que confirma un PnL idéntico hasta el último trade. Enviar toda la serie de precios de 1.2 MB por un socket Unix cuesta ~2 ms — alrededor del 0.1% del trabajo. Codificar el mismo payload en JSON cuesta 1348 veces más que los bytes crudos, las llamadas charlatanas por combinación reenvían los datos 80 veces, y un patrón de llamada por barra pagaría 2.1 s de IPC pura en un trabajo de 2.0 s. El límite es barato; el impuesto está en cómo lo cruzas.

El Deflated Sharpe Ratio: ¿Cuántos de los 'ganadores' de tu backtest sobreviven al multiple testing?

El Deflated Sharpe Ratio: ¿Cuántos de los 'ganadores' de tu backtest sobreviven al multiple testing?

Una búsqueda de parámetros es una máquina para fabricar suerte. Sobre ruido puro — 1.000 estrategias con cero edge real — el mejor Sharpe anualizado promedia 1,63 y el test de significancia ingenuo marca un descubrimiento el 100% de las veces. Construimos una verdad de referencia controlada y mostramos que el Deflated Sharpe Ratio, el recorte de Harvey-Liu y el Reality Check de White restauran la honestidad: los falsos descubrimientos caen de 1,000 a 0,001-0,057, los edges genuinos por encima del techo de ruido se conservan con power ~1 — y una trampa real (grids correlacionados) donde el DSR crudo sobre-deflaciona y el veredicto debe leerse a través de toda una banda de estimaciones de trials efectivos, no de una sola.

Diseño de la función objetivo: la métrica que optimizas elige en secreto tu estrategia

Diseño de la función objetivo: la métrica que optimizas elige en secreto tu estrategia

Para buscar la 'mejor' estrategia primero hay que definir 'mejor' — y ese escalar elige el ganador en silencio. Con datos sintéticos y un edge conocido (600 semillas, T=2000, 80 umbrales), un Sharpe por operación ingenuo corona una lotería: elige un ganador con menos del 5% de exposición en el 56% de las semillas y degenera en el 57% — en la semilla más extrema, 8 operaciones producen un Sharpe in-sample de 21.09 que colapsa a 0.13 fuera de muestra. La reparación honesta es casi aburrida: medir en la línea temporal completa, que nunca degenera (fuera de muestra 1.71). Un shrinkage por número de operaciones (conf_k) y un piso de exposición pueden reparar una métrica por operación, pero incluso totalmente corregidos solo igualan al Sharpe de línea temporal completa (1.70 frente a 1.71) — nunca lo superan. La ley de Goodhart, en un backtest, con verdad de base controlada.

Look-Ahead Bias: cómo un error de una vela fabrica un Sharpe de 15 a partir de puro ruido

Look-Ahead Bias: cómo un error de una vela fabrica un Sharpe de 15 a partir de puro ruido

Un estudio controlado de las sutiles fugas de look-ahead que inflan silenciosamente los backtests. Sin ningún edge real, una ejecución en la misma vela fabrica un Sharpe anualizado de +14,8 a partir de puro ruido; un vistazo de un indicador una vela hacia adelante, +4,8. La taxonomía, las magnitudes medidas y cómo detectar cada fuga antes de que le cueste dinero.

La escalera de velocidad del backtest: 298x en la CPU de un portátil, PnL idéntico hasta la última operación

La escalera de velocidad del backtest: 298x en la CPU de un portátil, PnL idéntico hasta la última operación

Cinco implementaciones del mismo barrido de 80 combinaciones de parámetros, todas verificadas para producir el mismo PnL: pandas rolling.apply tarda 69,9 segundos, numpy 3,1, numba 2,0, numba paralelo 0,23 — una aceleración medida de 298x en un Apple M2 Max sin ningún cambio de hardware, y aun así ~13x sobre una base vectorizada competente. Qué compra cada peldaño, por qué una GPU no es la pieza que falta, y dónde vive el verdadero cuello de botella en la búsqueda masiva de parámetros.

researcher: A Searchable Quant-Research Archive for Humans and AI Agents

researcher: A Searchable Quant-Research Archive for Humans and AI Agents

How we built researcher.marketmaker.cc — a unified, full-text-searchable archive of quant research (arXiv papers, GitHub repos, quant blogs, TradingView Pine scripts) that humans browse and AI agents query over MCP.

algo-investor-skills: Skills de Claude Code que construyen una propuesta para inversores a prueba de estafas

algo-investor-skills: Skills de Claude Code que construyen una propuesta para inversores a prueba de estafas

Una mirada profunda a algo-investor-skills — un conjunto de skills de Claude Code que lleva una estrategia de algotrading desde hechos medidos en crudo hasta una propuesta para inversores auditada y orientada a la honestidad. Seis skills componibles, un motor de modelos financieros, un paquete de pruebas de verificación independiente y una puerta de auditoría obligatoria con inversor escéptico que nunca fabrica una cifra.