【コピペOK】TA-LibをPythonにインストールして指標計算する手順

準備・環境構築

※本記事のコードや情報は執筆時点の仕様に基づいています。ライブラリのバージョンアップにより仕様が変更される可能性があるため、必ず公式ドキュメントも併せて確認してください。

Pythonでテクニカル指標を計算しようとすると、RSIやMACDを一から自力実装するのは意外と手間がかかります。

計算ロジックの微妙な違い(SMA方式かEMA方式か、Wilder方式かなど)で結果がズレることもあり、「本当にこの計算で合っているのか」と不安になる場面が少なくありません。

TA-Lib(Technical Analysis Library)を使えば、200種類以上のテクニカル指標を関数1つで正確に算出できます。

しかし、TA-Libは「インストールで挫折する」ことで有名なライブラリです。特にWindows環境ではCコンパイラの依存関係でエラーが頻発し、多くの初心者がここで脱落しています。

この記事では、Windows・Mac・Linuxの各環境でTA-Libを確実にインストールする手順を示し、RSI・ボリンジャーバンド・MACDの3指標を実際に算出するコードを提供します。

すべてコピペでそのまま動作する実装に限定していますので、自分の分析対象に差し替えて応用してください。

TA-Libとは何か:主要な特徴と採用理由

TA-Libを導入する前に、このライブラリの特徴と「なぜ自力実装ではなくTA-Libを使うべきなのか」を明確にします。

TA-Libの3つの強み

TA-Lib(Technical Analysis Library)は、金融市場のテクニカル分析に特化したオープンソースライブラリです。

* 指標数の豊富さ:RSI・MACD・ボリンジャーバンドなど200種類以上のテクニカル指標を網羅しています

* 計算速度:C言語で実装されたコアエンジンをPythonから呼び出す構造のため、pandasの自力実装より数倍〜数十倍高速です

* 計算精度の信頼性:金融業界で長年使われてきた実績があり、TradingViewやMetaTraderなどのチャートツールと同じ計算ロジックを採用しています

自力実装では「RSIのEMA方式とSMA方式の違い」などで計算結果がズレることがありますが、TA-Libを使えばその心配がなくなります。

TA-Libが対応する指標カテゴリ

TA-Libの指標は、大きく以下のカテゴリに分類されます。

* オーバーラップ系:移動平均線(SMA・EMA・WMA・DEMA・TEMAなど)、ボリンジャーバンド、パラボリックSARなど

* モメンタム系:RSI、MACD、ストキャスティクス、CCI、ADX、ウィリアムズ%Rなど

* ボリューム系:OBV(On Balance Volume)、AD(Accumulation/Distribution)など

* ボラティリティ系:ATR(Average True Range)、NATR(Normalized ATR)など

* パターン認識系:ローソク足パターン(ハンマー、包み足、三兵など)61種類

すべての指標は talib.関数名() の1行で呼び出せるため、学習コストが非常に低い点も魅力です。

【コピペOK】OS別インストール手順

TA-Libのインストールは、OSによって手順が大きく異なります。

自分の環境に合ったセクションを参照してください。

Windowsでのインストール(最もエラーが多い環境)

Windowsでは pip install ta-lib を直接実行するとビルドエラーが発生します。

これはTA-LibのPythonラッパーがC言語のTA-Libコアに依存しているためです。

以下の手順で回避してください。


# 手順1:TA-Libのビルド済みホイールをダウンロードしてインストール
# 以下のURLから自分のPythonバージョンに合った.whlファイルを取得します
# https://github.com/cgohlke/talib-build/releases
#
# 例:Python 3.11 + 64bit環境の場合
# TA_Lib-0.4.32-cp311-cp311-win_amd64.whl をダウンロード
#
# ダウンロード後、以下を実行
pip install TA_Lib-0.4.32-cp311-cp311-win_amd64.whl

# 手順2:インストール確認
python -c "import talib; print(talib.__version__)"

Pythonのバージョンとホイールファイルのバージョンが一致しない場合、not a supported wheel on this platform エラーが出ます。python --version でバージョンを確認してから、対応するファイルをダウンロードしてください。

Mac(macOS)でのインストール

macOSではHomebrewでCライブラリを先にインストールし、その後Pythonラッパーを入れます。


# 手順1:HomebrewでTA-Libのコアライブラリをインストール
brew install ta-lib

