TAKT 쇼케이스: ADX, ATR, PSAR 지표 (Python ta의 포트)
하나의 벤치마크를 네 가지 빌드로 제공합니다. 원본 빌드, 레벨 0(빌드 튜닝), 레벨 1(정확성이 증명된 자동 최적화), 레벨 2(엔지니어 작업)입니다. 네 프로그램의 출력은 비트 단위로 동일합니다. 이 패키지에는 레벨별 실행 프로그램, 원본 버전의 소스, 데이터 생성기, 기대 출력, 측정 결과가 들어 있습니다.
벤치마크가 계산하는 내용
100만 개 바로 이루어진 하나의 히스토리에 대한 파라미터 스윕입니다. 윈도우 7, 10, 14, 20, 28에 대한 ATR,
ADX, +DI, −DI와 네 가지 설정의 Parabolic SAR를 계산하고, 시계열마다 모든 값의 체크섬을 출력합니다.
이 포트는 numpy의 합산 순서까지 포함해 ta 0.11.0과 비트 단위로 동일한 결과를 재현합니다
(tools/ta_reference_check.py).
측정 (TAKT 측정 장비)
AMD Threadripper PRO 5975WX (Zen 3), 전용 코어에 할당한 격리 VM에서 측정한 사용자 모드 사이클(vPMU), 교차 실행 9라운드의 중앙값입니다. 이 패키지의 파일을 그대로 측정했습니다.
| 레벨 | 빌드 | 사이클(백만) | 가속 | 시간(ms) | 레벨 0 대비: 사이클 · 시간 |
|---|---|---|---|---|---|
| 기준선 | cargo build --release |
1,376.9 | 1.00× | 503 | — |
| 레벨 0 | 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는 100만 개 바당 약 208초가 걸립니다. 같은 알고리즘을 Numba로
구현하면(역시 비트 단위로 동일) 연산 0.335초에 pandas.read_csv 0.201초가 더해집니다. 레벨 2는 연산
0.018초, CSV 파싱 0.020초입니다. 자세한 내용은 measurements.json에 있습니다.
실행
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를 사용하지 않습니다.
동등성
네 프로그램의 출력은 위 입력뿐 아니라 형태, 크기, CSV 형식이 다른 생성 데이터 세트 60개에서도
일치합니다. 여기에는 프로그램이 패닉으로 종료되는 입력도 포함됩니다. 원본 버전은 Python ta와 비트
단위로 동일합니다: tools/ta_reference_check.py data/ohlc.csv bin/ta-dump-base out/
(pandas, numpy, ta 필요).
구성
bin/: 레벨별 프로그램과 Pythonta교차 검증용ta-dump-basesource/: 원본 버전(ta포트)의 소스. 기준선과 레벨 0은 이 소스로 빌드합니다tools/: 데이터 생성기,ta교차 검증 스크립트, 비교용 Numba 버전expected_stdout.txt,measurements.json,SHA256SUMS,LICENSEREADME.<language>.md: 다른 언어로 된 이 문서
레벨 1과 2의 소스는 공개하지 않습니다. 저희는 빌드를 제공합니다.