TA-Lib は、C で書かれたテクニカル分析ライブラリ本体と、その Python ラッパー(TA-Lib)を組み合わせて使うパッケージです。手軽に 100 種類以上の指標を呼び出せる反面、C ライブラリの依存関係でインストール時につまずきやすい ことで知られています。本記事では OS 別の導入手順と、SMA・RSI を呼び出すところまでを整理します。

目次

  1. TA-Lib の構成
  2. OS 別インストール手順
  3. インストールの確認
  4. SMA を呼び出す
  5. RSI を呼び出す
  6. チャートに重ねる
  7. ハマりやすい罠
  8. 自前実装との結果比較

TA-Lib の構成

TA-Lib は 2 段構造 です。

  • C 製の本体ライブラリ: ta-lib(以下「C 本体」)
  • Python バインディング: TA-Lib(pip install TA-Lib で入る方)

Python パッケージだけを pip install TA-Lib してもビルドが落ちることが多いのは、C 本体が見つからないためです。先に C 本体を入れてから Python ラッパーを入れる、という順序が原則です。

OS 別インストール手順

macOS(Homebrew)

Terminal window
brew install ta-lib
pip install TA-Lib

Apple Silicon(arm64)の場合、Homebrew の C 本体が /opt/homebrew/lib に入るため、Python バインディングのビルドで LDFLAGS の指定が必要になることがあります。

Terminal window
export TA_LIBRARY_PATH=/opt/homebrew/lib
export TA_INCLUDE_PATH=/opt/homebrew/include
pip install TA-Lib

Ubuntu / Debian

公式 apt には C 本体が無いため、ソースからビルドします。

Terminal window
sudo apt-get update
sudo apt-get install -y build-essential wget
cd /tmp
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
make
sudo make install
sudo ldconfig
pip install TA-Lib

Windows

Windows では、C 本体を自分でビルドするのは手間がかかります。Conda 経由 が最短です。

Terminal window
conda install -c conda-forge ta-lib

Anaconda / Miniconda を使っていない場合、Visual C++ ビルドツール + 公式配布のバイナリをダウンロードする手順もありますが、Conda のほうがトラブルは少なくなります。

Docker(再現性重視)

OS 依存を避けたい場合、Docker でビルド済みイメージを使う構成が現実的です。

