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

O Portão de Fidelidade: o Backtest do Grosseiro ao Fino Engana Você Mais Rápido, a Menos que o Proxy Barato Classifique Como o Caro

O Portão de Fidelidade: o Backtest do Grosseiro ao Fino Engana Você Mais Rápido, a Menos que o Proxy Barato Classifique Como o Caro

A busca drill-down / multi-fidelidade (ASHA, eliminação sucessiva, Hyperband) filtra milhares de configs de forma barata e promove apenas os sobreviventes para a avaliação completa e cara. É um ganho de velocidade genuíno — mas colapsa silenciosamente se a classificação de baixa fidelidade discordar da de alta fidelidade. Medimos a correlação de ranking por dobra: em uma dobra, o ρ de Spearman pode ser 0.03 (classifica quase aleatoriamente), subindo para 0.43, 0.67, 0.78, 0.91 à medida que as dobras se acumulam. A correção é um portão obrigatório — meça ρ(barato, completo) primeiro, e eleve automaticamente a fidelidade mínima para o primeiro degrau em que ρ ≥ 0.5.

Busca Aleatória vs. Busca Inteligente: o Cruzamento é o Custo de Avaliação, Não o Algoritmo

Busca Aleatória vs. Busca Inteligente: o Cruzamento é o Custo de Avaliação, Não o Algoritmo

Quando um backtest é barato, o Sobol embaralhado e burro vence em throughput bruto — samplers inteligentes (TPE, CMA-ES, ASHA) pagam uma taxa de ask/tell em Python que os derruba em 20x, fazendo com que avaliem muito menos pontos no mesmo tempo de relógio e percam. Torne cada avaliação cara (multi-TF + folds de walk-forward) e o cruzamento se inverte. Medimos os dois regimes, e por que a fidelidade de rank por fold (ρ@1 subindo de 0.03→0.43) é a pré-condição para que o pruning valha a pena.

O espaço de parâmetros de dois eixos: por que a maior parte do seu sweep deveria ser quase gratuita

O espaço de parâmetros de dois eixos: por que a maior parte do seu sweep deveria ser quase gratuita

Nem todos os parâmetros custam o mesmo para pesquisar. Os parâmetros de uma estratégia dividem-se num eixo caro (indicadores — recalculados sobre toda a série) e num eixo barato (limiares de decisão — uma passagem O(n) sobre sinais pré-calculados). Como os indicadores são invariantes aos limiares, calculam-se uma vez e percorrem-se milhares de configurações de limiares a ~5.600 cfg/s — cerca de 1.600 vezes mais barato do que recalcular por configuração. Uma reavaliação do custo da maldição da dimensionalidade.

O imposto do framework: quando sua biblioteca de backtest é mais lenta que um loop ingênuo de pandas

O imposto do framework: quando sua biblioteca de backtest é mais lenta que um loop ingênuo de pandas

Comparamos oito motores de backtest em uma mesma varredura de parâmetros idêntica — 150k barras, 80 combinações de cruzamento de HMA, com a paridade de número de operações travada em 2707. Dois dos frameworks orientados a eventos mais populares ficaram mais lentos que um loop de pandas escrito à mão, enquanto um motor vetorizado/compilado rodou o mesmo trabalho cerca de 13,000× mais rápido. Um estudo sobre a sobrecarga por barra que as bibliotecas populares nunca foram feitas para amortizar.

The Probability of Backtest Overfitting: Did Your Search Beat a Coin Flip?

The Probability of Backtest Overfitting: Did Your Search Beat a Coin Flip?

The Deflated Sharpe Ratio prices the winning strategy; PBO prices the search that picked it. Combinatorially Symmetric Cross-Validation runs C(16,8) = 12,870 train/test splits over a 1000x200 performance matrix and asks: does the in-sample winner land in the bottom half out of sample? The catch almost everyone misses — PBO's null is 0.5, not 1. On 200 zero-edge strategies the best in-sample annualized Sharpe of 1.98 collapses to 0.06 out of sample and PBO = 0.476: a coin flip, fully overfit. Plant a real edge (annualized Sharpe 2.38) and PBO drops to 0.001, the in-sample 3.73 surviving to an out-of-sample 2.34. A moving-average grid on a pure random walk has no out-of-sample skill either — PBO 0.463 averaged over 60 matrices, statistically indistinguishable from the null — and on one representative matrix the mirage is vivid: a best in-sample Sharpe of 2.33 collapses to a median out-of-sample -0.22, PBO 0.573, a 63% chance of a loss.

O imposto IPC: coloque o motor de backtest atrás de um socket e perca 13% — quase nada disso é do socket

O imposto IPC: coloque o motor de backtest atrás de um socket e perca 13% — quase nada disso é do socket

