Измеренные результаты, а не маркетинговые заявления. Детальные бенчмарки будут опубликованы вместе с выпуском v1.0.
Прямое сравнение по основным операциям бэктестирования.
| Метрика | Python | StratForge | Улучшение |
|---|---|---|---|
| Один индикатор (на бар) | TBD | TBD | TBD |
| Шаг стратегии | TBD | TBD | TBD |
| Полный бэктест (1М баров) | TBD | TBD | TBD |
| Пропускная способность | TBD | TBD | TBD |
| Объем памяти | TBD | TBD | TBD |
Как StratForge накапливает оптимизации по конвейеру бэктестирования.
Бары хранятся в кэш-дружественных колоночных буферах. Вычисления индикаторов потоково проходят через непрерывную память, а не гоняются за указателями.
Каждый индикатор поддерживает внутреннее состояние и обновляется за O(1) на бар. Без повторного вычисления скользящего окна.
Логика входа/выхода стратегии переписана как безусловная арифметика, где возможно, чтобы избежать задержек конвейера на коде, зависящем от цены.
Параметры индикаторов, известные на этапе компиляции, становятся consteval. Специализированные шаблоны устраняют диспетчеризацию во время выполнения.
Выполнение прохода бэктеста на горячем пути.
| Операция | Бэктестер на Python | StratForge |
|---|---|---|
| Аллокации в куче | Множество (объекты Python на каждый бар) | 0 |
| Хранение баров | Копии pandas DataFrame | std::span представления в колоночный буфер |
| Состояние индикатора | Выделение массива при каждом вызове | Предварительно выделенное скользящее состояние |
| Объем памяти | Динамический, управляемый GC | Статический, предварительно выделенный |
| Детерминизм | Дрейф чисел с плавающей точкой между запусками | Побитовая воспроизводимость |
Проектные решения, которые в совокупности обеспечивают детерминированное бэктестирование с низкой задержкой.
| Методика | Бэктестер на Python | StratForge |
|---|---|---|
| Расположение в памяти | Строковое (DataFrame) | Колоночное (кэш-дружественное) |
| Обновления индикаторов | Пересчет окна при каждом вызове | Инкрементальное O(1) на бар |
| Диспетчеризация цикла | Интерпретируемый цикл Python | Встроенный шаблонный цикл C++ |
| Числовой детерминизм | Зависит от версии NumPy / pandas | Побитовая точность между запусками |
| Композиция стратегий | Иерархия классов + динамическая диспетчеризация | Concepts + статический полиморфизм |
| Обработка ошибок | Исключения | std::expected (без throw) |
Ведущие в отрасли библиотеки и фреймворки, изученные при проектировании StratForge.
| Библиотека | Что мы узнали | Что мы создали | Результат |
|---|---|---|---|
| TA-Lib | Канонические определения индикаторов и обработка крайних случаев | Header-only библиотека индикаторов на C++23 | 138 индикаторов |
| vectorbt | Векторизованный API бэктестирования и перебор параметров | Шаблонное расширение параметров на этапе компиляции | TBD |
| backtrader | Жизненный цикл стратегии и хуки событий | Интерфейс стратегии на основе concepts | Типобезопасный жизненный цикл |
| QuantLib | Модульная архитектура ценообразования и аналитики | Подключаемые модули аналитики | TBD |
| Eigen | Шаблоны выражений для математики с нулевыми накладными расходами | Ленивая композиция индикаторов | Без временных буферов |
| Arrow | Стандарты колоночного расположения в памяти | Нативное колоночное хранение баров | Дружественное к кэш-линиям |
| Folly | Lock-free примитивы и small_vector | Предварительно выделенные журналы сделок | TBD |
| Highway | Портативная абстракция SIMD | SIMD-совместимые внутренние циклы индикаторов | TBD |
| fmt | Строки формата на этапе компиляции | Форматирование отчетов с нулевыми затратами | TBD |
| Boost.PMR | Монотонный буфер для арена-аллокации | Пул std::pmr::monotonic_buffer_resource | Нулевые аллокации в куче |
| Catch2 | BDD-стиль юнит-тестов индикаторов | Набор регрессионных тестов с побитовой точностью | Воспроизводимый CI |
Три команды для клонирования и начала бэктестирования.
git clone https://github.com/StratCraftsAI/StratForge.git
cd StratForge
./start.sh build