FROM python:3.12-slim
RUN apt-get update && apt-get install -y \
build-essential wget \
&& rm -rf /var/lib/apt/lists/*
RUN cd /tmp \
&& 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 \
&& make && make install \
&& rm -rf /tmp/ta-lib-0.6.4*
RUN pip install --no-cache-dir TA-Lib pandas numpy

CI で使うなら、ベースイメージのキャッシュが効くようコマンド順を意識します。

インストールの確認

最小コードでバージョンを確認します。

import talib
print(talib.__version__)
print(talib.get_function_groups().keys())

get_function_groups() を呼ぶと、Overlap Studies / Momentum Indicators / Pattern Recognition などのカテゴリ一覧が確認できます。

SMA を呼び出す

TA-Lib は NumPy 配列を入出力 にする設計です。pandas の Series を渡すなら .values で NumPy 化します。

import numpy as np
import pandas as pd
import talib
rng = np.random.default_rng(seed=2)
n = 200
returns = rng.normal(loc=0.0005, scale=0.012, size=n)
close = pd.Series(
1500 * np.exp(np.cumsum(returns)),
index=pd.date_range("2025-09-01", periods=n, freq="B"),
name="C",
)
sma25 = talib.SMA(close.values, timeperiod=25)
sma25 = pd.Series(sma25, index=close.index, name="sma25")
print(sma25.tail())

冒頭 24 日は NaN が返ります(pandas の rolling と同じ挙動)。

pandas-wrapper として、talib.abstract 経由で DataFrame をそのまま渡す書き方も用意されています。

from talib import abstract
ohlc = pd.DataFrame({"C": close.values}, index=close.index)
sma25_df = abstract.SMA(ohlc, timeperiod=25)

RSI を呼び出す

rsi14 = talib.RSI(close.values, timeperiod=14)
rsi14 = pd.Series(rsi14, index=close.index, name="rsi14")
print(rsi14.tail())

TA-Lib の RSI は Wilder のスムージング を使います。#9-4「RSI を計算してチャートに重ねる」 で書いた自前実装と数値が一致するはずです。差が出るときは adjust の指定や ddof の選択が原因になることが多いです。

チャートに重ねる

import matplotlib.pyplot as plt
fig, (ax1, ax2) = plt.subplots(
nrows=2, sharex=True, figsize=(11, 6),
gridspec_kw={"height_ratios": [3, 1]},
)
ax1.plot(close.index, close.values, color="black", linewidth=0.8, label="C")
ax1.plot(sma25.index, sma25.values, color="tab:blue", label="SMA(25)")
ax1.set_title("TA-Lib SMA & RSI")
ax1.legend()
ax1.grid(alpha=0.3)
ax2.plot(rsi14.index, rsi14.values, color="tab:purple")
ax2.axhline(70, color="red", linestyle="--", alpha=0.6)
ax2.axhline(30, color="green", linestyle="--", alpha=0.6)
ax2.set_ylim(0, 100)
ax2.set_ylabel("RSI(14)")
ax2.grid(alpha=0.3)
plt.tight_layout()
plt.savefig("talib_first.png", dpi=120)
plt.close(fig)
TA-Lib で計算した SMA(25) と RSI(14) を 2 段で並べたチャート

ハマりやすい罠

  • pip でビルドが落ちる: C 本体が入っていない / 検出できない。本体の prefixTA_LIBRARY_PATH を一致させる
  • macOS で ld: library not found for -lta-lib: arm64 と x86_64 の混在。brew --prefix ta-lib の出力を確認して環境変数を合わせる
  • Windows でコンパイラが無い: Visual C++ ビルドツールが必要。Conda を使うのが手軽
  • 戻り値が NumPy 配列: pandas に変換するときは index を渡し直す。これを忘れると後段の concat で日付が崩れる
  • ddof の違い: 自前実装の標準偏差(ddof=1 既定)と TA-Lib(ddof=0)で結果がずれることがある

自前実装との結果比較

SMA は単純平均なので、自前実装と TA-Lib の値は 小数点以下の数桁まで一致 します。RSI(Wilder)も、初期 N 日のシードを単純平均にしておけば、概ね一致します。

def rsi_wilder(close: pd.Series, window: int = 14) -> pd.Series:
delta = close.diff()
up = delta.clip(lower=0).ewm(alpha=1/window, adjust=False, min_periods=window).mean()
dn = (-delta).clip(lower=0).ewm(alpha=1/window, adjust=False, min_periods=window).mean()
rs = up / dn.replace(0, np.nan)
return 100 - 100 / (1 + rs)
own = rsi_wilder(close, 14).rename("own")
tal = pd.Series(talib.RSI(close.values, timeperiod=14), index=close.index, name="tal")
diff = (own - tal).abs().dropna()
print(diff.describe())

差が大きい場合は、TA-Lib のソースで使われる初期化方法と自前実装の seed の取り方を見直します。

生成AI へのプロンプト例

C 本体のインストールを含めたセットアップスクリプトを依頼するときの例です。

Ubuntu 22.04 LTS のクリーンな環境で、TA-Lib(C 本体 + Python バインディング)を
セットアップする shell スクリプトを書いてください。
要件:
- 非対話実行(apt-get -y を徹底)
- ta-lib のソースは GitHub Releases から取得
- /usr に prefix インストール
- 完了後に python -c "import talib; print(talib.__version__)" で動作確認
- 失敗したら exit 1 で止める(set -euo pipefail)
- スクリプト末尾に、Apple Silicon の macOS で同じことをやる場合の手順をコメントで添える

まとめ

  • TA-Lib は C 本体 + Python ラッパー の 2 段構造
  • 先に C 本体、次に pip install TA-Lib の順序が基本
  • macOS は brew、Linux はソースビルド、Windows は Conda が最短
  • 関数は NumPy 配列を入出力。pandas Series に戻すときは index を再付与する
  • 自前実装と数値が一致するか比較して、ライブラリの挙動を理解しておく