TA-Lib辞典
こんにちは、minaulです。
今回は、TA-Libがカバーしているテクニカル指標のほぼ全てを、公式から和訳して羅列するだけの記事を書きたいと思います。
はじめに
TA-Libとは、Technical Analysis Library の略であり、その名の通りテクニカル分析に特化した機能を有するPython対応ライブラリです。
公式サイトによれば、150以上のテクニカル指標に対応しているようです。
指定のコードを書くだけで、高速計算して値を返してくれるので、金融系モデリングを一気に効率化してくれる便利ツール、という位置付けになります。
記事の内容は、以下の公式サイトを和訳して要約しているだけです。
なぜこの記事を書こうと思ったかというと、TA-Lib関連の記事は結構ありますが、内容が限定的なものがほとんどで、網羅的に抑えている日本語ソースが少ないという中で、一定の需要が存在するだろうと思ったからです。
現に私もそういうサイトがあればいいな、と思っていたのでこの機会にまとめます。
辞書的な使い途として、覗いていただけたらと思います。
仮想通貨界隈以外の方にも、活用していただけたら嬉しいです。
基本説明
TA-Libを使ったことない方に向けても、環境構築レベルで1から解説します。
インストール
TA-Libのインストールに関しては、少し手間取るかもしれません。
以下の説明でも詰まる場合は、各自で調べて下さい。
先人たちの知恵をフル活用しましょう。
Mac
筆者のMac環境では、以下をターミナルで実行することでインストールしました。
brew install TA-Lib
pip installではうまくいきませんでした。
事前にHomebrewをインストールする必要があります。
windows
筆者はwindows仮想環境にて、Anacondaのコマンドプロンプトで以下のようにインストールしました。
conda install -c conda-forge ta-lib
インポート
OSにインストールできたら、次は開発環境にライブラリをインポートします。
import talib
データ準備
当然ですが、分析対象のデータが存在しなければ、TA-Libは使えません。
与えるデータは、始値・高値・安値・終値・出来高の5種類です。
データ数は、同じ長さである必要があります。
データの形式はNumPyのndarray、あるいはPandasのdataframeなどで入力します。
ちなみに、入力と出力は同じ形でデータが返ります。
例えば、ndarrayの価格データでtalibに渡すと、指標の計算結果はndarray形式のデータで受け取ります。
分析対象のデータは各自で用意していただければと思いますが、準備の仕方が分からないなどの場合は、サンプルデータとして公式サイトにはランダムな配列の例が紹介されています。
import numpy as np
# note that all ndarrays must be the same length!
inputs = {
'open': np.random.random(100),
'high': np.random.random(100),
'low': np.random.random(100),
'close': np.random.random(100),
'volume': np.random.random(100)
}
ランダムデータでも問題ないですが、より実践に近づけるため、参考までに2022/1/1〜2022/06/30の日足BTC価格データを準備するサンプルコードも紹介します。
# CryptowatchからBTCデータを取得する関数の呼び出し
price = get_price(86400, before=1656597600, after=1640962800) # 86400秒で1日、unixtimeで期間指定
# 格納する配列の準備
time = []
open = []
high = []
low = []
close = []
volume = []
# 各配列にデータを格納
for i in range(len(price)):
time.append(price[i]["close_time_dt"])
open.append(price[i]["open_price"])
high.append(price[i]["high_price"])
low.append(price[i]["low_price"])
close.append(price[i]["close_price"])
volume.append(price[i]["volume"])
# dataframeにデータを格納
df = pd.DataFrame({
"time_dt" : time,
"open" : open,
"high" : high,
"low" : low,
"close" : close,
"volume" : volume})
# dfの表示
display(df)
BTC価格データはCryptowatchから取得しています。
get_price関数の中身については、以下の記事にあるので参照ください。
また、記事中でTA-Libから取ってくる指標データは、全てこのdataframeに格納するようなコードにしています。
理由としては、一元管理が容易であり、より実践的なデータ管理が可能になるからです。
ただし、別々で個別の値を返すだけのコードでも、もちろん問題はありません。
データ入力/出力
一例として、トレンド系指標の一番上に載っているボリンジャーバンドのデータ入力/出力のサンプル例を紹介します。
公式サイトには、以下のようにサンプルコード例があります。
upperband, middleband, lowerband = BBANDS(close, timeperiod=5, nbdevup=2, nbdevdn=2, matype=0)
この通りに記述しても良いのですが、上記ではいくつかの前提条件があります。
まず、BBANDS単体で関数を呼び出していますが、この場合はインポートの時点で、import BBANDS from talib と単体で指定する必要があります。
また、closeには基本的にNumPy型のデータを入力する必要があります。
その場合、upperbandなどの値には同じ型でのデータが出力されます。
本記事では、前述の通りimport talibとdataframeを前提としているため、
df["upperband"], df["middleband"], df["lowerband"] = talib.BBANDS(df["close"], timeperiod=5, nbdevup=2, nbdevdn=2, matype=0)
のように書き換えています。
ちなみに、引数の数値は全てデフォルトのまま書き写します。
指標一覧
大枠として以下の通りに分けています。
・トレンド系指標
・モメンタム系指標
・ボリューム系指標
・ボラティリティ系指標
・価格系指標
・波動系指標
・統計指標
トレンド系指標
BBANDS - Bollinger Bands
ボリンジャーバンド
df["upperband"], df["middleband"], df["lowerband"] = talib.BBANDS(df["close"], timeperiod=5, nbdevup=2, nbdevdn=2, matype=0)
DEMA - Double Exponential Moving Average
二重指数移動平均線
df["DEMA"] = talib.DEMA(df["close"], timeperiod=30)
EMA - Exponential Moving Average
指数平滑移動平均線
df["EMA"] = talib.EMA(df["close"], timeperiod=30)
HT_TRENDLINE - Hilbert Transform - Instantaneous Trendline
短期トレンドライン(ヒルベルト変換)
df["HT_TRENDLINE"] = talib.HT_TRENDLINE(df["close"])
KAMA - Kaufman Adaptive Moving Average
カウフマン適応型移動平均線
df["KAMA"] = talib.KAMA(df["close"], timeperiod=30)
MA - Moving average
移動平均線
df["MA"] = talib.MA(df["close"], timeperiod=30, matype=0)
MAMA - MESA Adaptive Moving Average
メサ適応型移動平均線
df["mama"], df["fama"] = talib.MAMA(df["close"], fastlimit=0, slowlimit=0)
MAVP - Moving average with variable period
移動平均線(変動周期)
df["MAVP"] = talib.MAVP(df["close"], df["periods"], minperiod=2, maxperiod=30, matype=0)
MIDPOINT - MidPoint over period
中間点
df["MIDPOINT"] = talib.MIDPOINT(df["close"], timeperiod=14)
MIDPRICE - Midpoint Price over period
中間価格
df["MIDPRICE"] = talib.MIDPRICE(df["high"], df["low"], timeperiod=14)
SAR - Parabolic SAR
パラボリックSAR
df["SAR"] = talib.SAR(df["high"], df["low"], acceleration=0, maximum=0)
SAREXT - Parabolic SAR - Extended
パラボリックSAR(機能拡張版)
df["SAREXT"] = talib.SAREXT(df["high"], df["low"], startvalue=0, offsetonreverse=0, accelerationinitlong=0, accelerationlong=0, accelerationmaxlong=0, accelerationinitshort=0, accelerationshort=0, accelerationmaxshort=0)
SMA - Simple Moving Average
単純移動平均線
df["SMA"] = talib.SMA(df["close"], timeperiod=30)
T3 - Triple Exponential Moving Average (T3)
三重指数移動平均線
df["T3"] = talib.T3(df["close"], timeperiod=5, vfactor=0)
TEMA - Triple Exponential Moving Average
三重指数移動平均線
df["TEMA"] = talib.TEMA(df["close"], timeperiod=30)
TRIMA - Triangular Moving Average
三角移動平均線
df["TRIMA"] = talib.TRIMA(df["close"], timeperiod=30)
WMA - Weighted Moving Average
加重移動平均線
df["WMA"] = talib.WMA(df["close"], timeperiod=30)
トレンド系指標のdfへの出力イメージは以下の通りです。
指標値は見やすくするため、全てround()で丸めています。
列が多くて視覚できないですが、MAMAはデフォルトでは計算不可のため、0.5, 0.05の値を設定しました。
MAVPのperiodが分からなかったので、計算を省いています。
モメンタム系指標
ADX - Average Directional Movement Index
平均方向性指数
df["ADX"] = talib.ADX(df["high"], df["low"], df["close"], timeperiod=14)
ADXR - Average Directional Movement Index Rating
平滑化平均方向性指数
df["ADXR"] = talib.ADXR(df["high"], df["low"], df["close"], timeperiod=14)
APO - Absolute Price Oscillator
絶対価格オシレーター
df["APO"] = talib.APO(df["close"], fastperiod=12, slowperiod=26, matype=0)
AROON - Aroon
アルーン
df["aroondown"], df["aroonup"] = talib.AROON(df["high"], df["low"], timeperiod=14)
AROONOSC - Aroon Oscillator
アルーンオシレーター
df["AROONOSC"] = talib.AROONOSC(df["high"], df["low"], timeperiod=14)
BOP - Balance Of Power
バランス・オブ・パワー
df["BOP"] = talib.BOP(df["open"], df["high"], df["low"], df["close"])
CCI - Commodity Channel Index
商品チャネル指数
df["CCI"] = talib.CCI(df["high"], df["low"], df["close"], timeperiod=14)
CMO - Chande Momentum Oscillator
シャンデ・モメンタムオシレーター
df["CMO"] = talib.CMO(df["close"], timeperiod=14)
DX - Directional Movement Index
方向性指数
df["DX"] = talib.DX(df["high"], df["low"], df["close"], timeperiod=14)
MACD - Moving Average Convergence/Divergence
移動平均収束拡散法
df["macd"], df["macdsignal"], df["macdhist"] = talib.MACD(df["close"], fastperiod=12, slowperiod=26, signalperiod=9)
MACDEXT - MACD with controllable MA type
移動平均収束拡散法(機能拡張版)
df["macd"], df["macdsignal"], df["macdhist"] = talib.MACDEXT(df["close"], fastperiod=12, fastmatype=0, slowperiod=26, slowmatype=0, signalperiod=9, signalmatype=0)
MACDFIX - Moving Average Convergence/Divergence Fix 12/26
移動平均収束拡散法(固定版)
df["macd"], df["macdsignal"], df["macdhist"] = talib.MACDFIX(df["close"], signalperiod=9)
MFI - Money Flow Index
マネーフロー指数
df["MFI"] = talib.MFI(df["high"], df["low"], df["close"], df["volume"], timeperiod=14)
MINUS_DI - Minus Directional Indicator
方向インジケーター(マイナス)
df["MINUS_DI"] = talib.MINUS_DI(df["high"], df["low"], df["close"], timeperiod=14)
MINUS_DM - Minus Directional Movement
方向性(マイナス)
df["MINUS_DM"] = talib.MINUS_DM(df["high"], df["low"], timeperiod=14)
MOM - Momentum
モメンタム
df["MOM"] = talib.MOM(df["close"], timeperiod=10)
PLUS_DI - Plus Directional Indicator
方向インジケーター(プラス)
df["PLUS_DI"] = talib.PLUS_DI(df["high"], df["low"], df["close"], timeperiod=14)
PLUS_DM - Plus Directional Movement
方向性(プラス)
df["PLUS_DM"] = talib.PLUS_DM(df["high"], df["low"], timeperiod=14)
PPO - Percentage Price Oscillator
割合価格オシレーター
df["PPO"] = talib.PPO(df["close"], fastperiod=12, slowperiod=26, matype=0)
ROC - Rate of change : ((price/prevPrice)-1)*100
価格変化率
df["ROC"] = talib.ROC(df["close"], timeperiod=10)
ROCP - Rate of change Percentage: (price-prevPrice)/prevPrice
価格変化率(パーセンテージ表示)
df["ROCP"] = talib.ROCP(df["close"], timeperiod=10)
ROCR - Rate of change ratio: (price/prevPrice)
価格変化レシオ
df["ROCR"] = talib.ROCR(df["close"], timeperiod=10)
ROCR100 - Rate of change ratio 100 scale: (price/prevPrice)*100
価格変化レシオ(整数表示)
df["ROCR100"] = talib.ROCR100(df["close"], timeperiod=10)
RSI - Relative Strength Index
相対力指数
df["RSI"] = talib.RSI(df["close"], timeperiod=14)
STOCH - Stochastic
ストキャスティクス
df["slowk"], df["slowd"] = talib.STOCH(df["high"], df["low"], df["close"], fastk_period=5, slowk_period=3, slowk_matype=0, slowd_period=3, slowd_matype=0)
STOCHF - Stochastic Fast
ファストストキャスティクス
df["fastk"], df["fastd"] = talib.STOCHF(df["high"], df["low"], df["close"], fastk_period=5, fastd_period=3, fastd_matype=0)
STOCHRSI - Stochastic Relative Strength Index
ストキャスティクス相対力指数
df["fastk"], df["fastd"] = talib.STOCHRSI(df["close"], timeperiod=14, fastk_period=5, fastd_period=3, fastd_matype=0)
TRIX - 1-day Rate-Of-Change (ROC) of a Triple Smooth EMA
一日変化率
df["TRIX"] = talib.TRIX(df["close"], timeperiod=30)
ULTOSC - Ultimate Oscillator
アルティメット・オシレーター
df["ULTOSC"] = talib.ULTOSC(df["high"], df["low"], df["close"], timeperiod1=7, timeperiod2=14, timeperiod3=28)
WILLR - Williams' %R
ウィリアムズ%R
df["WILLR"] = talib.WILLR(df["high"], df["low"], df["close"], timeperiod=14)
ボリューム系指標
AD - Chaikin A/D Line
蓄積/発散
df["AD"] = talib.AD(df["high"], df["low"], df["close"], df["volume"])
ADOSC - Chaikin A/D Oscillator
チャイキン・オシレーター
df["ADOSC"] = talib.ADOSC(df["high"], df["low"], df["close"], df["volume"], fastperiod=3, slowperiod=10)
OBV - On Balance Volume
オン・バランス・ボリューム
df["OBV"] = talib.OBV(df["close"], df["volume"])
ボラティリティ系指標
ATR - Average True Range
アベレージ・トゥルー・レンジ
df["ATR"] = talib.ATR(df["high"], df["low"], df["close"], timeperiod=14)
NATR - Normalized Average True Range
標準化アベレージ・トゥルー・レンジ
df["NATR"] = talib.NATR(df["high"], df["low"], df["close"], timeperiod=14)
TRANGE - True Range
トゥルー・レンジ
df["TRANGE"] = talib.TRANGE(df["high"], df["low"], df["close"])
価格系指標
AVGPRICE - Average Price
平均価格
df["AVGPRICE"] = talib.AVGPRICE(df["open"], df["high"], df["low"], df["close"])
MEDPRICE - Median Price
中央価格
df["MEDPRICE"] = talib.MEDPRICE(df["high"], df["low"])
TYPPRICE - Typical Price
基準価格
df["TYPPRICE"] = talib.TYPPRICE(df["high"], df["low"], df["close"])
WCLPRICE - Weighted Close Price
加重終値
df["WCLPRICE"] = talib.WCLPRICE(df["high"], df["low"], df["close"])
波動系指標
HT_DCPERIOD - Hilbert Transform - Dominant Cycle Period
ドミナントサイクル期間(ヒルベルト変換)
df["HT_DCPERIOD"] = talib.HT_DCPERIOD(df["close"])
HT_DCPHASE - Hilbert Transform - Dominant Cycle Phase
ドミナントサイクル位相(ヒルベルト変換)
df["HT_DCPHASE"] = talib.HT_DCPHASE(df["close"])
HT_PHASOR - Hilbert Transform - Phasor Components
フェーザ成分(ヒルベルト変換)
df["inphase"], df["quadrature"] = talib.HT_PHASOR(df["close"])
HT_SINE - Hilbert Transform - SineWave
正弦波(ヒルベルト変換)
df["sine"], df["leadsine"] = talib.HT_SINE(df["close"])
HT_TRENDMODE - Hilbert Transform - Trend vs Cycle Mode
トレンド対サイクル(ヒルベルト変換)
df["integer"] = talib.HT_TRENDMODE(df["close"])
統計指標
BETA - Beta
ベータ値
df["BETA"] = talib.BETA(df["high"], df["low"], timeperiod=5)
CORREL - Pearson's Correlation Coefficient (r)
ピアソンの積率相関係数
df["CORREL"] = talib.CORREL(df["high"], df["low"], timeperiod=30)
LINEARREG - Linear Regression
線形回帰
df["LINEARREG"] = talib.LINEARREG(df["close"], timeperiod=14)
LINEARREG_ANGLE - Linear Regression Angle
線形回帰(角度)
df["LINEARREG_ANGLE"] = talib.LINEARREG_ANGLE(df["close"], timeperiod=14)
LINEARREG_INTERCEPT - Linear Regression Intercept
線形回帰(切片)
df["LINEARREG_INTERCEPT"] = talib.LINEARREG_INTERCEPT(df["close"], timeperiod=14)
LINEARREG_SLOPE - Linear Regression Slope
線形回帰(傾き)
df["LINEARREG_SLOPE"] = talib.LINEARREG_SLOPE(df["close"], timeperiod=14)
STDDEV - Standard Deviation
標準偏差
df["STDDEV"] = talib.STDDEV(df["close"], timeperiod=5, nbdev=1)
TSF - Time Series Forecast
時系列予測
df["TSF"] = talib.TSF(df["close"], timeperiod=14)
VAR - Variance
分散
df["VAR"] =talib.VAR(df["close"], timeperiod=5, nbdev=1)
最後に
いかがでしたでしょうか。
めちゃくちゃ多いですね。さすがに疲れました。
マイナーな指標もカバーしているため、検索結果が乏しいものもあり、一部日本語訳が適切でない部分もありますが、ご容赦ください。
それではみなさま、よきテクニカルライフを〜。
お読みいただきありがとうございました。