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.

Makaleler

Dürüst Negatif: On Binlerce Backtest, Beş Ana Coin, Sağlam Bir Getiri Yok

Dürüst Negatif: On Binlerce Backtest, Beş Ana Coin, Sağlam Bir Getiri Yok

Ara-ve-aşırı-uydur (overfit) yayının doruk noktası ve bir negatif sonuçla bitiyor — doğru olanla. ETHUSDT üzerinde tek sembollü, çift zaman dilimli bir arama, örneklem dışında +16.35% ve dokunulmamış bir holdout'ta +2.62% değerinde bir konfigürasyon buldu; ~37,000 denemeyi hesaba katan Deflated Sharpe Ratio bunu 0.00'a indirdi. Beş ana coin (ETH/BTC/SOL/BNB/XRP, her biri ~1.18M 1d bar) üzerinde, örneklem dışı medyana göre seçim yapan enstrümanlar-arası bir tarama bunu kesin olarak öldürüyor: çift DSR 0.24 / PBO 0.264, üçlü DSR 0.14 / PBO 0.327 — ikisi de kapıları geçemiyor. Şampiyon 5 sembolden 1'inde kârlı, geri kalanında negatif. Aşırı-uydurma önleme aygıtı tam da bunun için var: gürültünün en iyisini alfa diye piyasaya sürmeni engellemek için.

Çok Zaman Dilimli Backtestlerde Look-Ahead Olmadığını Kanıtlamak: Geleceği Bozun, Geçmişin Onu Göremediğini Kanıtlayın

Çok Zaman Dilimli Backtestlerde Look-Ahead Olmadığını Kanıtlamak: Geleceği Bozun, Geçmişin Onu Göremediğini Kanıtlayın

Çok zaman dilimli backtestler, henüz oluşmakta olan ve nihai kapanışı daha var olmayan bir üst zaman dilimi barı üzerinden geleceği sızdırır. Bu konuda güvene sadece kod incelemesiyle ulaşamazsınız — test etmeniz gerekir. Canlı botun closed-bar kuralını birebir yeniden üretiyor, ardından geleceği kaydıran bir probe ile sızıntı olmadığını kanıtlıyoruz: gelecekteki her barı bozup geçmişteki her sinyalin ve işlemin bit bit değişmediğini doğruluyoruz. 25/25 parite kontrolü ve probe'un gerçekten ısırığı var.

GPU Ne Zaman Karşılığını Verir: Parametre Taraması Roofline'ı — Manşetteki 167x'in Aslında 27x Algoritma Çarpı 6.2x Donanım Olduğu Yer

GPU Ne Zaman Karşılığını Verir: Parametre Taraması Roofline'ı — Manşetteki 167x'in Aslında 27x Algoritma Çarpı 6.2x Donanım Olduğu Yer

GPU'nun CPU'ya karşı üstünlüğü batch boyutuyla büyüyor — çoklu zaman dilimli gösterge ön hesaplamamızda çağrı başına tek kombinasyonda 54.5x'ten 61 kombinasyonda 359.6x'e — çünkü küçük bir tarama, kernel başlatma ve aktarım ek yükünü amorti edemiyor. Manşetlik bir 167x'i, CPU'ya da aynı şekilde yarayan 27x'lik bir algoritmik kazanç ile 6.2x'lik bir donanım kazancına ayrıştırıyoruz; gerçek GPU-en-iyi-CPU üstünlüğünün tek zaman diliminde yalnızca 3.2x, çokluda 6.2x olduğunu gösteriyoruz ve bir GPU'ya yatırım yapmaya değmesi için bir taramanın ne kadar geniş olması gerektiğine dair bir karar rehberi veriyoruz.

GPU Hassasiyet Tuzağı: Apple Metal Üzerinde fp32 Backtest Nasıl Sessizce Çöp Değerler Döndürür

GPU Hassasiyet Tuzağı: Apple Metal Üzerinde fp32 Backtest Nasıl Sessizce Çöp Değerler Döndürür

Apple'ın Metal GPU'sunda float64 yok. Vektörleştirilmiş bir backtest'i buna naif şekilde taşıyın ve cazip prefix-sum WMA fp32'yi taşırır — maksimum bağıl hata 211× — ama yine de çalışır ve makul görünen sayılar döndürür. Çözüm daha fazla hassasiyet değil; farklı bir formülasyon: doğrudan pencereli konvolüsyon, 8×10⁻⁷ hassasiyetiyle fp32-güvenli ve tek iş parçacıklı numba'dan 55.9× daha hızlı. Tuzak, aritmetik ve içine düşmediğinizi nasıl kanıtlarsınız.

Sadakat Kapısı: Ucuz Vekil, Pahalı Değerlendirmeyle Aynı Şekilde Sıralamadıkça, Kabadan İnceye Backtesting Sizi Daha Hızlı Kandırır

