Python bindings for tacuda: full TA-Lib coverage (161 functions) on CUDA, incl. MACDEXT and 19 vector math kernels, device pipeline support, structured OHLCV inputs, batched multi-symbol execution, and runtime dtype selection (float16/float32/float64)
Project description
TaCuda — Python Bindings
Python package for the native tacuda CUDA library.
Full TA-Lib coverage (161 functions): indicators, MACDEXT, 19 vector math kernels,
candlestick patterns, plus typed core APIs with runtime dtype selection and the
zero-copy device API.
Prerequisites
- NVIDIA GPU (Compute Capability >= 6.0)
- CUDA Toolkit 11.x or 12.x
- Built
tacudashared library (tacuda.dll/libtacuda.so/libtacuda.dylib) - Python >= 3.8, NumPy >= 1.20
Package Scope
- High-level NumPy wrappers for indicator functions
- Precision-aware core indicators (
sma,ema,rsi,macd,atr,bbands) viadtype="float16|float32|float64" OHLCVconvenience container and input validation helpers
Installation
pip install tacuda
Note: The
tacudanative library must be built separately and placed where the Python bindings can find it. See "Library Location" below.
Quick Start
import numpy as np
from tacuda import sma, ema, rsi, macd, bbands, OHLCV
# Generate sample data
prices = np.random.randn(100_000).cumsum().astype(np.float32) + 100
# Moving averages
sma20 = sma(prices, 20)
ema12 = ema(prices, 12)
# RSI
rsi14 = rsi(prices, 14)
# MACD (returns macd_line, signal, histogram)
macd_line, signal, hist = macd(prices, 12, 26, 9)
# Bollinger Bands (returns upper, middle, lower)
upper, middle, lower = bbands(prices, 20, 2.0, 2.0)
# OHLCV container
ohlcv = OHLCV.from_columns(open_arr, high_arr, low_arr, close_arr, volume_arr)
MACDEXT and vector math
import tacuda
# Independent MA types per line (0=SMA 1=EMA 2=WMA ... 8=T3)
ext_macd, ext_signal, ext_hist = tacuda.macdext(
prices, fastPeriod=12, fastType=1, slowPeriod=26, slowType=0,
signalPeriod=9, signalType=2)
# Element-wise GPU kernels
log_prices = tacuda.ln(prices)
spread = tacuda.sub(high_arr, low_arr)
Zero-copy device pipeline
n = len(prices)
d_in = tacuda.device_alloc(n)
d_out = tacuda.device_alloc(n)
try:
tacuda.device_upload(prices, d_in, n) # 1 PCIe transfer in
tacuda.sma_d(d_in, d_out, n, 20) # compute on GPU
tacuda.sin_d(d_out, d_out, n) # chain kernels, zero copies
tacuda.device_sync()
result = tacuda.device_download(d_out, n) # 1 PCIe transfer out
finally:
tacuda.device_free(d_in)
tacuda.device_free(d_out)
Available Indicators (full TA-Lib coverage)
| Category | Indicators |
|---|---|
| Moving Averages | SMA, EMA, WMA, DEMA, TEMA, TRIMA, KAMA, T3, MAMA, MAVP, MA |
| Momentum | RSI, MACD, MACDEXT, MACDFIX, Stochastic, StochF, StochRSI, CCI, CMO, ROC, ROCP, ROCR, ROCR100, MOM, WILLR, APO, PPO, PVO, TRIX, ULTOSC, BOP |
| Volatility | ATR, NATR, TRANGE, BBANDS, ACCBANDS, StdDev, VAR |
| Trend | ADX, ADXR, DX, +DI, -DI, +DM, -DM, SAR, SAREXT, Aroon, AroonOsc |
| Volume | AD, ADOSC, OBV, MFI, IMI, NVI, PVI |
| Statistical | LINEARREG, SLOPE, INTERCEPT, ANGLE, TSF, CORREL, BETA, AVGDEV, SUM, MAX, MIN |
| Price Transform | AVGPRICE, MEDPRICE, TYPPRICE, WCLPRICE, MIDPRICE |
| Hilbert Transform | HT_DCPERIOD, HT_DCPHASE, HT_PHASOR, HT_SINE, HT_TRENDLINE, HT_TRENDMODE |
| Vector Math (19) | SIN, COS, TAN, ASIN, ACOS, ATAN, SINH, COSH, TANH, EXP, LN, LOG10, SQRT, CEIL, FLOOR, ADD, SUB, MULT, DIV |
| Candlestick | 63 patterns (Doji, Hammer, Engulfing, MorningStar, etc.) |
| Device API | ct_*_d variants of the above + device_alloc/upload/download/sync/free and buffer-pool controls |
Library Location
The bindings search for the native library in this order:
TACUDA_LIBRARYenvironment variable (full path to shared library)TACUDA_LIBRARY_PATH/TACUDA_LIBRARY_DIR+ library name- System library path (
ctypes.util.find_library) - Common build directories relative to the package
Regenerating Metadata
When the C header changes, regenerate from the repository root:
python bindings/generate_bindings.py
Build & Publish (PyPI)
cd bindings/python
python -m build
python -m twine check dist/*
python -m twine upload dist/*
Changelog
Canonical release history is maintained in CHANGELOG.md.
License
Apache License 2.0 — see LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tacuda-0.7.1.tar.gz.
File metadata
- Download URL: tacuda-0.7.1.tar.gz
- Upload date:
- Size: 32.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5291ef71b1246eaa6162a63b748f4300d9e6bcf8110156654f730ffb49d19fe9
|
|
| MD5 |
1985045c58387756e2ab673f59d13989
|
|
| BLAKE2b-256 |
dd85a8cb47ae3899b60a6f875f3f03ff94f5752787c8f6d7a6a1325c49ece211
|
File details
Details for the file tacuda-0.7.1-py3-none-win_amd64.whl.
File metadata
- Download URL: tacuda-0.7.1-py3-none-win_amd64.whl
- Upload date:
- Size: 28.1 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
44e32efdf55cff03c886e411e260f3efbd40d8e742f1c07c11fdd2659fa816a2
|
|
| MD5 |
de9d3edc6d0e2fec515cdf8608cd5e95
|
|
| BLAKE2b-256 |
196d4fc56c19c4670a73479911da20becdfc63a49b059ca58648d070cc88a6a0
|
File details
Details for the file tacuda-0.7.1-py3-none-manylinux_2_35_x86_64.whl.
File metadata
- Download URL: tacuda-0.7.1-py3-none-manylinux_2_35_x86_64.whl
- Upload date:
- Size: 5.5 MB
- Tags: Python 3, manylinux: glibc 2.35+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f50f7f9016bbddbab701f1543f26a773366df86b4f3a7344a61d5463bd5cc1b
|
|
| MD5 |
59a17810e57f4c6dcfdcad9da06ba880
|
|
| BLAKE2b-256 |
11553ef80d767923beb0779a95db270531ab659fd0461cb423508d8b8eab591f
|