← Back to list
💰

ta-lib Checked

C-optimized technical analysis with 150+ functions and 61 candlestick pattern recognition functio…
💰 Finance & Trading skills By agiprolabs Version v1.0.0 Added 2026-09-20 Updated 2026-10-21 Source ↗
6.0Overall rating
2Views
6Downloads
366Stars

Installation

🤖 Install via AI

Copy the prompt below and send it to your AI assistant (e.g. Claude Code) — it will follow the instructions and install automatically.

Install the "ta-lib" skill by following the instructions at https://skill123.me/install/ta-lib.
⌨️ Command line install

Run in your terminal — downloads and installs to ~/.claude/skills/.

curl -fsSL https://skill123.me/install/ta-lib.sh | bash
📦 Download ZIP

Download the zip and extract it into your skills directory (e.g. ~/.claude/skills/), then restart your session.

⬇ Download v1.0.0 · 21 KB
📊 Static rating
6.0/10
Trigger
3.5
Structure
7.0
Workflow
3.0
Content
8.5
Engineering
7.0
Security
9.5

Six-dimension rubric with reviewer rationale.

View scorecard ↓
🛡 Dynamic test
—

Not live-tested yet — this skill is rated on static analysis only.

About this skill

C-optimized technical analysis with 150+ functions and 61 candlestick pattern recognition functions via TA-Lib

ta-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.

Documentation

C-optimized technical analysis with 150+ functions and 61 candlestick pattern recognition functions via TA-Lib

ta-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 | pip install only |

| API style | NumPy arrays | DataFrame .ta 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
View full documentation

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:
- `+100` = bullish pattern detected
- `-100` = bearish pattern detected
- `0` = no pattern

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 `float64` dtype — TA-Lib requires this
- 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

Score breakdown

Trigger
3.5
Trigger 3.5/10 — Description is a factual one-liner lacking trigger contexts and when-not boundaries; body is a well-organized reference with precise examples but no task-oriented workflow, confirmation gates, or verification steps. Content is rich and accurate; no security concerns.
Structure
7.0
Structure 7/10
Workflow
3.0
Workflow 3/10
Content
8.5
Content 8.5/10
Engineering
7.0
Engineering 7/10
Security
9.5
Security 9.5/10