# Витрина TAKT: индикаторы ADX, ATR и PSAR (порт Python `ta`) Один и тот же бенчмарк на четырёх уровнях: исходная сборка, базовый уровень (настройка сборки), уровень 1 (автоматическая доказанная оптимизация) и уровень 2 (инженер). Вывод всех четырёх программ совпадает до бита. Здесь — готовые программы всех уровней, исходник исходной версии, генератор данных, ожидаемый вывод и замеры. ## Что считает бенчмарк Свип параметров на одной истории из 1 млн баров: ATR, ADX, +DI, −DI для окон 7, 10, 14, 20, 28 и Parabolic SAR в четырёх конфигурациях. Для каждого ряда печатается контрольная сумма всех значений. Порт повторяет `ta` 0.11.0 бит в бит, включая порядок суммирования numpy (`tools/ta_reference_check.py`). ## Замер (стенд TAKT) AMD Threadripper PRO 5975WX (Zen 3), такты пользовательского режима (vPMU) в изолированной VM на выделенном ядре, 9 чередующихся раундов, медиана. Замерены ровно эти файлы. | Уровень | Сборка | Такты, млн | Ускорение | Время, мс | к базовому уровню: такты · время | |---|---|---:|---:|---:|---:| | База | `cargo build --release` | 1 376,9 | 1,00× | 503 | — | | Базовый уровень | LTO, codegen-units 1, target-cpu x86-64-v3 | 1 248,6 | 1,10× | 463 | 1,00× · 1,00× | | Уровень 1 | рецепт + автоматическое доказанное преобразование | 791,4 | 1,74× | 342 | 1,58× · 1,35× | | Уровень 2 | рецепт + работа инженера | 143,3 | 9,61× | 81 | 8,72× · 5,73× | Для сравнения на том же ядре: Python `ta` — около 208 с на 1 млн баров; тот же алгоритм на Numba (тоже бит в бит) — 0,335 с вычислений плюс 0,201 с `pandas.read_csv`; уровень 2 — 0,018 с вычислений и 0,020 с разбора CSV. Подробно — `measurements.json`. ## Запуск ```sh python3 tools/gen_ohlc.py 1000000 data/ohlc.csv # те же данные, что на замере (создаст data/) TAKT_INPUTS=data bin/ta-bench-level2 > out.txt cmp out.txt expected_stdout.txt # совпадает до байта for l in base level0 level1 level2; do TAKT_INPUTS=data bin/ta-bench-$l | sha256sum; done ``` Linux x86-64 (glibc). Уровни 0–2 собраны для x86-64-v3 (AVX2, FMA, BMI2: Intel Haswell и новее, AMD Zen и новее); FMA в вычислениях не используется. ## Эквивалентность Вывод всех четырёх программ совпадает на входе выше и на 60 сгенерированных наборах других форм, размеров и форматов CSV, включая входы, на которых программа завершается паникой. Исходная версия совпадает с Python `ta` бит в бит: `tools/ta_reference_check.py data/ohlc.csv bin/ta-dump-base out/` (нужны `pandas`, `numpy`, `ta`). ## Состав - `bin/` — программы всех уровней и `ta-dump-base` для сверки с Python `ta`; - `source/` — исходник исходной версии (порт `ta`), из него собраны база и базовый уровень; - `tools/` — генератор данных, сверка с `ta`, Numba-версия для сравнения; - `expected_stdout.txt`, `measurements.json`, `SHA256SUMS`, `LICENSE`; - `README.md` — этот текст на английском, `README.<язык>.md` — на других языках. Исходники уровней 1 и 2 не публикуются: мы поставляем сборки.