TAKT-Showcase: Indikatoren ADX, ATR und PSAR (ein Port von Python ta)
Ein Benchmark auf vier Stufen: der ursprüngliche Build, Stufe 0 (Build-Tuning), Stufe 1 (automatische, nachweislich korrekte Optimierung) und Stufe 2 (ein Ingenieur). Die Ausgabe aller vier Programme ist bis aufs Bit identisch. Das Paket enthält fertige Programme für jede Stufe, den Quellcode der ursprünglichen Version, den Datengenerator, die erwartete Ausgabe und die Messungen.
Was der Benchmark berechnet
Ein Parameter-Sweep über eine Historie von 1 Mio. Bars: ATR, ADX, +DI, −DI für die Fenster 7, 10, 14,
20, 28 sowie Parabolic SAR in vier Konfigurationen. Für jede Reihe wird eine Prüfsumme über alle Werte
ausgegeben. Der Port reproduziert ta 0.11.0 Bit für Bit, einschließlich der Summationsreihenfolge
von numpy (tools/ta_reference_check.py).
Messung (TAKT-Messstand)
AMD Threadripper PRO 5975WX (Zen 3), Takte im User-Modus (vPMU) in einer isolierten VM auf einem dedizierten Kern, 9 abwechselnde Runden, Median. Gemessen wurden genau diese Dateien.
| Stufe | Build | Takte, Mio. | Beschleunigung | Zeit, ms | ggü. Stufe 0: Takte · Zeit |
|---|---|---|---|---|---|
| Basis | cargo build --release |
1.376,9 | 1,00× | 503 | — |
| Stufe 0 | LTO, codegen-units 1, target-cpu x86-64-v3 | 1.248,6 | 1,10× | 463 | 1,00× · 1,00× |
| Stufe 1 | Rezept + automatische, nachweislich korrekte Transformation | 791,4 | 1,74× | 342 | 1,58× · 1,35× |
| Stufe 2 | Rezept + Arbeit eines Ingenieurs | 143,3 | 9,61× | 81 | 8,72× · 5,73× |
Zum Vergleich auf demselben Kern: Python ta benötigt etwa 208 s pro 1 Mio. Bars; derselbe
Algorithmus in Numba (ebenfalls Bit für Bit) 0,335 s Berechnung plus 0,201 s für pandas.read_csv;
Stufe 2 0,018 s Berechnung und 0,020 s CSV-Parsing. Details stehen in measurements.json.
Ausführen
python3 tools/gen_ohlc.py 1000000 data/ohlc.csv # dieselben Daten wie bei der Messung (legt data/ an)
TAKT_INPUTS=data bin/ta-bench-level2 > out.txt
cmp out.txt expected_stdout.txt # bis aufs Byte identisch
for l in base level0 level1 level2; do TAKT_INPUTS=data bin/ta-bench-$l | sha256sum; done
Linux x86-64 (glibc). Die Stufen 0–2 sind für x86-64-v3 gebaut (AVX2, FMA, BMI2: Intel Haswell und neuer, AMD Zen und neuer); FMA wird in der Berechnung nicht verwendet.
Äquivalenz
Die Ausgabe aller vier Programme stimmt auf der obigen Eingabe und auf 60 generierten Datensätzen
anderer Form, Größe und CSV-Formate überein, einschließlich Eingaben, bei denen das Programm mit einer
Panic abbricht. Die ursprüngliche Version stimmt Bit für Bit mit Python ta überein:
tools/ta_reference_check.py data/ohlc.csv bin/ta-dump-base out/ (erfordert pandas, numpy, ta).
Inhalt
bin/: Programme für jede Stufe undta-dump-basefür den Abgleich mit Pythonta;source/: der Quellcode der ursprünglichen Version (derta-Port), aus dem Basis und Stufe 0 gebaut werden;tools/: der Datengenerator, der Abgleich mitta, eine Numba-Version zum Vergleich;expected_stdout.txt,measurements.json,SHA256SUMS,LICENSE;README.md: dieser Text auf Englisch,README.<language>.md: in weiteren Sprachen.
Die Quellen der Stufen 1 und 2 werden nicht veröffentlicht: Wir liefern Builds.