Sadakat Kapısı: Ucuz Vekil, Pahalı Değerlendirmeyle Aynı Şekilde Sıralamadıkça, Kabadan İnceye Backtesting Sizi Daha Hızlı Kandırır

Drill-down / çoklu sadakat araması (ASHA, successive halving, Hyperband) binlerce konfigürasyonu ucuza eler ve yalnızca hayatta kalanları pahalı tam değerlendirmeye terfi ettirir. Bu gerçek bir hızlanmadır — ama düşük sadakatli sıralama yüksek sadakatli olanla uyuşmadığında sessizce çöker. Fold-sıralama korelasyonunu ölçtük: tek fold'da Spearman ρ 0.03 olabiliyor (neredeyse rastgele sıralıyor), fold sayısı arttıkça 0.43, 0.67, 0.78, 0.91'e tırmanıyor. Çözüm tek bir zorunlu kapı — önce ρ(ucuz, tam) ölçün ve minimum sadakati ρ ≥ 0.5 olan ilk basamağa otomatik yükseltin.

Rastgele Arama'ya Karşı Akıllı Arama: Kesişme Noktası Algoritma Değil, Değerlendirme Maliyetidir

Rastgele Arama'ya Karşı Akıllı Arama: Kesişme Noktası Algoritma Değil, Değerlendirme Maliyetidir