# 手順2:Pythonラッパーをpipでインストール
pip install ta-lib

# 手順3:インストール確認
python -c "import talib; print(talib.__version__)"

Linux(Ubuntu/Debian)でのインストール

Linuxではソースからビルドするのが最も確実です。


# 手順1:TA-Libのソースコードをダウンロード・ビルド
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/
cmake .
make -j
sudo make install

# 手順2:Pythonラッパーをインストール
pip install ta-lib

# 手順3:インストール確認
python -c "import talib; print(talib.__version__)"

【コピペOK】RSI・ボリンジャーバンド・MACDを算出するコード

TA-Libのインストールが完了したら、実際にテクニカル指標を算出してみましょう。

yfinanceで株価データを取得し、RSI・ボリンジャーバンド・MACDの3指標を一括計算して、チャートとして保存するコードを提供します。

事前準備:ライブラリのインストール


pip install yfinance pandas matplotlib ta-lib

【コピペOK】3指標の一括算出+チャート保存コード


import yfinance as yf
import pandas as pd
import talib
import matplotlib.pyplot as plt

# ==============================
# 設定エリア
# ==============================
SYMBOL = "7203.T"          # トヨタ自動車
PERIOD = "1y"              # 取得期間(1年間)
RSI_WINDOW = 14            # RSI計算期間
BB_WINDOW = 20             # ボリンジャーバンド期間
BB_NBDEV = 2               # ボリンジャーバンド偏差倍率
MACD_FAST = 12             # MACD短期EMA期間
MACD_SLOW = 26             # MACD長期EMA期間
MACD_SIGNAL = 9            # MACDシグナル期間

# ==============================
# データ取得
# ==============================
def fetch_data(symbol: str, period: str) -> pd.DataFrame:
    ""yfinanceで株価データを取得します。""
    ticker = yf.Ticker(symbol)
    df = ticker.history(period=period)
    if df.empty:
        raise ValueError(f"{symbol} のデータを取得できませんでした。")
    return df

# ==============================
# テクニカル指標の算出
# ==============================
def calc_indicators(df: pd.DataFrame) -> pd.DataFrame:
    ""TA-Libで3指標(RSI・ボリンジャーバンド・MACD)を算出します。""
    df = df.copy()
    close = df["Close"].values

    # RSI
    df["RSI"] = talib.RSI(close, timeperiod=RSI_WINDOW)

    # ボリンジャーバンド
    df["BB_Upper"], df["BB_Middle"], df["BB_Lower"] = talib.BBANDS(
        close,
        timeperiod=BB_WINDOW,
        nbdevup=BB_NBDEV,
        nbdevdn=BB_NBDEV,
        matype=0,  # 0=SMA
    )

    # MACD
    df["MACD"], df["MACD_Signal"], df["MACD_Hist"] = talib.MACD(
        close,
        fastperiod=MACD_FAST,
        slowperiod=MACD_SLOW,
        signalperiod=MACD_SIGNAL,
    )

    return df

