# Vetrina TAKT: indicatori ADX, ATR e PSAR (un port di Python `ta`) Un solo benchmark su quattro livelli: la build originale, il livello 0 (messa a punto della build), il livello 1 (ottimizzazione automatica con prova di correttezza) e il livello 2 (un ingegnere). L’output dei quattro programmi è identico fino all’ultimo bit. Qui si trovano i programmi pronti per ogni livello, il sorgente della versione originale, il generatore di dati, l’output atteso e le misure. ## Che cosa calcola il benchmark Una scansione di parametri su un’unica storia di 1 mln di barre: ATR, ADX, +DI, −DI per le finestre 7, 10, 14, 20, 28 e Parabolic SAR in quattro configurazioni. Per ogni serie viene stampato un checksum di tutti i valori. Il port riproduce `ta` 0.11.0 bit per bit, compreso l’ordine di sommatoria di numpy (`tools/ta_reference_check.py`). ## Misura (banco TAKT) AMD Threadripper PRO 5975WX (Zen 3), cicli in modalità utente (vPMU) in una VM isolata su un core dedicato, 9 round alternati, mediana. Sono stati misurati esattamente questi file. | Livello | Build | Cicli, mln | Accelerazione | Tempo, ms | vs livello 0: cicli · tempo | |---|---|---:|---:|---:|---:| | Baseline | `cargo build --release` | 1.376,9 | 1,00× | 503 | — | | Livello 0 | LTO, codegen-units 1, target-cpu x86-64-v3 | 1.248,6 | 1,10× | 463 | 1,00× · 1,00× | | Livello 1 | ricetta + trasformazione automatica con prova di correttezza | 791,4 | 1,74× | 342 | 1,58× · 1,35× | | Livello 2 | ricetta + lavoro di un ingegnere | 143,3 | 9,61× | 81 | 8,72× · 5,73× | Per confronto, sullo stesso core: Python `ta` impiega circa 208 s per 1 mln di barre; lo stesso algoritmo in Numba (anch’esso bit per bit) impiega 0,335 s di calcolo più 0,201 s di `pandas.read_csv`; il livello 2 impiega 0,018 s di calcolo e 0,020 s di parsing del CSV. I dettagli sono in `measurements.json`. ## Esecuzione ```sh python3 tools/gen_ohlc.py 1000000 data/ohlc.csv # gli stessi dati della misura (crea data/) TAKT_INPUTS=data bin/ta-bench-level2 > out.txt cmp out.txt expected_stdout.txt # identico al byte for l in base level0 level1 level2; do TAKT_INPUTS=data bin/ta-bench-$l | sha256sum; done ``` Linux x86-64 (glibc). I livelli 0–2 sono compilati per x86-64-v3 (AVX2, FMA, BMI2: Intel Haswell e successivi, AMD Zen e successivi); FMA non viene usata nel calcolo. ## Equivalenza L’output dei quattro programmi coincide sull’input indicato sopra e su 60 set generati con altre forme, dimensioni e formati CSV, compresi gli input su cui il programma termina con un panic. La versione originale coincide con Python `ta` bit per bit: `tools/ta_reference_check.py data/ohlc.csv bin/ta-dump-base out/` (richiede `pandas`, `numpy`, `ta`). ## Contenuto - `bin/`: i programmi per ogni livello e `ta-dump-base` per la verifica incrociata con Python `ta`; - `source/`: il sorgente della versione originale (il port di `ta`), da cui si compilano la baseline e il livello 0; - `tools/`: il generatore di dati, la verifica incrociata con `ta`, una versione Numba per il confronto; - `expected_stdout.txt`, `measurements.json`, `SHA256SUMS`, `LICENSE`; - `README..md`: questo testo in altre lingue. I sorgenti dei livelli 1 e 2 non sono pubblicati: consegniamo build.