Tek bir backtest ucuz olduğunda, aptal karıştırılmış Sobol ham verimde kazanır — akıllı örnekleyiciler (TPE, CMA-ES, ASHA) onları 20 kat geriye düşüren bir Python ask/tell vergisi öder, bu yüzden eşit duvar saatinde çok daha az nokta değerlendirir ve kaybederler. Her değerlendirmeyi maliyetli hale getirin (multi-TF + walk-forward katları) ve kesişme noktası tersine döner. Her iki rejimi de ölçtük, ve kat-sıralama sadakatinin (ρ@1'in 0.03'ten 0.43'e yükselmesi) neden budamanın karşılığını vermesi için bir ön koşul olduğunu da.

İki Eksenli Parametre Uzayı: Taramanızın Büyük Kısmı Neden Neredeyse Bedava Olmalı

İki Eksenli Parametre Uzayı: Taramanızın Büyük Kısmı Neden Neredeyse Bedava Olmalı

Tüm parametrelerin arama maliyeti aynı değildir. Bir stratejinin parametreleri pahalı bir eksene (göstergeler — tüm seri üzerinde yeniden hesaplanır) ve ucuz bir eksene (karar eşikleri — önceden hesaplanmış sinyaller üzerinde O(n) bir geçiş) ayrılır. Göstergeler eşiklerden bağımsız olduğu için onları bir kez hesaplar ve binlerce eşik konfigürasyonunu ~5,600 cfg/s hızıyla tararsınız — her konfigürasyonda yeniden hesaplamaya göre kabaca 1,600x daha ucuz. Boyutluluk lanetinin yeniden fiyatlandırılması.

Çerçeve Vergisi: Backtest Kütüphaneniz Basit Bir Pandas Döngüsünden Yavaş Olduğunda

Çerçeve Vergisi: Backtest Kütüphaneniz Basit Bir Pandas Döngüsünden Yavaş Olduğunda

Sekiz backtest motorunu tek ve aynı parametre taramasında kıyasladık — 150k bar, 80 HMA kesişim kombinasyonu, işlem sayısı paritesi 2707'de kilitlendi. En popüler olay güdümlü çerçevelerden ikisi, elle yazılmış bir pandas döngüsünden daha yavaş kaldı; buna karşın vektörleştirilmiş/derlenmiş bir motor aynı işi ~13,000× daha hızlı çalıştırdı. Popüler kütüphanelerin amorti etmek için asla tasarlanmadığı bar başına ek yükün bir incelemesi.

Backtest Aşırı Uyum Olasılığı: Aramanız Yazı Turayı Yendi mi?

Backtest Aşırı Uyum Olasılığı: Aramanız Yazı Turayı Yendi mi?

Deflate Edilmiş Sharpe Oranı kazanan stratejiyi fiyatlandırır; PBO ise onu seçen aramayı fiyatlandırır. Kombinatoryal Simetrik Çapraz Doğrulama, 1000x200'lük bir performans matrisi üzerinde C(16,8) = 12,870 eğitim/test bölünmesi çalıştırır ve şunu sorar: örnek-içi kazanan örnek-dışında alt yarıya mı düşüyor? Neredeyse herkesin kaçırdığı can alıcı nokta — PBO'nun null'u 0.5'tir, 1 değil. 200 sıfır-avantajlı strateji üzerinde en iyi örnek-içi yıllıklandırılmış Sharpe olan 1.98, örnek-dışında 0.06'ya çöküyor ve PBO = 0.476: bir yazı-tura, tam anlamıyla aşırı uyum. Gerçek bir avantaj yerleştirin (yıllıklandırılmış Sharpe 2.38) ve PBO 0.001'e düşüyor, örnek-içi 3.73 örnek-dışında 2.34'e kadar hayatta kalıyor. Saf bir rastgele yürüyüş üzerindeki bir hareketli-ortalama ızgarasının da örnek-dışı becerisi yok — 60 matris üzerinden ortalama PBO 0.463, null'dan istatistiksel olarak ayırt edilemez — ve temsili bir matriste yanılsama çarpıcı: en iyi örnek-içi Sharpe olan 2.33, medyan örnek-dışı -0.22'ye çöküyor, PBO 0.573, %63 kayıp olasılığı.

IPC Vergisi: Backtest Motorunu Bir Soketin Arkasına Koyun ve %13 Kaybedin — Kaybın Neredeyse Hiçbiri Sokete Ait Değil

IPC Vergisi: Backtest Motorunu Bir Soketin Arkasına Koyun ve %13 Kaybedin — Kaybın Neredeyse Hiçbiri Sokete Ait Değil

Bir numba backtest çekirdeğini satır satır Rust'a taşıdık ve onu bir process sınırı üzerinden dört farklı şekilde çağırdık; bir eşdeğerlik kapısı son işleme kadar aynı PnL'i doğruladı. 1.2 MB'lık fiyat serisinin tamamını bir Unix soketi üzerinden göndermek ~2 ms'ye mal oluyor — işin yaklaşık %0.1'i. Aynı payload'ı JSON ile kodlamak ham byte'lardan 1348 kat daha pahalıya mal oluyor, kombinasyon başına gevezelik eden çağrılar veriyi 80 kez yeniden gönderiyor ve bar başına bir çağrı deseni 2.0 saniyelik bir işte 2.1 saniyelik saf IPC'ye mal olurdu. Sınır ucuz; vergi onu nasıl geçtiğinizde.

Deflate Edilmiş Sharpe Oranı: Backtest 'Kazananlarınızın' Kaçı Çoklu Teste Dayanıyor?

Deflate Edilmiş Sharpe Oranı: Backtest 'Kazananlarınızın' Kaçı Çoklu Teste Dayanıyor?

Bir parametre araması, şans üretme makinesidir. Saf gürültü üzerinde — gerçek avantajı sıfır olan 1,000 strateji — en iyi yıllık Sharpe ortalama 1.63 çıkıyor ve naif anlamlılık testi vakaların %100'ünde bir keşif işaretliyor. Kontrollü bir referans gerçeklik kuruyor ve Deflate Edilmiş Sharpe Oranı'nın, Harvey-Liu kesintisinin ve White'ın Reality Check'inin dürüstlüğü nasıl geri getirdiğini gösteriyoruz: yanlış keşifler 1.000'den 0.001-0.057'ye düşüyor, gürültü tavanının üzerindeki gerçek avantajlar ~1 güçle korunuyor — ve ham DSR'nin aşırı deflasyon yaptığı, doğru yargının tek bir sayı değil etkin-deneme tahminlerinin tüm bir bandı üzerinden okunması gereken gerçek bir tuzak (korelasyonlu ızgaralar) var.

Objektif Fonksiyon Tasarımı: Optimize Ettiğiniz Metrik Stratejinizi Gizlice Seçer

Objektif Fonksiyon Tasarımı: Optimize Ettiğiniz Metrik Stratejinizi Gizlice Seçer

'En iyi' stratejiyi aramak için önce 'en iyi'yi tanımlamanız gerekir — ve o skaler kazananı sessizce seçer. Bilinen bir avantaja sahip sentetik veride (600 seed, T=2000, 80 eşik), naif işlem-başına Sharpe bir piyango kazandırır: seed'lerin %56'sında %5'in altında maruziyetli bir kazananı seçer ve %57'sinde dejenere olur — en çarpıcı seed'de, örnek-içi 21.09'luk Sharpe kaydeden 8 işlem örnek-dışında 0.13'e çöker. Dürüst çözüm neredeyse sıkıcı: tüm zaman çizelgesinde ölçün, bu hiçbir zaman dejenere olmaz (örnek-dışı 1.71). Bir işlem-sayısı (conf_k) küçültmesi ve bir maruziyet tabanı, işlem-başına bir metriği geriye dönük onarabilir, ama tamamen onarılmış olsalar bile yalnızca tüm-zaman-çizelgesi Sharpe'ını eşleyebilirler (1.70'e karşı 1.71) — asla onu geçemezler. Bir backtest'te, kontrollü referans gerçeklikle, Goodhart yasası.