# ==============================
# チャート描画+保存
# ==============================
def plot_indicators(df: pd.DataFrame, symbol: str):
    ""3指標を含む4段チャートを描画して保存します。""
    fig, axes = plt.subplots(4, 1, figsize=(14, 16), sharex=True)

    # --- 1段目:株価+ボリンジャーバンド ---
    ax1 = axes[0]
    ax1.plot(df.index, df["Close"], color="black", linewidth=1.0, label="Close")
    ax1.plot(df.index, df["BB_Upper"], color="red", linewidth=0.7, linestyle="--", label="BB Upper")
    ax1.plot(df.index, df["BB_Middle"], color="blue", linewidth=0.7, linestyle="--", label="BB Middle")
    ax1.plot(df.index, df["BB_Lower"], color="green", linewidth=0.7, linestyle="--", label="BB Lower")
    ax1.fill_between(df.index, df["BB_Upper"], df["BB_Lower"], alpha=0.08, color="blue")
    ax1.set_title(f"{symbol} - Price & Bollinger Bands", fontsize=13)
    ax1.set_ylabel("Price (JPY)")
    ax1.legend(loc="upper left", fontsize=9)
    ax1.grid(True, alpha=0.3)

    # --- 2段目:RSI ---
    ax2 = axes[1]
    ax2.plot(df.index, df["RSI"], color="purple", linewidth=1.0, label="RSI")
    ax2.axhline(70, color="red", linestyle="--", alpha=0.5, label="Overbought (70)")
    ax2.axhline(30, color="green", linestyle="--", alpha=0.5, label="Oversold (30)")
    ax2.set_title("RSI (14)", fontsize=13)
    ax2.set_ylabel("RSI")
    ax2.set_ylim(0, 100)
    ax2.legend(loc="upper left", fontsize=9)
    ax2.grid(True, alpha=0.3)

    # --- 3段目:MACD ---
    ax3 = axes[2]
    ax3.plot(df.index, df["MACD"], color="blue", linewidth=1.0, label="MACD")
    ax3.plot(df.index, df["MACD_Signal"], color="red", linewidth=1.0, label="Signal")
    ax3.bar(df.index, df["MACD_Hist"], color="gray", alpha=0.4, label="Histogram")
    ax3.axhline(0, color="black", linewidth=0.5)
    ax3.set_title("MACD (12, 26, 9)", fontsize=13)
    ax3.set_ylabel("MACD")
    ax3.legend(loc="upper left", fontsize=9)
    ax3.grid(True, alpha=0.3)

    # --- 4段目:出来高 ---
    ax4 = axes[3]
    ax4.bar(df.index, df["Volume"], color="steelblue", alpha=0.6)
    ax4.set_title("Volume", fontsize=13)
    ax4.set_ylabel("Volume")
    ax4.grid(True, alpha=0.3)

    plt.tight_layout()
    fig.savefig("ta_lib_chart.png", dpi=150, bbox_inches="tight", facecolor="white")
    plt.close(fig)
    print("✔ チャートを保存しました: ta_lib_chart.png")

# ==============================
# 指標値の一覧表示
# ==============================
def print_latest_values(df: pd.DataFrame):
    ""直近日の指標値をコンソールに表示します。""
    latest = df.iloc[-1]
    date_str = df.index[-1].strftime("%Y-%m-%d")

    print(f"n--- {date_str} 時点の指標値 ---")
    print(f"  終値:                {latest['Close']:.1f}")
    print(f"  RSI(14):             {latest['RSI']:.2f}")
    print(f"  BB Upper:            {latest['BB_Upper']:.1f}")
    print(f"  BB Middle:           {latest['BB_Middle']:.1f}")
    print(f"  BB Lower:            {latest['BB_Lower']:.1f}")
    print(f"  MACD:                {latest['MACD']:.2f}")
    print(f"  MACD Signal:         {latest['MACD_Signal']:.2f}")
    print(f"  MACD Histogram:      {latest['MACD_Hist']:.2f}")

# ==============================
# メイン処理
# ==============================
if __name__ == "__main__":
    # 1. データ取得
    print(f"=== {SYMBOL} のテクニカル指標を算出 ===n")
    df = fetch_data(SYMBOL, PERIOD)

    # 2. 指標算出
    df = calc_indicators(df)

    # 3. 直近値の表示
    print_latest_values(df)

    # 4. チャート描画+保存
    plot_indicators(df, SYMBOL)

    # 5. CSV出力(任意)
    output_cols = ["Close", "Volume", "RSI", "BB_Upper", "BB_Middle", "BB_Lower", "MACD", "MACD_Signal", "MACD_Hist"]
    df[output_cols].to_csv("ta_lib_output.csv")
    print("✔ CSVを保存しました: ta_lib_output.csv")

コードの処理フロー解説

上記のコードは、以下の5ステップで構成されています。

* データ取得:yfinanceで指定銘柄の1年分の日足データを取得します

* 指標算出:TA-Libの RSI()BBANDS()MACD() 関数で3指標を一括計算します

* 直近値表示:最新日の各指標値をコンソールに出力します

* チャート描画:株価+ボリンジャーバンド・RSI・MACD・出来高の4段チャートをPNG画像として保存します

* CSV出力:全期間の指標値をCSVファイルとして保存します

calc_indicators() 関数内に talib.ATR()talib.STOCH() などを追加すれば、算出する指標を自由に拡張できます。

TA-Lib関数の使い方:引数と戻り値の読み解き方

TA-Libの関数は統一的なインターフェースを持っていますが、関数ごとに引数や戻り値の数が異なります。

ここでは、関数を正しく使うための実践的なルールを解説します。

