← retour à la vitrine

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

Les sources des niveaux 1 et 2 ne sont pas publiées : nous livrons des builds.

Texte source : README.fr.md

Telegram