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.

Artikel

Negatif yang Jujur: Puluhan Ribu Backtest, Lima Koin Utama, Tanpa Edge yang Robust

Negatif yang Jujur: Puluhan Ribu Backtest, Lima Koin Utama, Tanpa Edge yang Robust

Puncak dari rangkaian pencarian-dan-overfit, dan berakhir dengan hasil negatif — hasil yang benar. Pencarian dual-timeframe satu simbol pada ETHUSDT menemukan konfigurasi bernilai +16.35% out-of-sample dan +2.62% pada holdout yang belum tersentuh; Deflated Sharpe Ratio, dengan memperhitungkan ~37,000 trial, mendeflasinya menjadi 0.00. Lintasan lintas-instrumen atas lima koin utama (ETH/BTC/SOL/BNB/XRP, masing-masing ~1.18 juta bar 1 menit), diseleksi berdasarkan median out-of-sample, membunuhnya untuk selamanya: DSR dual 0.24 / PBO 0.264, DSR triple 0.14 / PBO 0.327 — keduanya gagal gate. Sang juara profitabel pada 1 dari 5 simbol dan negatif pada sisanya. Inilah tujuan aparatus anti-overfit: mencegah Anda mengirimkan yang terbaik dari noise sebagai alpha.

Membuktikan Tidak Ada Look-Ahead pada Backtest Multi-Timeframe: Ganggu Masa Depan, Buktikan Masa Lalu Tidak Bisa Melihatnya

Membuktikan Tidak Ada Look-Ahead pada Backtest Multi-Timeframe: Ganggu Masa Depan, Buktikan Masa Lalu Tidak Bisa Melihatnya

Backtest multi-timeframe membocorkan masa depan lewat bar timeframe lebih tinggi yang sedang terbentuk, yang close akhirnya belum ada. Anda tidak bisa meraih keyakinan hanya lewat code review — Anda harus mengujinya. Kami mereproduksi persis aturan closed-bar milik bot live, lalu membuktikan tidak ada kebocoran dengan probe shifted-future: mengganggu setiap bar masa depan dan memastikan setiap sinyal serta trade di masa lalu tidak berubah sama sekali (bitwise unchanged). 25/25 pemeriksaan parity lolos, dan probe ini punya taring.

Kapan GPU Terbayar: Roofline Sweep Parameter, di Mana Headline 167x Sebenarnya adalah 27x Algoritma Kali 6.2x Hardware

Kapan GPU Terbayar: Roofline Sweep Parameter, di Mana Headline 167x Sebenarnya adalah 27x Algoritma Kali 6.2x Hardware

Keunggulan GPU atas CPU tumbuh seiring ukuran batch — 54.5x pada satu kombo per panggilan hingga 359.6x pada 61 di precompute indikator multi-timeframe kami — karena sweep kecil tidak bisa mengamortisasi overhead peluncuran kernel dan transfer. Kami mengurai headline 167x menjadi kemenangan algoritmik 27x yang juga membantu CPU kali kemenangan hardware 6.2x, menunjukkan bahwa keunggulan sejati GPU-vs-CPU-terbaik hanya 3.2x untuk single-timeframe dan 6.2x untuk multi, dan memberikan panduan keputusan seberapa lebar sweep yang dibutuhkan sebelum GPU layak dibeli.

Jebakan Presisi GPU: Bagaimana Backtest fp32 di Apple Metal Diam-Diam Mengembalikan Sampah

Jebakan Presisi GPU: Bagaimana Backtest fp32 di Apple Metal Diam-Diam Mengembalikan Sampah

GPU Metal dari Apple tidak memiliki float64. Porting backtest tervektorisasi ke sana secara naif dan trik prefix-sum WMA yang menggoda akan overflow di fp32 — kesalahan relatif maksimum 211× — namun ia tetap berjalan dan mengembalikan angka yang tampak masuk akal. Solusinya bukan presisi yang lebih tinggi; melainkan formulasi yang berbeda: konvolusi berjendela langsung, aman di fp32 hingga 8×10⁻⁷ dan 55,9× lebih cepat daripada numba single-thread. Jebakannya, aritmetikanya, dan cara membuktikan bahwa Anda tidak terjebak di dalamnya.

