StratCraft

Motore di backtest C++23

Da 7 livelli e 5 processi a 4 livelli e 2 processi. Un motore di esecuzione progettato per la velocità della ricerca quantitativa.

Evoluzione architetturale

Tre generazioni di raffinamento: eliminare l\'overhead ad ogni livello.

V1

V1: Multi-processo

7+ livelli di astrazione, 5 processi separati, overhead di serializzazione IPC. Esecuzione solo Python con elevata complessità architetturale.

7 livelli, 5 processi
V2

V2: Consolidamento

Riduzione del numero di processi, introduzione dei componenti C++. Architettura transitoria che dimostra il concetto di esecuzione incorporata.

5 livelli, 3 processi
V3

V3: Motore incorporato

4 livelli, 2 processi, 1 protocollo. Esecutore C++ con Python incorporato via pybind11. Flusso dati zero-copy da Apache Arrow a NumPy.

4 livelli, 2 processi

Benchmark di prestazione

Misurato con timing RDTSC, pinning affinità CPU e tracking percentile P50/P90/P99/P999.

MetricaMisuratoObiettivo
Latenza per barra2,15 ns< 1 µs
Tempo acquisizione GIL26,62 ns< 10 µs
Tempo mantenimento GIL203,30 ns< 100 µs
Speedup SIMD (AVX2)2,48x≥ 2x
Throughput lock-free15,73 M ops/s> 10 M ops/s
Complessivo vs Python500-1000x> 100x

Pipeline dati zero-copy

Dai dati di mercato all\'esecuzione della strategia senza copie di memoria.

1

Ingestione Parquet

Dati di mercato archiviati in formato Apache Parquet con compressione colonnare. L\'accesso diretto ai file mappati in memoria elimina l\'overhead di deserializzazione.

2

Formato in memoria Arrow

Apache Arrow fornisce un layout di memoria colonnare indipendente dal linguaggio. C++ e Python condividono la stessa memoria senza alcuna copia o conversione.

3

Accesso NumPy zero-copy

pybind11 espone i buffer Arrow come array NumPy nello stesso spazio di memoria. Il codice Python della strategia legge i dati posseduti da C++ senza allocazione.

Percorso di ottimizzazione

Dall\'architettura ai nanosecondi: un approccio sistematico alle prestazioni.

Fase 0: Architettura500-1000x

L\'esecutore mono-processo V3 ha eliminato la serializzazione IPC, lo spawning dei processi e il marshaling dei dati cross-processo. Il guadagno maggiore è venuto dalla semplificazione architetturale.

Fase 1: Framework di benchmarkBaseline

Timing RDTSC con pinning affinità CPU. Tracking percentile P50/P90/P99/P999 su 12 programmi di benchmark. Infrastruttura di misurazione riproducibile stabilita.

Fase 2: C++ moderno5-10%

LTO, -march=native, astrazione SIMD xsimd, allocatore mimalloc, logging a bassa latenza Quill, container Abseil. Ottimizzazioni a livello di compilatore e libreria.

Fase 3: Sovranità della memoria1,05x

Infrastruttura PMR, allocatori allineati alla cache, zero allocazioni sul percorso critico. Obiettivo: miss L1 cache < 5% e miss TLB < 0,5%.

Sperimenta la velocità

Clona, compila ed esegui il tuo primo backtest in pochi minuti. Il motore è incluso nel livello gratuito.

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