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

TWAP пен VWAP және POV: орындау бенчмаркін таңдау (әрқайсысы қашан алдайтынын білу)

TWAP пен VWAP және POV: орындау бенчмаркін таңдау (әрқайсысы қашан алдайтынын білу)

TWAP, VWAP және POV — көлем болжамына жасалған бәс. Біз әрбір жоспарлаушының жасырын болжамдарын талдаймыз, криптоның күн ішіндегі көлем қисықтарын құрамыз және үшеуін де қайта ойнатылған L2 деректерінде бас-басына сынаймыз.

Almgren-Chriss моделі түсінікті тілмен: бір түскі уақытта іске асыруға болатын оңтайлы орындау

Almgren-Chriss моделі түсінікті тілмен: бір түскі уақытта іске асыруға болатын оңтайлы орындау

Almgren-Chriss оңтайлы орындау моделінің толық шығарылымы: сызықтық әсер, sinh/cosh траекториясы, тиімді шекара және Binance L2 мен сауда деректерінен eta, gamma, sigma параметрлерін калибрлеуге арналған жұмыс істейтін Python коды.

Адал теріс нәтиже: ондаған мың бэктест, бес мажор, робастты эдж жоқ

Адал теріс нәтиже: ондаған мың бэктест, бес мажор, робастты эдж жоқ

Іздеу мен оверфиттинг желісінің қорытынды мақаласы, және ол теріс нәтижемен аяқталады — дұрыс нәтижемен. ETHUSDT бойынша бір символды, қос таймфреймді іздеу іріктемеден тыс +16.35% және қол тигізілмеген холдаутта +2.62% беретін конфигурация тапты; ~37,000 сынақты ескеретін Дефляцияланған Шарп коэффициенті оны 0.00-ге дейін дефляциялады. Бес мажор бойынша (ETH/BTC/SOL/BNB/XRP, әрқайсысында ~1.18M 1m бар), іріктемеден тыс медиана бойынша таңдайтын кросс-инструменттік тексеру оны біржола жоққа шығарады: қос таймфрейм DSR 0.24 / PBO 0.264, үш таймфрейм DSR 0.14 / PBO 0.327 — екеуі де гейттерден өтпейді. Чемпион 5 символдың 1-інде ғана пайдалы, қалғандарында теріс. Анти-оверфит аппараты дәл осы үшін бар: шудың ең жақсысын альфа ретінде саудаға жіберуден сізді тоқтату үшін.

Мультитаймфреймдік бэктестерде келешекке қарамауды дәлелдеу: болашақты бұзып, өткеннің оны көре алмайтынын дәлелдеу

Мультитаймфреймдік бэктестерде келешекке қарамауды дәлелдеу: болашақты бұзып, өткеннің оны көре алмайтынын дәлелдеу

Мультитаймфреймдік бэктестер әлі толық қалыптаспаған жоғары таймфреймдік бардың соңғы жабылу бағасы арқылы болашақты сыздырады. Кодты тексеру арқылы сенімге жете алмайсыз — оны тестілеу керек. Біз тірі боттың жабық-бар ережесін дәл қайталап, содан кейін болашақты ығыстыратын сынақпен ағып кетуді жоққа шығарамыз: болашақтағы әрбір барды бұзамыз да, өткендегі әрбір сигнал мен мәміле бит-бітімен өзгермегенін растаймыз. 25/25 паритет тексерулері, әрі сынақтың нағыз тісі бар.

GPU қашан өзін ақтайды: параметрлік іздеудің roofline моделі, немесе жарнамалық 167x шын мәнінде 27x алгоритм мен 6.2x аппараттық ұтыстың көбейтіндісі

GPU қашан өзін ақтайды: параметрлік іздеудің roofline моделі, немесе жарнамалық 167x шын мәнінде 27x алгоритм мен 6.2x аппараттық ұтыстың көбейтіндісі

GPU-ның CPU-дан алшақтығы топтама өлшемімен бірге өседі — біздің көп таймфреймді индикаторларды алдын ала есептеуде бір шақыруға бір комбинацияда 54.5x-тен 61 комбинацияда 359.6x-ке дейін — өйткені шағын іздеу ядроны іске қосу мен деректерді тасымалдаудың үстеме шығынын өтей алмайды. Біз жарнамалық 167x-ті CPU-ға да көмектесетін 27x алгоритмдік ұтыс пен 6.2x аппараттық ұтысқа жіктейміз, GPU мен ең жақсы CPU арасындағы нақты алшақтық бір таймфреймде бар болғаны 3.2x, көп таймфреймде 6.2x екенін көрсетеміз және GPU сатып алу ақталуы үшін іздеу қаншалықты кең болуы керегі туралы шешім нұсқаулығын береміз.

GPU дәлдік қақпаны: Apple Metal-дағы fp32 бэктест қалай үнсіз қоқыс қайтарады

GPU дәлдік қақпаны: Apple Metal-дағы fp32 бэктест қалай үнсіз қоқыс қайтарады

Apple Metal GPU-да float64 жоқ. Векторланған бэктесті оған аңғал көшірсеңіз, азғырғыш префикс-қосынды WMA fp32-ні асырып жібереді — максималды салыстырмалы қате 211× — бірақ ол бәрібір жұмыс істеп, шындыққа ұқсас сандар қайтарады. Шешім — көбірек дәлдік емес, басқа формулировка: тікелей терезелік конволюция, fp32-де 8×10⁻⁷-ге дейін қауіпсіз және бір ағынды numba-дан 55.9× жылдам. Қақпан, оның арифметикасы және оған түспегеніңізді қалай дәлелдеу керек.

