# Vitrine TAKT : indicateurs ADX, ATR et PSAR (portage de Python `ta`) Un même benchmark à quatre niveaux : le build d’origine, le niveau 0 (réglage du build), le niveau 1 (optimisation automatique prouvée) et le niveau 2 (un ingénieur). La sortie des quatre programmes est identique au bit près. Vous trouverez ici les programmes prêts à l’emploi pour chaque niveau, le code source de la version d’origine, le générateur de données, la sortie attendue et les mesures. ## Ce que calcule le benchmark Un balayage de paramètres sur un même historique de 1 million de barres : ATR, ADX, +DI, −DI pour les fenêtres 7, 10, 14, 20, 28, et Parabolic SAR en quatre configurations. Pour chaque série, une somme de contrôle de toutes les valeurs est affichée. Le portage reproduit `ta` 0.11.0 bit à bit, y compris l’ordre de sommation de numpy (`tools/ta_reference_check.py`). ## Mesure (banc TAKT) AMD Threadripper PRO 5975WX (Zen 3), cycles en mode utilisateur (vPMU) dans une VM isolée sur un cœur dédié, 9 tours entrelacés, médiane. Ce sont exactement ces fichiers qui ont été mesurés. | Niveau | Build | Cycles, M | Accélération | Temps, ms | vs niveau 0 : cycles · temps | |---|---|---:|---:|---:|---:| | Référence | `cargo build --release` | 1 376,9 | 1,00× | 503 | — | | Niveau 0 | LTO, codegen-units 1, target-cpu x86-64-v3 | 1 248,6 | 1,10× | 463 | 1,00× · 1,00× | | Niveau 1 | options du niveau 0 + transformation automatique prouvée | 791,4 | 1,74× | 342 | 1,58× · 1,35× | | Niveau 2 | options du niveau 0 + travail d’un ingénieur | 143,3 | 9,61× | 81 | 8,72× · 5,73× | Pour comparaison, sur le même cœur : Python `ta` met environ 208 s pour 1 million de barres ; le même algorithme sous Numba (lui aussi bit à bit) prend 0,335 s de calcul plus 0,201 s de `pandas.read_csv` ; le niveau 2 prend 0,018 s de calcul et 0,020 s de parsing du CSV. Détails dans `measurements.json`. ## Exécution ```sh python3 tools/gen_ohlc.py 1000000 data/ohlc.csv # les mêmes données que lors de la mesure (crée data/) TAKT_INPUTS=data bin/ta-bench-level2 > out.txt cmp out.txt expected_stdout.txt # identique à l’octet près for l in base level0 level1 level2; do TAKT_INPUTS=data bin/ta-bench-$l | sha256sum; done ``` Linux x86-64 (glibc). Les niveaux 0–2 sont compilés pour x86-64-v3 (AVX2, FMA, BMI2 : Intel Haswell et plus récents, AMD Zen et plus récents) ; FMA n’est pas utilisé dans le calcul. ## Équivalence La sortie des quatre programmes est identique sur l’entrée ci-dessus et sur 60 jeux générés de formes, de tailles et de formats CSV différents, y compris des entrées sur lesquelles le programme se termine par une panique. La version d’origine est identique à Python `ta` bit à bit : `tools/ta_reference_check.py data/ohlc.csv bin/ta-dump-base out/` (nécessite `pandas`, `numpy`, `ta`). ## Contenu - `bin/` : les programmes de chaque niveau et `ta-dump-base` pour la vérification croisée avec Python `ta` ; - `source/` : le code source de la version d’origine (le portage de `ta`), à partir duquel sont compilés la référence et le niveau 0 ; - `tools/` : le générateur de données, la vérification croisée avec `ta`, une version Numba pour comparaison ; - `expected_stdout.txt`, `measurements.json`, `SHA256SUMS`, `LICENSE` ; - `README.md` : ce texte en anglais ; `README..md` : ce texte dans d’autres langues. Les sources des niveaux 1 et 2 ne sont pas publiées : nous livrons des builds.