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
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 etta-dump-basepour la vérification croisée avec Pythonta;source/: le code source de la version d’origine (le portage deta), à 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 avecta, une version Numba pour comparaison ;expected_stdout.txt,measurements.json,SHA256SUMS,LICENSE;README.md: ce texte en anglais ;README.<language>.md: ce texte dans d’autres langues.
Les sources des niveaux 1 et 2 ne sont pas publiées : nous livrons des builds.