Benchmarks de performance

Des resultats mesures, pas des arguments marketing. Les benchmarks detailles seront publies avec la version v1.0.

StratForge vs backtesteurs Python

Comparaison directe sur les operations de backtest essentielles.

MetriquePythonStratForgeAmelioration
Indicateur unique (par barre)A venirA venirA venir
Etape de strategieA venirA venirA venir
Backtest complet (1M barres)A venirA venirA venir
DebitA venirA venirA venir
Empreinte memoireA venirA venirA venir

Parcours d'optimisation

Comment StratForge compose les optimisations tout au long du pipeline de backtest.

Phase 1 : Stockage en colonnes des barresA venir

Les barres sont stockees dans des tampons en colonnes optimises pour le cache. Les calculs d'indicateurs parcourent la memoire contigue au lieu de suivre des pointeurs.

Phase 2 : Indicateurs incrementauxA venir

Chaque indicateur maintient un etat interne et se met a jour en O(1) par barre. Pas de recalcul de fenetre glissante.

Phase 3 : Chemins de decision sans branchementA venir

La logique d'entree/sortie de strategie est reecrite en arithmetique sans branchement quand c'est possible, pour eviter les blocages du pipeline sur le code conditionnel de prix.

Phase 4 : Specialisation a la compilationA venir

Les parametres d'indicateurs connus a la compilation deviennent consteval. Les templates specialises eliminent le dispatch a l'execution.

Preuve de zero allocation

Execution d'une passe de backtest sur le chemin critique.

OperationBacktesteur PythonStratForge
Allocations memoireNombreuses (objets Python par barre)0
Stockage des barresCopies de DataFrame pandasVues std::span sur tampon en colonnes
Etat des indicateursAllocation de tableau par appelEtat glissant pre-alloue
Empreinte memoireDynamique, geree par le ramasse-miettesStatique, pre-allouee
DeterminismeDerive en virgule flottante entre les executionsReproductible bit-exact

Comparaison des techniques

Les choix de conception qui se composent pour un backtesting deterministe a faible latence.

TechniqueBacktesteur PythonStratForge
Disposition memoireOrientee lignes (DataFrame)En colonnes (optimisee pour le cache)
Mises a jour des indicateursRecalcul de la fenetre a chaque appelIncremental O(1) par barre
Dispatch de boucleBoucle Python interpreteeBoucle template C++ inlinee
Determinisme numeriqueDepend de la version NumPy / pandasBit-exact entre les executions
Composition de strategiesHierarchie de classes + dispatch dynamiqueConcepts + polymorphisme statique
Gestion des erreursExceptionsstd::expected (sans throw)

Influences architecturales

Bibliotheques et frameworks de reference etudies lors de la conception de StratForge.

BibliothequeCe que nous avons apprisCe que nous avons construitResultat
TA-LibDefinitions canoniques d'indicateurs et gestion des cas limitesBibliotheque d'indicateurs C++23 en-tetes uniquement138 indicateurs
vectorbtAPI de backtest vectorise et balayage de parametresExpansion de parametres par template a la compilationA venir
backtraderCycle de vie des strategies et hooks d'evenementsInterface de strategie basee sur les conceptsCycle de vie type-safe
QuantLibArchitecture modulaire de tarification et d'analyseModules d'analyse enfichablesA venir
EigenTemplates d'expression pour des mathematiques a cout zeroComposition paresseuse d'indicateursPas de tampons temporaires
ArrowStandards de disposition memoire en colonnesStockage natif de barres en colonnesCompatible lignes de cache
FollyPrimitives sans verrou et small_vectorJournaux de transactions pre-allouesA venir
HighwayAbstraction SIMD portableBoucles internes d'indicateurs compatibles SIMDA venir
fmtChaines de format a la compilationFormatage de rapports a cout zeroA venir
Boost.PMRTampon monotone pour allocation d'arenePool std::pmr::monotonic_buffer_resourceZero allocation memoire
Catch2Tests unitaires d'indicateurs style BDDSuite de regression bit-exactIC reproductible

Pret a essayer StratForge ?

Trois commandes pour cloner et commencer le backtesting.

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