【Python】テクニカル指標が簡単に計算できるTa-libがすごすぎる件

スポンサーリンク

前回はPythonで移動平均線・MACD・RSIなどのテクニカル指標を計算しましたが、今回は他のテクニカル指標も計算していきたいと思います。手動で計算しようかなーと思っていたのですが、ネットでググると「Ta-lib」なるテクニカル指標を計算するライブラリを見つけたので、試しに使ってみたところ結構便利だったので紹介します。

Ta-Libとは?

公式のサイト(英語)はこちらです。ライブラリの中身はオープンソースでGitに公開されています。読み方はそのままで「タリブ」です。

Ta-Libは、複数の言語で使用可能なテクニカル指標の分析ツールです。対応言語はC/C++Java、.NET、Perl、Pythonと各言語ごとにダウンロードファイルがあります。

このTa-libの何が便利かというと、テクニカル指標が非常に簡単に生成する事が可能な点ですね。公式ドキュメントを読めばわかりますがが、対応しているテクニカル指標の数は200を超えており、ストキャスティックスやMACDなどの有名どころからDMIやウィリアム%なども作る事が可能みたいです。

対応しているテクニカル指標は本当にいろいろあり、ざっと見ただけでも

・ボリンジャーバンド(BBNADS)
・指数平滑移動平均線(EMA)
・適応型移動平均(KAMA)
・単純移動平均線(MA)
・MESA 適応型移動平均(MAMA)
・パラボリック SAR(SAR)
・3重指数移動平均(T3)
・重み付き移動平均(WMA)

・平均方向性指数(ADX)
・アブソリュートプライス オシレーター(APO)
・MACD(MACD)
・マネーフローインデックス(MFI)
・ストキャスティックRSIオシレーター(STOCHRSI)

・平均根 – (当日始値 + 当日高値 + 当日安値 + 当日終値) ÷ 4(AVGPRICE)
・中央値価格 -(当日高値 + 当日安値 + 当日終値) ÷ 3(MEDPRICE)
・加重終値 – (当日高値 + 当日安値 + 当日終値 × 2) ÷ 4(WCLPRICE)

などなど他にも多数の指標あり。テクニカル指標系はTa-Libだけで、本当に事足ると思います。pandasで単純移動平均が計算できるー!って喜んでたらtalibはそんな比じゃありませんでした笑。

他にもロウソク足のパターン認識もあるみたいで、本当にテクニカル指標はほぼすべてそろっているんじゃないかなと思います。僕はローソク線は使わないのであんまり調べていませんが、使いたいという人は本家のサイトに載っているので調べてみてください。

Ta-libのインストール方法

ということで見つけた当初、これは便利じゃん!!と思ってさっそく使ってみようと思ったのですが、qittaあたりに書いてあるpipコマンドでWin10のAnaconda(py3.6)環境にインストールしようとしたところ、ちょっと詰んだので、私ができたインストール方法を紹介しておきます。

たぶんTa-lib python なんかでググると一番上に出てくるqittaだとpip install Ta-lib でインストールしました的で話が進んでいると思うのですが、自分の場合はCC+のvisualがないとかで環境が構築できないとターミナルでエラーが返ってきたので、それをインストールしたのですが、結局治りませんでした。

追記:解決しました!!

なので、ライブラリのファイル自体を公式サイトから落としてきて、それをコマンドプロンプトのディレクトリに配置して展開するという方法でインストールするとうまくいきました。

Windows10 python3.6環境であれば、まず下のサイトからライブラリをダウンロードします。→https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib

種類が色々ありますが

32bitOS ⇒ TA_Lib-0.4.17-cp36-cp36m-win32.whl
64bitOS ⇒ TA_Lib-0.4.17-cp36-cp36m-win_amd64.whl

を選択して下さい。

そして、ダウンロードしたモジュールをコマンドラインで展開しているディレクトリ(デフォルトならC:\Users\ユーザー名>)に置いて以下のコマンド実行するとインストールが始まります。

$pip install TA_Lib-0.4.17-cp36-cp36m-win_amd64.whl

これでインストールが成功するはずです。他にもアナコンダプロンプトから$condaコマンドでインストールするという方法もあるらしいです。

スポンサーリンク

Ta-libを使う下準備

さてそれではインストールも終わったところで実際にTa-libを使っていきましょう。今回は仮想通貨の価格データを使っていきたいと思います。関数は↓に書いてあるのでコピペで同じように動作します。

##ライブラリーのインストールする##
import pandas as pd
import time
import matplotlib.pyplot as plt
import datetime
import requests
import json
import numpy as np
%matplotlib inline


##ビットコインの価格を取得する関数##
def get_bitcoinprice():
url=('https://api.coingecko.com/api/v3/coins/')+str('bitcoin')+('/market_chart?vs_currency=jpy&days=max')
r=requests.get(url)
r=json.loads(r.text)
bitcoin=r['prices']
data=[]
date=[]
for i in bitcoin:
data.append(i[1])
date.append(i[0])
bitcoin=pd.DataFrame({"date":date,"price":data})
price=bitcoin['price']
change=price.pct_change()
bitcoin=pd.DataFrame({"date":date,"price":data,"change":change})
return bitcoin

この関数は弄るとビットコイン以外の仮想通貨の価格や取得するデータの期間を任意の期間にすることもできます。

そして、Ta-libの関数を使って、テクニカル指標を計算していきます。関数はnumpy行列にしか対応していないので、pandas.dfから特定列を抜き出して作ったpandas.Seriesではエラーが出てしまうので注意してください。まずは作ったデータフレームからビットコインの値段を抽出しnumpyによる行列にします。

##全期間のビットコインの価格を取得する

bicoin=get_bitcoinprice()

##データを確認する
bitcoin

##価格だけ抽出する

price=bitcoin[‘price’]

このまま単に抜きだしただけではpandas.Seriesなので、numpy行列に変換します。

##データをnumpy行列に変換する

price = np.array(bitcoin[‘price’])

##データを確認する

>>>price

データは随時更新されているので、いつ実行するかで恐らく最新の数値は少し異なるでしょうが、↓みたいなnumpy.arrayになっていれば成功です。

array([ 13203.1967 , 14108.4087 , 13629.7741 , …,
705250.73215101, 715577.70439035, 709218.79085038])

これでデータの収集と整形が終わったのでTa-libの関数を使って計算をしていきます。

Ta-libでテクニカル指標を計算する

##ライブラリのインポート

import talib

・単純移動平均線

##単純移動平均線を計算する

ema=talib.EMA(price)
ema

・指数移動平均

##指数移動平均線を計算する

sma=talib.SMA(price)
sma

##ボリンジャーバンドを計算する

bbands=talib.BBANDS(price)
bbands

##モメンタムを計算する

momentam=talib.MOM(price)
momentam

##MACDを計算する

macd=talib.MACD(price)
macd

##RSIを計算する
rsi = talib.RSI(price, timeperiod=14)
rsi

MACD・移動平均・RSIなどは、デフォルトで何日分の計算をするか決まっていますが、引数timeperiodを指定してやることで任意の日数で計算することができます。

まとめ

Ta-libでは他にもまだまだ計算できるテクニカル指標が一杯あるのですが、全部書くとキリがないので、とりあえず自分がよく使うテクニカル指標をざっと紹介しました。これをうまく組み合わせたりすればBotの勝率も上がるかも・・・?

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする