Learn-skills.dev ta-lib
C-optimized technical analysis with 150+ functions and 61 candlestick pattern recognition functions via TA-Lib
git clone https://github.com/NeverSight/learn-skills.dev
T=$(mktemp -d) && git clone --depth=1 https://github.com/NeverSight/learn-skills.dev "$T" && mkdir -p ~/.claude/skills && cp -r "$T/data/skills-md/agiprolabs/claude-trading-skills/ta-lib" ~/.claude/skills/neversight-learn-skills-dev-ta-lib && rm -rf "$T"
data/skills-md/agiprolabs/claude-trading-skills/ta-lib/SKILL.mdta-lib — C-Optimized Technical Analysis
TA-Lib (Technical Analysis Library) is a C library with a Python wrapper providing 150+ technical analysis functions and 61 candlestick pattern recognition functions. It is the industry standard for performance-critical indicator computation, used in production trading systems where pandas-ta or pure-Python alternatives are too slow.
What TA-Lib Is
TA-Lib was originally written in C for financial market data analysis. The Python wrapper (
TA-Lib on PyPI, imported as talib) provides:
- 150+ indicator functions across overlap, momentum, volume, volatility, cycle, and math categories
- 61 candlestick pattern recognition functions — the most comprehensive pattern library available
- C-speed computation — 10-100x faster than pure-Python equivalents on large datasets
- Two APIs: a function API (pass arrays directly) and an abstract API (pass dict of arrays)
- NumPy native — all inputs and outputs are NumPy arrays
Installation
TA-Lib requires the underlying C library to be installed first:
# macOS brew install ta-lib uv pip install TA-Lib numpy pandas # Ubuntu/Debian sudo apt-get install -y ta-lib uv pip install TA-Lib numpy pandas # From source (any platform) wget https://github.com/ta-lib/ta-lib/releases/download/v0.6.4/ta-lib-0.6.4-src.tar.gz tar -xzf ta-lib-0.6.4-src.tar.gz cd ta-lib-0.6.4 ./configure --prefix=/usr/local make && sudo make install uv pip install TA-Lib numpy pandas
If the C library is not installed,
import talib will fail with an ImportError. The scripts in this skill include fallback logic for environments without TA-Lib installed.
When to Use TA-Lib vs pandas-ta
| Criterion | TA-Lib | pandas-ta |
|---|---|---|
| Speed | C-optimized, 10-100x faster | Pure Python, slower on large data |
| Candlestick patterns | 61 built-in patterns | Limited pattern support |
| Installation | Requires C library | only |
| API style | NumPy arrays | DataFrame accessor |
| Indicator count | 150+ | 130+ |
| Streaming | Single-value update possible | Recompute entire series |
| Dependencies | C lib + numpy | pandas only |
Use TA-Lib when:
- Processing millions of bars or running backtests at scale
- You need candlestick pattern recognition (TA-Lib is unmatched here)
- You are building a production pipeline where latency matters
- You need cycle indicators (Hilbert Transform family)
Use pandas-ta when:
- You want DataFrame-native convenience
- Installation simplicity matters (no C dependency)
- You need indicators not in TA-Lib (pandas-ta has some extras)
Quick Start
import numpy as np import talib # Create sample data close = np.random.randn(100).cumsum() + 50 high = close + np.abs(np.random.randn(100)) low = close - np.abs(np.random.randn(100)) open_ = close + np.random.randn(100) * 0.5 volume = np.random.randint(1000, 10000, 100).astype(float) # Function API — pass arrays directly rsi = talib.RSI(close, timeperiod=14) macd, signal, hist = talib.MACD(close, fastperiod=12, slowperiod=26, signalperiod=9) upper, middle, lower = talib.BBANDS(close, timeperiod=20, nbdevup=2, nbdevdn=2) atr = talib.ATR(high, low, close, timeperiod=14) # Candlestick patterns — return +100 (bullish), -100 (bearish), or 0 doji = talib.CDLDOJI(open_, high, low, close) hammer = talib.CDLHAMMER(open_, high, low, close) engulfing = talib.CDLENGULFING(open_, high, low, close)
Function API vs Abstract API
Function API (Recommended)
Call functions directly with NumPy arrays:
import talib rsi = talib.RSI(close, timeperiod=14) sma = talib.SMA(close, timeperiod=20) upper, mid, lower = talib.BBANDS(close)
Abstract API
Pass a dictionary of arrays and get results by name:
from talib import abstract inputs = {"open": open_, "high": high, "low": low, "close": close, "volume": volume} # Call by function name rsi = abstract.RSI(inputs, timeperiod=14) macd = abstract.MACD(inputs) # returns (macd, signal, hist)
The abstract API is useful for dynamic indicator selection (e.g., looping over a list of indicator names).
Function Groups
TA-Lib organizes functions into these groups:
Overlap Studies
Moving averages and envelope indicators that overlay price charts.
sma = talib.SMA(close, timeperiod=20) ema = talib.EMA(close, timeperiod=12) upper, mid, lower = talib.BBANDS(close, timeperiod=20, nbdevup=2, nbdevdn=2) sar = talib.SAR(high, low, acceleration=0.02, maximum=0.2) mama, fama = talib.MAMA(close, fastlimit=0.5, slowlimit=0.05)
Momentum Indicators
Oscillators and trend-strength measures.
rsi = talib.RSI(close, timeperiod=14) macd, signal, hist = talib.MACD(close, fastperiod=12, slowperiod=26, signalperiod=9) slowk, slowd = talib.STOCH(high, low, close) cci = talib.CCI(high, low, close, timeperiod=14) willr = talib.WILLR(high, low, close, timeperiod=14) adx = talib.ADX(high, low, close, timeperiod=14) mfi = talib.MFI(high, low, close, volume, timeperiod=14)
Volume Indicators
Volume-based analysis functions.
obv = talib.OBV(close, volume) ad = talib.AD(high, low, close, volume) adosc = talib.ADOSC(high, low, close, volume, fastperiod=3, slowperiod=10)
Volatility Indicators
Measures of price variability.
atr = talib.ATR(high, low, close, timeperiod=14) natr = talib.NATR(high, low, close, timeperiod=14) trange = talib.TRANGE(high, low, close)
Pattern Recognition (Candlestick)
61 functions that detect candlestick patterns. All return integer arrays:
= bullish pattern detected+100
= bearish pattern detected-100
= no pattern0
# Single patterns doji = talib.CDLDOJI(open_, high, low, close) hammer = talib.CDLHAMMER(open_, high, low, close) engulfing = talib.CDLENGULFING(open_, high, low, close) # Scan all 61 patterns at once candle_names = talib.get_function_groups()["Pattern Recognition"] for name in candle_names: func = getattr(talib, name) result = func(open_, high, low, close) hits = np.nonzero(result)[0] if len(hits) > 0: print(f"{name}: {len(hits)} detections")
See
references/candlestick_patterns.md for the full list of 61 patterns with reliability ratings and crypto relevance.
Math Transform & Math Operators
Mathematical functions (sin, cos, ln, etc.) and operators (add, sub, mult, div) on arrays. Rarely used directly but available.
Crypto Considerations
24/7 Markets
- Candlestick patterns designed for traditional markets with opening/closing gaps may behave differently on crypto's continuous markets
- Gap-based patterns (morning star, evening star) are less reliable without session gaps
- Body-ratio patterns (doji, hammer, engulfing) still work well on any timeframe
Timeframe Selection
- 1m-5m: Patterns are noisy; combine with volume confirmation
- 15m-1h: Good for intraday signals on high-cap tokens
- 4h-1d: Most reliable for pattern recognition
- Tip: Higher timeframes produce fewer but more reliable pattern signals
NaN Handling
TA-Lib returns
NaN for the initial lookback period of each indicator. Always account for this:
rsi = talib.RSI(close, timeperiod=14) # First 14 values will be NaN valid_rsi = rsi[~np.isnan(rsi)]
Solana Token Data
When using TA-Lib with Solana token OHLCV data:
- Ensure arrays are
dtype — TA-Lib requires thisfloat64 - Sort by timestamp ascending before passing to TA-Lib
- Handle gaps in low-liquidity token data before computing indicators
# Convert to float64 for TA-Lib compatibility close = df["close"].values.astype(np.float64) high = df["high"].values.astype(np.float64) low = df["low"].values.astype(np.float64)
Integration with Other Skills
With pandas-ta
pandas-ta can use TA-Lib as a backend when installed, getting C-speed through the pandas-ta API:
import pandas_ta as ta # pandas-ta auto-detects TA-Lib and uses it for supported indicators # Set explicitly: ta.Imports["talib"] = True # Force TA-Lib backend df.ta.rsi(length=14) # Uses TA-Lib under the hood if available
With vectorbt
vectorbt integrates with TA-Lib for fast backtesting:
import vectorbt as vbt # Use TA-Lib indicators in vectorbt rsi = vbt.talib("RSI").run(close, timeperiod=14) entries = rsi.real_crossed_below(30) exits = rsi.real_crossed_above(70)
With Birdeye/DexScreener Data
Fetch OHLCV data from API skills, then process with TA-Lib:
# After fetching OHLCV from birdeye-api or dexscreener-api close = np.array(ohlcv_data["close"], dtype=np.float64) rsi = talib.RSI(close, timeperiod=14)
Listing Available Functions
import talib # All function groups groups = talib.get_function_groups() for group, funcs in groups.items(): print(f"{group}: {len(funcs)} functions") # All function names all_funcs = talib.get_functions() print(f"Total: {len(all_funcs)} functions") # Info about a specific function info = talib.abstract.Function("RSI").info print(info["display_name"], info["group"])
Files
| File | Description |
|---|---|
| Most useful functions by category with syntax and parameters |
| All 61 candlestick patterns grouped by type with reliability ratings |
| Computes common indicators with TA-Lib/fallback comparison |
| Scans OHLCV data for all 61 candlestick patterns |