# 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 ```sh 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 und `ta-dump-base` für den Abgleich mit Python `ta`; - `source/`: der Quellcode der ursprünglichen Version (der `ta`-Port), aus dem Basis und Stufe 0 gebaut werden; - `tools/`: der Datengenerator, der Abgleich mit `ta`, eine Numba-Version zum Vergleich; - `expected_stdout.txt`, `measurements.json`, `SHA256SUMS`, `LICENSE`; - `README.md`: dieser Text auf Englisch, `README..md`: in weiteren Sprachen. Die Quellen der Stufen 1 und 2 werden nicht veröffentlicht: Wir liefern Builds.