Life is Like a Boat

忘備録や経済、投資、プログラミングに関するメモやtipsなど

テクニカル指標が充実したPythonライブラリTa-lib

テクニカル指標が充実したPythonライブラリTa-libを試しに使ってみました。 きっかけはこちらのQiita記事。

インストール

先にbrew install ta-lib
して pip install ta-lib
します。pip installするのはta-libのPython wrapperなので、元のta-lib(c++)を先にbrew installする必要があります。

ソース

import pandas as pd
pd.core.common.is_list_like = pd.api.types.is_list_like
import pandas_datareader.data as web
from datetime import datetime
import talib
import numpy as np

start = datetime(2018, 7, 1)
end = datetime(2018, 7, 30)

from datetime import datetime
df = web.DataReader('6670.JP', 'stooq',start, end)

# stooqから取得する価格データは新しい日付が上にくるので、昇順にしてinplace=Trueで元のdfを変更します。
df.sort_index(ascending=True, inplace=True)
close = np.array(df['Close'])
output = close.copy()

cols = ['Close']

# 標準偏差3のボリンジャーバンドを得たい。期間は20日にしました。matypeはmoving averageのタイプらしいです。 0はSMA Simple Moving Average。
for arr in talib.BBANDS(close, timeperiod=20, nbdevup=3, nbdevdn=3,matype=0):
    output = np.c_[output, arr]
cols += ['BBANDS_upperband', 'BBANDS_middleband', 'BBANDS_lowerband']

data = pd.DataFrame(output, index=df.index, columns=cols)

検証

talib.BBANDS(close, timeperiod=20, nbdevup=3, nbdevdn=3,matype=0)で意図したボリンジャーバンドの値が算出されているか、TradingViewを使って検証してみました。

f:id:nerimplo:20180801105106p:plain

f:id:nerimplo:20180801103222p:plain

7月30日分をみると、Ta-libによると-3σが781.84で+3σが867.16。TradingViewの計算では-3σが781.84で+3σが867.16。あってますね!

まとめ

Ta-libはテクニカル指標がかなり充実しています。MESA Adaptive Moving Averageのような初めて聞く指標もありました。算出方法は下記引用したQiitaから。
ファンダメンタル分析で抽出した銘柄群のエントリーポイントを機械的に求める時にこのライブラリを使うことを想定しています。

引用

qiita.com