Дәлдік қақпасы: егер арзан прокси конфигурацияларды қымбат бағалаумен бірдей ретте саралай алмаса, ірі-ден-нақтыға қарай бэктестілеу сізді тезірек алдайды

Дәлдік қақпасы: егер арзан прокси конфигурацияларды қымбат бағалаумен бірдей ретте саралай алмаса, ірі-ден-нақтыға қарай бэктестілеу сізді тезірек алдайды

Тереңдете іздеу / көп дәлдікті іздеу (ASHA, бірізді жартылау, Hyperband) мыңдаған конфигурацияны арзан бағамен сүзіп, тек аман қалғандарын ғана қымбат толық бағалауға өткізеді. Бұл — шынайы жылдамдату, бірақ төмен дәлдіктегі сараптама жоғары дәлдіктегімен келіспесе, ол дыбыссыз құлайды. Біз фолд-ранг корреляциясын өлшедік: бір фолдта Spearman ρ 0.03-ке дейін түсуі мүмкін (конфигурациялар кездейсоқ дерлік сараланады), ал фолдтар көбейген сайын 0.43, 0.67, 0.78, 0.91-ге дейін өседі. Шешім — бір міндетті қақпа: алдымен ρ(арзан, толық) мәнін өлшеп, ең төменгі дәлдікті ρ ≥ 0.5 болатын алғашқы сатыға дейін автоматты түрде көтеру керек.

Кездейсоқ іздеу vs ақылды іздеу: кроссоверді алгоритм емес, бағалау құны анықтайды

Кездейсоқ іздеу vs ақылды іздеу: кроссоверді алгоритм емес, бағалау құны анықтайды

Бір бэктест арзан болғанда, қарапайым scrambled Sobol таза өткізу қабілеті (throughput) бойынша жеңеді - ақылды сэмплерлер (TPE, CMA-ES, ASHA) Python ask/tell салығын төлейді, бұл оларды 20 есе баяулатады, сондықтан олар бірдей нақты уақытта әлдеқайда аз нүкте бағалайды да ұтылады. Әр бағалауды қымбат етіп жасаңыз (multi-TF + walk-forward фолдтары) - кроссовер керісінше өзгереді. Біз екі режимді де өлшедік, және неге fold-rank fidelity (ρ@1 0.03-тен 0.43-ке дейін өсуі) кесудің пайда әкелуінің алғышарты екенін көрсеттік.

Екі осьті параметрлер кеңістігі: неге іздеуіңіздің көбі дерлік тегін болуға тиіс

Екі осьті параметрлер кеңістігі: неге іздеуіңіздің көбі дерлік тегін болуға тиіс

Барлық параметрлер бірдей іздеу құнын талап етпейді. Стратегия параметрлері қымбат оське (индикаторлар — бүкіл қатар бойынша қайта есептеледі) және арзан оське (шешім табалдырықтары — алдын ала есептелген сигналдар бойынша O(n) өту) бөлінеді. Индикаторлар табалдырықтарға тәуелсіз болғандықтан, оларды бір рет есептеп, мыңдаған табалдырық конфигурациясын шамамен 5,600 cfg/с жылдамдықпен аралап шығуға болады — бұл конфигурация сайын қайта есептеуден шамамен 1,600 есе арзан. Өлшемділіктің қарғысын қайта бағалау.

Фреймворк салығы: бэктест кітапханаңыз қарапайым pandas циклінен баяу болғанда

Фреймворк салығы: бэктест кітапханаңыз қарапайым pandas циклінен баяу болғанда

Біз сегіз бэктест қозғалтқышын бір бірдей параметр сканерлеуінде өлшедік — 150k бар, 80 HMA қиылысу комбинациясы, мәмілелер саны 2707-де бекітілген паритетпен. Ең танымал оқиғаға негізделген екі фреймворк қолмен жазылған pandas циклінен де баяу шықты, ал векторланған/компиляцияланған қозғалтқыш сол жұмысты шамамен 13,000× жылдам орындады. Танымал кітапханалар ешқашан амортизациялауға арналмаған бар сайынғы үстеме шығынды зерттеу.

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.

IPC салығы: бэктест қозғалтқышын сокеттің артына қойып, 13% жоғалту — оның ішінде сокетке қатысты дерлік ештеңе жоқ

IPC салығы: бэктест қозғалтқышын сокеттің артына қойып, 13% жоғалту — оның ішінде сокетке қатысты дерлік ештеңе жоқ

Біз numba бэктест ядросын жолма-жол Rust тіліне порттап, оны процесс шекарасы арқылы төрт түрлі жолмен шақырдық, соңғы мәмілеге дейін бірдей PnL растайтын эквиваленттілік қақпасымен. 1.2 МБ баға сериясының барлығын Unix сокеті арқылы жіберу ~2 мс тұрады — тапсырманың шамамен 0.1%. Сол пейлоудты JSON форматында кодтау шикі байттардан 1348 есе қымбатқа түседі, комбинация сайынғы "chatty" шақырулар деректерді 80 рет қайта жібереді, ал бар сайынғы шақыру үлгісі 2.0 с тапсырмада 2.1 с таза IPC-ге ақы төлер еді. Шекара арзан; салық оны қалай кесіп өтуіңізде жатыр.