入力データの渡し方

TA-Libの関数は、NumPy配列(numpy.ndarray)を入力として受け取ります。

pandasのSeriesをそのまま渡すと内部で自動変換されますが、明示的に .values で変換しておくほうが安全です。


# 推奨:明示的にNumPy配列へ変換
rsi = talib.RSI(df["Close"].values, timeperiod=14)

# 非推奨:pandas.Seriesをそのまま渡す(動作はするが警告が出る場合がある)
rsi = talib.RSI(df["Close"], timeperiod=14)

戻り値が複数ある関数の扱い方

ボリンジャーバンドやMACDのように、戻り値が複数ある関数はタプルで返されます。

* talib.BBANDS():3つの戻り値(upper, middle, lower)

* talib.MACD():3つの戻り値(macd, signal, hist)

* talib.STOCH():2つの戻り値(slowk, slowd)

* talib.RSI():1つの戻り値(rsi)

戻り値の数を間違えると ValueError: too many values to unpack が発生します。公式ドキュメントまたは help(talib.関数名) で戻り値の数を確認してから使用してください。

計算期間(timeperiod)とNaN

TA-Libの関数は、計算に必要なデータが不足している先頭部分を NaN で埋めます。

RSI(14日)の場合、先頭14行は NaN になります。

グラフ描画や売買シグナル生成の際に NaN が残っていると予期しない動作を起こすため、dropna() で除去するか、NaN を明示的にスキップするロジックを入れてください。

よくあるエラーと対処法

TA-Libのインストール・利用で初心者がつまずきやすいポイントを整理します。

error: Microsoft Visual C++ 14.0 or greater is required(Windows)

Windows環境で pip install ta-lib を直接実行した場合に発生する最も多いエラーです。

TA-LibのPythonラッパーがCコードをコンパイルしようとして、Visual C++のビルドツールが見つからないために失敗しています。

以下を試してください。

* ビルド済みホイール(.whlファイル)を使う:本記事のWindowsインストール手順に従ってください

* conda経由でインストールする:conda install -c conda-forge ta-lib でビルド済みバイナリがインストールされます

* Visual Studio Build Toolsをインストールする:Microsoft公式サイトから「C++によるデスクトップ開発」ワークロードを入れれば pip install ta-lib が通るようになります

ImportError: libta_lib.so.0: cannot open shared object file(Linux)

LinuxでPythonラッパーのインストールは成功したが、コアライブラリのパスが通っていない場合に発生します。

以下を実行してライブラリキャッシュを更新してください。


sudo ldconfig

それでも解決しない場合は、/usr/local/lib にライブラリファイルが存在するか確認し、LD_LIBRARY_PATH 環境変数に追加してください。

talib.RSI() の結果が自力実装と微妙にズレる

TA-LibのRSIはWilder(指数移動平均)方式を採用しています。

pandasの rolling().mean() で実装したSMA方式のRSIとは計算ロジックが異なるため、結果がズレるのは正常な動作です。

TradingViewやMetaTraderのRSIと一致させたい場合は、TA-Libの計算結果をそのまま信頼してください。これらのツールもWilder方式を採用しています。

まとめ

この記事では、テクニカル分析ライブラリ「TA-Lib」のOS別インストール手順と、RSI・ボリンジャーバンド・MACDを実際に算出するPythonコードを解説しました。

要点を整理します。

* TA-Libは200種類以上のテクニカル指標を関数1つで算出できるライブラリであり、計算精度と速度の両面で自力実装より優れています

* Windowsでは pip install ta-lib が通らないケースが大半のため、ビルド済みホイール(.whlファイル)またはcondaを使ってインストールしてください

* 関数の戻り値の数は指標ごとに異なるため、公式ドキュメントまたは help() で事前に確認してください

* TA-LibのRSIはWilder方式であり、SMA方式の自力実装とは結果がズレる点に注意してください

* 先頭のNaN行はグラフ描画やシグナル生成でエラーの原因になるため、明示的に除去またはスキップしてください

次のステップとして、TA-Libで算出した指標を売買シグナルに変換し、バックテストでパフォーマンスを検証する工程に進んでみてください。

calc_indicators() 関数に talib.ATR()talib.STOCH() を追加するだけで、分析対象の指標を自由に拡張できます。

タイトルとURLをコピーしました