Бенчмарки производительности

Измеренные результаты, а не маркетинговые заявления. Детальные бенчмарки будут опубликованы вместе с выпуском v1.0.

StratForge vs бэктестеры на Python

Прямое сравнение по основным операциям бэктестирования.

МетрикаPythonStratForgeУлучшение
Один индикатор (на бар)TBDTBDTBD
Шаг стратегииTBDTBDTBD
Полный бэктест (1М баров)TBDTBDTBD
Пропускная способностьTBDTBDTBD
Объем памятиTBDTBDTBD

Путь оптимизации

Как StratForge накапливает оптимизации по конвейеру бэктестирования.

Фаза 1: Колоночное хранение баровTBD

Бары хранятся в кэш-дружественных колоночных буферах. Вычисления индикаторов потоково проходят через непрерывную память, а не гоняются за указателями.

Фаза 2: Инкрементальные индикаторыTBD

Каждый индикатор поддерживает внутреннее состояние и обновляется за O(1) на бар. Без повторного вычисления скользящего окна.

Фаза 3: Безусловные пути решенийTBD

Логика входа/выхода стратегии переписана как безусловная арифметика, где возможно, чтобы избежать задержек конвейера на коде, зависящем от цены.

Фаза 4: Специализация на этапе компиляцииTBD

Параметры индикаторов, известные на этапе компиляции, становятся consteval. Специализированные шаблоны устраняют диспетчеризацию во время выполнения.

Доказательство нулевых аллокаций

Выполнение прохода бэктеста на горячем пути.

ОперацияБэктестер на PythonStratForge
Аллокации в кучеМножество (объекты Python на каждый бар)0
Хранение баровКопии pandas DataFramestd::span представления в колоночный буфер
Состояние индикатораВыделение массива при каждом вызовеПредварительно выделенное скользящее состояние
Объем памятиДинамический, управляемый GCСтатический, предварительно выделенный
ДетерминизмДрейф чисел с плавающей точкой между запускамиПобитовая воспроизводимость

Сравнение методик

Проектные решения, которые в совокупности обеспечивают детерминированное бэктестирование с низкой задержкой.

МетодикаБэктестер на PythonStratForge
Расположение в памятиСтроковое (DataFrame)Колоночное (кэш-дружественное)
Обновления индикаторовПересчет окна при каждом вызовеИнкрементальное O(1) на бар
Диспетчеризация циклаИнтерпретируемый цикл PythonВстроенный шаблонный цикл C++
Числовой детерминизмЗависит от версии NumPy / pandasПобитовая точность между запусками
Композиция стратегийИерархия классов + динамическая диспетчеризацияConcepts + статический полиморфизм
Обработка ошибокИсключенияstd::expected (без throw)

Архитектурные влияния

Ведущие в отрасли библиотеки и фреймворки, изученные при проектировании StratForge.

БиблиотекаЧто мы узналиЧто мы создалиРезультат
TA-LibКанонические определения индикаторов и обработка крайних случаевHeader-only библиотека индикаторов на C++23138 индикаторов
vectorbtВекторизованный API бэктестирования и перебор параметровШаблонное расширение параметров на этапе компиляцииTBD
backtraderЖизненный цикл стратегии и хуки событийИнтерфейс стратегии на основе conceptsТипобезопасный жизненный цикл
QuantLibМодульная архитектура ценообразования и аналитикиПодключаемые модули аналитикиTBD
EigenШаблоны выражений для математики с нулевыми накладными расходамиЛенивая композиция индикаторовБез временных буферов
ArrowСтандарты колоночного расположения в памятиНативное колоночное хранение баровДружественное к кэш-линиям
FollyLock-free примитивы и small_vectorПредварительно выделенные журналы сделокTBD
HighwayПортативная абстракция SIMDSIMD-совместимые внутренние циклы индикаторовTBD
fmtСтроки формата на этапе компиляцииФорматирование отчетов с нулевыми затратамиTBD
Boost.PMRМонотонный буфер для арена-аллокацииПул std::pmr::monotonic_buffer_resourceНулевые аллокации в куче
Catch2BDD-стиль юнит-тестов индикаторовНабор регрессионных тестов с побитовой точностьюВоспроизводимый CI

Готовы попробовать StratForge?

Три команды для клонирования и начала бэктестирования.

git clone https://github.com/StratCraftsAI/StratForge.git cd StratForge ./start.sh build