StratCraft

Motor de backtest C++23

De 7 camadas e 5 processos para 4 camadas e 2 processos. Um motor de execução construído propositadamente para velocidade de investigação quantitativa.

Evolução da arquitetura

Três gerações de refinamento: eliminando sobrecarga em cada camada.

V1

V1: Multi-processo

7+ camadas de abstração, 5 processos separados, sobrecarga de serialização IPC. Execução apenas em Python com alta complexidade arquitetónica.

7 camadas, 5 processos
V2

V2: Consolidação

Contagem de processos reduzida, introdução de componentes C++. Arquitetura de transição provando o conceito de execução incorporada.

5 camadas, 3 processos
V3

V3: Motor incorporado

4 camadas, 2 processos, 1 protocolo. Motor C++ com Python incorporado via pybind11. Fluxo de dados Apache Arrow para NumPy sem cópia.

4 camadas, 2 processos

Benchmarks de desempenho

Medido com temporização RDTSC, fixação de afinidade de CPU e rastreamento de percentis P50/P90/P99/P999.

MétricaMedidoAlvo
Latência por barra2,15 ns< 1 µs
Tempo de aquisição GIL26,62 ns< 10 µs
Tempo de retenção GIL203,30 ns< 100 µs
Aceleração SIMD (AVX2)2,48x≥ 2x
Throughput lock-free15,73 M ops/s> 10 M ops/s
Geral vs Python500-1000x> 100x

Pipeline de dados sem cópia

De dados de mercado à execução de estratégia sem cópias de memória.

1

Ingestão Parquet

Dados de mercado armazenados no formato Apache Parquet com compressão colunar. O acesso a ficheiros mapeados em memória elimina a sobrecarga de deserialização.

2

Formato em memória Arrow

O Apache Arrow fornece um layout de memória colunar independente da linguagem. C++ e Python partilham a mesma memória sem qualquer cópia ou conversão.

3

Acesso NumPy sem cópia

O pybind11 expõe buffers Arrow como arrays NumPy no mesmo espaço de memória. O código Python da estratégia lê dados pertencentes ao C++ com zero alocação.

Percurso de otimização

Da arquitetura aos nanossegundos: uma abordagem sistemática ao desempenho.

Fase 0: Arquitetura500-1000x

O executor de processo único V3 eliminou a serialização IPC, o spawning de processos e a marshaling de dados entre processos. O maior ganho veio da simplificação arquitetónica.

Fase 1: Framework de benchmarkLinha de base

Temporização RDTSC com fixação de afinidade de CPU. Rastreamento de percentis P50/P90/P99/P999 em 12 programas de benchmark. Infraestrutura de medição reproduzível estabelecida.

Fase 2: C++ moderno5-10%

LTO, -march=native, abstração SIMD xsimd, alocador mimalloc, logging de baixa latência Quill, contentores Abseil. Otimizações ao nível do compilador e biblioteca.

Fase 3: Soberania de memória1,05x

Infraestrutura PMR, alocadores alinhados com cache, zero alocações no hot path. Visando falhas de cache L1 < 5% e falhas de TLB < 0,5%.

Experiencie a velocidade

Clone, compile e execute o seu primeiro backtest em minutos. O motor está incluído no nível gratuito.

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