# Demostración de TAKT: indicadores ADX, ATR y PSAR (adaptación de `ta` de Python) Un mismo benchmark en cuatro niveles: la compilación original, el nivel 0 (ajuste de la compilación), el nivel 1 (optimización automática con corrección demostrada) y el nivel 2 (un ingeniero). La salida de los cuatro programas es idéntica bit a bit. Aquí encontrará los programas listos para cada nivel, el código fuente de la versión original, el generador de datos, la salida esperada y las mediciones. ## Qué calcula el benchmark Un barrido de parámetros sobre una misma historia de 1 M de barras: ATR, ADX, +DI y −DI para las ventanas 7, 10, 14, 20 y 28, y Parabolic SAR en cuatro configuraciones. Para cada serie se imprime una suma de comprobación de todos sus valores. La adaptación reproduce `ta` 0.11.0 bit a bit, incluido el orden de suma de numpy (`tools/ta_reference_check.py`). ## Medición (banco de TAKT) AMD Threadripper PRO 5975WX (Zen 3), ciclos en modo usuario (vPMU) en una VM aislada sobre un núcleo dedicado, 9 rondas intercaladas, mediana. Se midieron exactamente estos archivos. | Nivel | Compilación | Ciclos, M | Aceleración | Tiempo, ms | vs. nivel 0: ciclos · tiempo | |---|---|---:|---:|---:|---:| | Línea base | `cargo build --release` | 1.376,9 | 1,00× | 503 | — | | Nivel 0 | LTO, codegen-units 1, target-cpu x86-64-v3 | 1.248,6 | 1,10× | 463 | 1,00× · 1,00× | | Nivel 1 | receta + transformación automática con corrección demostrada | 791,4 | 1,74× | 342 | 1,58× · 1,35× | | Nivel 2 | receta + trabajo de un ingeniero | 143,3 | 9,61× | 81 | 8,72× · 5,73× | Como comparación, en el mismo núcleo: `ta` de Python tarda unos 208 s por cada 1 M de barras; el mismo algoritmo en Numba (también bit a bit) tarda 0,335 s de cálculo más 0,201 s de `pandas.read_csv`; el nivel 2 tarda 0,018 s de cálculo y 0,020 s de análisis del CSV. Los detalles están en `measurements.json`. ## Ejecución ```sh python3 tools/gen_ohlc.py 1000000 data/ohlc.csv # los mismos datos que en la medición (crea data/) TAKT_INPUTS=data bin/ta-bench-level2 > out.txt cmp out.txt expected_stdout.txt # idénticos byte a byte for l in base level0 level1 level2; do TAKT_INPUTS=data bin/ta-bench-$l | sha256sum; done ``` Linux x86-64 (glibc). Los niveles 0–2 están compilados para x86-64-v3 (AVX2, FMA, BMI2: Intel Haswell y posteriores, AMD Zen y posteriores); FMA no se usa en el cálculo. ## Equivalencia La salida de los cuatro programas coincide con la entrada anterior y con 60 conjuntos generados de otras formas, tamaños y formatos CSV, incluidas las entradas con las que el programa termina en pánico. La versión original coincide con `ta` de Python bit a bit: `tools/ta_reference_check.py data/ohlc.csv bin/ta-dump-base out/` (requiere `pandas`, `numpy`, `ta`). ## Contenido - `bin/`: los programas de cada nivel y `ta-dump-base` para la verificación cruzada con `ta` de Python; - `source/`: el código fuente de la versión original (la adaptación de `ta`), a partir del cual se compilan la línea base y el nivel 0; - `tools/`: el generador de datos, la verificación cruzada con `ta` y una versión en Numba para comparar; - `expected_stdout.txt`, `measurements.json`, `SHA256SUMS`, `LICENSE`; - `README..md`: este texto en otros idiomas. El código fuente de los niveles 1 y 2 no se publica: entregamos compilaciones.