← volver a la demostración

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

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

El código fuente de los niveles 1 y 2 no se publica: entregamos compilaciones.

Texto original: README.es.md

Telegram