← Все подборки
4 части

Быстрые движки бэктеста

Как построить движок бэктеста, который считает в сотни раз быстрее без изменения PnL: раскладка данных, кэширование, адаптивное разрешение и архитектура — от первых ускорений до внутренностей продакшена.

  1. 01
    Лесенка скорости бэктест-движка: 298x на CPU ноутбука, идентичный PnL до последней сделки
    Jul 1, 2026 #алготрейдинг

    Лесенка скорости бэктест-движка: 298x на CPU ноутбука, идентичный PnL до последней сделки

    Пять реализаций одного и того же перебора 80 комбинаций параметров, каждая проверена на идентичность PnL: pandas rolling.apply занимает 69.9 секунды, numpy — 3.1, numba — 2.0, параллельная numba — 0.23 — измеренное ускорение 298x на Apple M2 Max без единого изменения в железе, и все еще ~13x против добротной векторизованной базовой реализации. Что дает каждая ступень, почему GPU — не то недостающее звено, и где на самом деле находится узкое место в массовом переборе параметров.

  2. 02
    Агрегированный Parquet-кэш: как ускорить мультитаймфрейм-бэктест в сотни раз
    Mar 16, 2026 #алготрейдинг

    Агрегированный Parquet-кэш: как ускорить мультитаймфрейм-бэктест в сотни раз

    Как предвычислить таймфреймы и индикаторы из минутных свечей, сохранить в parquet и использовать при массовом тестировании стратегий без повторных пересчётов.

  3. 03
    Adaptive drill-down: бэктест с переменной гранулярностью от минут до сырых сделок
    Mar 17, 2026 #алготрейдинг

    Adaptive drill-down: бэктест с переменной гранулярностью от минут до сырых сделок

    Как адаптивная гранулярность данных ускоряет бэктесты и экономит хранилище: drill-down от 1m к 1s, 100ms и сырым сделкам только там, где цена двигалась значительно или объём аномально вырос.

  4. 04
    IPC-налог: спрячьте бэктест-движок за сокетом и потеряйте 13% — при этом сокет почти ни при чем
    Jul 2, 2026 #алготрейдинг

    IPC-налог: спрячьте бэктест-движок за сокетом и потеряйте 13% — при этом сокет почти ни при чем

    Мы перенесли numba-ядро бэктеста построчно на Rust и вызывали его через границу процесса четырьмя способами, а проверка эквивалентности подтвердила идентичный PnL вплоть до последней сделки. Передача всего ценового ряда в 1.2 MB через Unix-сокет стоит ~2 мс — около 0.1% всей работы. JSON-кодирование того же payload стоит 1348x дороже, чем сырые байты, болтливые вызовы на каждую комбинацию пересылают данные заново 80 раз, а паттерн вызова на каждый бар обошелся бы в 2.1 с чистого IPC на задаче длиной 2.0 с. Граница дешева; налог — в том, как вы ее пересекаете.