Fidelity Gate: Backtesting Coarse-to-Fine Menipu Anda Lebih Cepat, Kecuali Proxy Murah Memberi Peringkat yang Sama dengan yang Mahal

Fidelity Gate: Backtesting Coarse-to-Fine Menipu Anda Lebih Cepat, Kecuali Proxy Murah Memberi Peringkat yang Sama dengan yang Mahal

Pencarian drill-down / multi-fidelitas (ASHA, successive halving, Hyperband) menyaring ribuan konfigurasi secara murah dan hanya mempromosikan yang bertahan ke evaluasi penuh yang mahal. Ini adalah percepatan yang nyata — tetapi runtuh secara diam-diam jika peringkat fidelity rendah tidak sesuai dengan peringkat fidelity tinggi. Kami mengukur korelasi peringkat antar-fold: pada satu fold, Spearman ρ bisa hanya 0.03 (mengurutkan hampir secara acak), lalu naik menjadi 0.43, 0.67, 0.78, 0.91 seiring bertambahnya fold. Solusinya adalah satu gate wajib — ukur ρ(murah, penuh) terlebih dahulu, lalu naikkan otomatis fidelity minimum ke rung pertama di mana ρ ≥ 0.5.

Random vs Smart Search: Titik Crossover Ada di Biaya Evaluasi, Bukan Algoritma

Random vs Smart Search: Titik Crossover Ada di Biaya Evaluasi, Bukan Algoritma

Ketika satu backtest murah, scrambled Sobol yang 'bodoh' menang telak dalam throughput mentah — sampler pintar (TPE, CMA-ES, ASHA) membayar pajak ask/tell Python yang menurunkan kecepatannya 20x, sehingga mereka mengevaluasi jauh lebih sedikit titik pada wall-clock yang sama dan kalah. Buat setiap evaluasi menjadi mahal (multi-TF + fold walk-forward) dan titik crossover-nya berbalik. Kami mengukur kedua rezim ini, dan mengapa fidelity fold-rank (ρ@1 naik dari 0.03→0.43) menjadi prasyarat agar pruning membuahkan hasil.

Ruang Parameter Dua Sumbu: Mengapa Sebagian Besar Sweep Anda Seharusnya Nyaris Gratis

Ruang Parameter Dua Sumbu: Mengapa Sebagian Besar Sweep Anda Seharusnya Nyaris Gratis

Tidak semua parameter sama mahalnya untuk dicari. Parameter sebuah strategi terbelah menjadi sumbu mahal (indikator — dihitung ulang atas seluruh deret) dan sumbu murah (ambang keputusan — satu lintasan O(n) atas sinyal yang sudah dihitung sebelumnya). Karena indikator invarian terhadap ambang, Anda menghitungnya sekali lalu menyisir ribuan konfigurasi ambang pada ~5,600 cfg/s — kira-kira 1,600x lebih murah dibanding menghitung ulang per konfigurasi. Sebuah penaksiran ulang harga kutukan dimensionalitas.

Pajak Framework: Saat Library Backtest Anda Lebih Lambat daripada Loop Pandas yang Naif

Pajak Framework: Saat Library Backtest Anda Lebih Lambat daripada Loop Pandas yang Naif

Kami membandingkan delapan mesin backtest pada satu parameter sweep yang identik — 150 ribu bar, 80 kombinasi HMA-cross, paritas jumlah trade dikunci di 2707. Dua framework event-driven paling populer ternyata lebih lambat daripada loop pandas buatan tangan, sementara mesin vectorized/compiled menjalankan pekerjaan yang sama ~13.000× lebih cepat. Sebuah kajian tentang overhead per-bar yang memang tidak pernah dirancang untuk diamortisasi oleh library-library populer.

Probability of Backtest Overfitting: Apakah Pencarian Anda Mengalahkan Lemparan Koin?

Probability of Backtest Overfitting: Apakah Pencarian Anda Mengalahkan Lemparan Koin?

