← zurück zum Showcase

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

Die Quellen der Stufen 1 und 2 werden nicht veröffentlicht: Wir liefern Builds.

Quelldatei: README.de.md

Telegram