StratCraft

Motor de backtest C++23

De 7 capas y 5 procesos a 4 capas y 2 procesos. Un motor de ejecución diseñado específicamente para la velocidad de investigación cuantitativa.

Evolución de la arquitectura

Tres generaciones de refinamiento: eliminando sobrecarga en cada capa.

V1

V1: Multi-proceso

Más de 7 capas de abstracción, 5 procesos separados, sobrecarga de serialización IPC. Ejecución solo en Python con alta complejidad arquitectónica.

7 capas, 5 procesos
V2

V2: Consolidación

Reducción del número de procesos, introducción de componentes C++. Arquitectura de transición que prueba el concepto de ejecución embebida.

5 capas, 3 procesos
V3

V3: Motor embebido

4 capas, 2 procesos, 1 protocolo. Executor C++ con Python embebido via pybind11. Flujo de datos Apache Arrow a NumPy de copia cero.

4 capas, 2 procesos

Benchmarks de rendimiento

Medidos con temporización RDTSC, anclaje de afinidad de CPU y seguimiento de percentiles P50/P90/P99/P999.

MétricaMedidoObjetivo
Latencia por barra2,15 ns< 1 µs
Tiempo de adquisición GIL26,62 ns< 10 µs
Tiempo de retención GIL203,30 ns< 100 µs
Aceleración SIMD (AVX2)2,48x≥ 2x
Rendimiento sin bloqueo15,73 M ops/s> 10 M ops/s
General vs Python500-1000x> 100x

Pipeline de datos de copia cero

Desde los datos de mercado hasta la ejecución de la estrategia sin copias de memoria.

1

Ingesta de Parquet

Datos de mercado almacenados en formato Apache Parquet con compresión columnar. El acceso a archivos mapeados en memoria elimina la sobrecarga de deserialización.

2

Formato en memoria Arrow

Apache Arrow proporciona un diseño de memoria columnar agnóstico al lenguaje. C++ y Python comparten la misma memoria sin ninguna copia o conversión.

3

Acceso NumPy de copia cero

pybind11 expone los buffers Arrow como arrays NumPy en el mismo espacio de memoria. El código Python de la estrategia lee datos de propiedad de C++ sin asignaciones.

Proceso de optimización

De la arquitectura a los nanosegundos: un enfoque sistemático del rendimiento.

Fase 0: Arquitectura500-1000x

El executor de proceso único V3 eliminó la serialización IPC, la generación de procesos y el marshaling de datos entre procesos. La mayor ganancia provino de la simplificación arquitectónica.

Fase 1: Framework de benchmarkLínea base

Temporización RDTSC con anclaje de afinidad de CPU. Seguimiento de percentiles P50/P90/P99/P999 en 12 programas de benchmark. Se estableció infraestructura de medición reproducible.

Fase 2: C++ moderno5-10%

LTO, -march=native, abstracción SIMD xsimd, asignador mimalloc, logging de baja latencia Quill, contenedores Abseil. Optimizaciones a nivel de compilador y librería.

Fase 3: Soberanía de memoria1,05x

Infraestructura PMR, asignadores alineados a caché, cero asignaciones en la ruta crítica. Objetivo: fallos de caché L1 < 5% y fallos TLB < 0,5%.

Experimente la velocidad

Clone, compile y ejecute su primer backtest en minutos. El motor está incluido en el nivel gratuito.

git clone https://github.com/StratCraft/StratCraft.git\ncd StratCraft\npnpm install && pnpm dev:desktop