Deflated Sharpe Ratio memberi harga pada strategi pemenang; PBO memberi harga pada pencarian yang memilihnya. Combinatorially Symmetric Cross-Validation menjalankan C(16,8) = 12,870 pemisahan train/test di atas matriks performa 1000x200 dan bertanya: apakah pemenang in-sample mendarat di separuh bawah out of sample? Jebakan yang hampir semua orang lewatkan — null PBO adalah 0.5, bukan 1. Pada 200 strategi ber-edge nol, Sharpe tahunan in-sample terbaik sebesar 1.98 runtuh menjadi 0.06 out of sample dan PBO = 0.476: sebuah lemparan koin, sepenuhnya overfit. Tanamkan edge nyata (Sharpe tahunan 2.38) dan PBO turun ke 0.001, angka in-sample 3.73 bertahan menjadi 2.34 out of sample. Grid moving-average pada random walk murni juga tidak memiliki skill out-of-sample — PBO 0.463 dirata-ratakan atas 60 matriks, secara statistik tak terbedakan dari null — dan pada satu matriks representatif fatamorgananya jelas: Sharpe in-sample terbaik sebesar 2.33 runtuh menjadi median out-of-sample -0.22, PBO 0.573, peluang 63% mengalami kerugian.

Pajak IPC: Taruh Engine Backtest di Balik Socket dan Rugi 13% — Nyaris Tak Ada yang Disebabkan oleh Socket-nya

Pajak IPC: Taruh Engine Backtest di Balik Socket dan Rugi 13% — Nyaris Tak Ada yang Disebabkan oleh Socket-nya

Kami mem-port kernel backtest numba baris demi baris ke Rust dan memanggilnya lintas batas proses dengan empat cara, dengan gerbang ekuivalensi yang mengonfirmasi PnL identik hingga transaksi terakhir. Mengirim seluruh seri harga 1.2 MB melalui Unix socket berbiaya ~2 ms — sekitar 0.1% dari total pekerjaan. Meng-encode payload yang sama sebagai JSON berbiaya 1348x lebih mahal daripada raw bytes, panggilan chatty per-kombo mengirim ulang data 80 kali, dan pola panggilan per-bar akan membayar 2.1 s IPC murni pada pekerjaan 2.0 s. Batasnya murah; pajaknya ada pada cara Anda menyeberanginya.

Deflated Sharpe Ratio: Berapa Banyak 'Pemenang' Backtest Anda yang Selamat dari Multiple Testing?

Deflated Sharpe Ratio: Berapa Banyak 'Pemenang' Backtest Anda yang Selamat dari Multiple Testing?

Pencarian parameter adalah mesin pembuat keberuntungan. Pada noise murni — 1,000 strategi dengan edge sejati nol — Sharpe tahunan terbaik rata-rata 1.63 dan uji signifikansi naif menandai penemuan 100% dari waktu. Kami membangun ground truth terkontrol dan menunjukkan bahwa Deflated Sharpe Ratio, haircut Harvey-Liu, dan Reality Check milik White memulihkan kejujuran: penemuan palsu turun dari 1.000 menjadi 0.001-0.057, edge sejati di atas plafon noise dipertahankan dengan power ~1 — dan satu jebakan nyata (grid berkorelasi) di mana DSR mentah over-deflate dan vonisnya harus dibaca melintasi seluruh rentang estimator effective-trial, bukan satu angka saja.

Objective-Function Design: Metrik yang Anda Optimalkan Diam-Diam Memilih Strategi Anda

Objective-Function Design: Metrik yang Anda Optimalkan Diam-Diam Memilih Strategi Anda

Untuk mencari strategi 'terbaik' Anda harus lebih dulu mendefinisikan 'terbaik' — dan skalar itu diam-diam memilih pemenangnya. Pada data sintetis dengan edge yang diketahui (600 seed, T=2000, 80 threshold), per-trade Sharpe yang naif menobatkan sebuah lotre: ia memilih pemenang ber-eksposur di bawah 5% pada 56% seed dan berdegenerasi pada 57% — pada seed paling ekstrem, 8 trade mencetak Sharpe in-sample 21.09 yang runtuh menjadi 0.13 out-of-sample. Perbaikan yang jujur nyaris membosankan: ukur pada seluruh timeline, yang tidak pernah berdegenerasi (out-of-sample 1.71). Shrinkage jumlah-trade (conf_k) dan sebuah exposure floor bisa merombak metrik per-trade, tetapi bahkan setelah sepenuhnya diperbaiki keduanya hanya menyamai full-timeline Sharpe (1.70 vs 1.71) — tidak pernah mengalahkannya. Hukum Goodhart, dalam sebuah backtest, dengan ground truth terkontrol.