Portamos um kernel de backtest numba linha por linha para Rust e o chamamos através de uma fronteira de processo de quatro formas, com um portão de equivalência confirmando PnL idêntico até a última operação. Enviar toda a série de preços de 1,2 MB por um socket Unix custa ~2 ms — cerca de 0,1% do trabalho. Codificar o mesmo payload em JSON custa 1348x mais que bytes brutos, chamadas tagarelas por combinação reenviam os dados 80 vezes, e um padrão de chamada por barra pagaria 2,1 s de IPC pura em um trabalho de 2,0 s. A fronteira é barata; o imposto está em como você a atravessa.

O Deflated Sharpe Ratio: Quantos dos seus 'vencedores' de backtest sobrevivem ao multiple testing?

O Deflated Sharpe Ratio: Quantos dos seus 'vencedores' de backtest sobrevivem ao multiple testing?

Uma busca de parâmetros é uma máquina de fabricar sorte. Em ruído puro — 1.000 estratégias com zero de edge real — o melhor Sharpe anualizado tem média de 1,63 e o teste de significância ingênuo aponta uma descoberta em 100% das vezes. Construímos uma verdade fundamental controlada e mostramos que o Deflated Sharpe Ratio, o haircut de Harvey-Liu e o Reality Check de White restauram a honestidade: os falsos positivos caem de 1,000 para 0,001-0,057, edges genuínos acima do teto de ruído são mantidos com poder ~1 — e uma armadilha real (grids correlacionados) onde o DSR bruto deflaciona em excesso e o veredito precisa ser lido em toda uma faixa de estimativas de trials efetivos, não em um único número.

Design da função objetivo: a métrica que você otimiza escolhe secretamente sua estratégia

Design da função objetivo: a métrica que você otimiza escolhe secretamente sua estratégia

Para buscar a 'melhor' estratégia é preciso primeiro definir 'melhor' — e esse escalar escolhe o vencedor em silêncio. Em dados sintéticos com um edge conhecido (600 seeds, T=2000, 80 limiares), um Sharpe por trade ingênuo coroa uma loteria: escolhe um vencedor com menos de 5% de exposição em 56% das seeds e degenera em 57% — na seed mais extrema, 8 trades produzem um Sharpe in-sample de 21.09 que desaba para 0.13 fora da amostra. O conserto honesto é quase entediante: medir na linha do tempo completa, que nunca degenera (out-of-sample 1.71). Um shrinkage por número de trades (conf_k) e um piso de exposição podem remendar uma métrica por trade, mas mesmo totalmente corrigidos eles apenas igualam o Sharpe de linha do tempo completa (1.70 contra 1.71) — nunca o superam. A lei de Goodhart, num backtest, com verdade fundamental controlada.

Look-Ahead Bias: como um erro de uma vela fabrica um Sharpe de 15 a partir de puro ruído

Look-Ahead Bias: como um erro de uma vela fabrica um Sharpe de 15 a partir de puro ruído

Um estudo controlado das sutis fugas de look-ahead que inflam silenciosamente os backtests. Sem nenhum edge real, uma execução na mesma vela fabrica um Sharpe anualizado de +14,8 a partir de puro ruído; uma espiada de um indicador uma vela à frente, +4,8. A taxonomia, as magnitudes medidas e como detectar cada fuga antes que ela lhe custe dinheiro.

A Escada de Velocidade do Backtest: 298x em uma CPU de Laptop, PnL Idêntico Até o Último Trade

A Escada de Velocidade do Backtest: 298x em uma CPU de Laptop, PnL Idêntico Até o Último Trade

Cinco implementações do mesmo sweep de 80 combinações de parâmetros, todas verificadas para produzir PnL idêntico: pandas rolling.apply leva 69,9 segundos, numpy 3,1, numba 2,0, numba paralelo 0,23 — um speedup medido de 298x em um Apple M2 Max sem nenhuma mudança de hardware, e ainda assim ~13x sobre uma baseline vetorizada competente. O que cada degrau compra, por que a GPU não é a peça que falta, e onde realmente está o gargalo na busca massiva 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 do Claude Code que constroem uma proposta a prova de golpe para investidores

algo-investor-skills: Skills do Claude Code que constroem uma proposta a prova de golpe para investidores

Um olhar aprofundado sobre algo-investor-skills — um conjunto de skills do Claude Code que levam uma estratégia de algotrading de fatos brutos medidos a uma proposta de investidor auditada e voltada para a honestidade. Seis skills combináveis, um motor de modelos financeiros, um pacote de prova de verificação independente e um portão de auditoria obrigatório por um investidor cético que nunca fabrica um número.