前回はPythonで移動平均線・MACD・RSIなどのテクニカル分析において定番の指標たちを計算しましたが、今回はより充実したテクニカル分析を行うため、他のテクニカル指標も計算していきたいと思います。
手動で計算しようかなーと思っていたのですが、ネットでググると「Ta-lib」なるpythonでテクニカル指標を簡単に計算できるライブラリを見つけたので、試しに使ってみたところ超便利だったので紹介します。
Ta-Libとは?
公式のサイト(英語)はこちらです。ライブラリの中身はオープンソースでGitに公開されています。読み方はそのままで「タリブ」です。
Ta-Libは、複数の言語で使用可能なテクニカル指標の分析ツールです。対応言語はC/C++Java、.NET、Perl、Pythonと各言語ごとにダウンロードファイルがあります。
このTa-libの何が便利かというと、テクニカル指標が非常に簡単に生成する事が可能な点です。公式ドキュメントを読めばわかりますがが、対応しているテクニカル指標の数は200を超えており、ストキャスティックスやMACDなどの有名どころからDMIやウィリアム%なども作る事が可能みたいです。
対応しているテクニカル指標は本当にいろいろあり、ざっと見ただけでもこれだけありました。
・Talibで計算できるテクニカル指標
- ボリンジャーバンド(BBNADS)
- 単純移動平均線(SMA)
- 指数平滑移動平均線(EMA)
- 適応型移動平均(KAMA)
- MESA 適応型移動平均(MAMA)
- パラボリック SAR(SAR)
- 3重指数移動平均(T3)
- 重み付き移動平均(WMA)
- 平均方向性指数(ADX)
- アブソリュートプライス オシレーター(APO)
- MACD
- モメンタム
- RSI
- マネーフローインデックス(MFI)
- 平均根 – (当日始値 + 当日高値 + 当日安値 + 当日終値) ÷ 4(AVGPRICE)
- 中央値価格 -(当日高値 + 当日安値 + 当日終値) ÷ 3(MEDPRICE)
- 加重終値 – (当日高値 + 当日安値 + 当日終値 × 2) ÷ 4(WCLPRICE)
他にも多数のテクニカル指標あるので、pythonでのテクニカル指標系の計算処理はTa-Libの関数だけで、事足ると思います。pandasで単純移動平均が計算できるー!って喜んでたらtalibはそんな比じゃありませんでした笑。
他にもロウソク足のパターン認識もあるみたいで、本当にテクニカル指標はほぼすべてそろっているんじゃないかなと思います。僕はローソク線は使わないのであんまり調べていませんが、使いたいという人は本家のサイトに載っているので調べてみてください。
Ta-libのインストール方法
ということで見つけた当初、これは便利じゃん!!と思ってさっそく使ってみようと思ったのですが、qittaあたりに書いてあるpipコマンドでWin10のAnaconda(py3.6)環境にインストールしようとしたところ、ちょっと詰んだので、私ができたインストール方法を紹介しておきます。
たぶんTa-lib python みたいなワードでググると一番上に出てくるqittaだとpip install Ta-lib
でインストールしました的で話が進んでいると思うのですが、自分の場合はCC+のvisualがないとかで環境が構築できないとターミナルでエラーが返ってきたので、それをインストールしたのですが、結局治りませんでした。
一応他のサイトを見るとcondaコマンドだとインストールできることがあるみたいです
$ conda install ta-lib -c conda-forge
それでも無理な場合はライブラリのファイル自体を公式サイトから落としてきて、それをコマンドプロンプトのディレクトリに配置して展開するという方法でインストールするとうまくいきました。
Windows10環境であれば、まず下のサイトからライブラリの元ファイルをダウンロードします。→https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib
ファイルには種類が色々ありますが、cp〇〇とwin○○がPythonのバージョンとPCのメモリに対応しています
python3.6で32bitなら
- 32bitOS ⇒ TA_Lib-0.4.17-cp36-cp36m-win32.whl
python3.6で64bitなら
- 64bitOS ⇒ TA_Lib-0.4.17-cp36-cp36m-win_amd64.whl
みたいな感じです。自分のPythonのバージョンとBIT数にあったもの選択して下さい。
そして、ダウンロードしたモジュールをコマンドライン(コマンドプロンプト/Anacondaプロンプト)で展開しているディレクトリ(デフォルトならC:\Users\ユーザー名>)に置いて以下のコマンド実行するとインストールが始まります。
$pip install TA_Lib-0.4.17-cp36-cp36m-win_amd64.whl
これでインストールが成功するはずです。
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}) return bitcoin
この関数は弄るとビットコイン以外の仮想通貨の価格や取得するデータの期間を任意の期間にすることもできます。
そして、Ta-libの関数を使って、テクニカル指標を計算していきます。関数はnumpy行列にしか対応していないので、pandas.dfから特定列を抜き出して作ったpandas.Seriesではエラーが出てしまうので注意してください。まずは作ったデータフレームからビットコインの値段を抽出しnumpyによる行列にします。
# 全期間のビットコインの価格を取得する bicoin = get_bitcoinprice() # データを確認する bitcoin.head() # 価格だけ抽出する price = bitcoin['price']
このまま単に抜きだしただけではpandas.Seriesですが、TalibはNumpyArrayが入力データに想定されているのにnumpy行列に変換します。
# データをnumpy行列に変換する price = np.array(bitcoin['price']) # データを確認する price.head()
データは随時更新されているので、いつ実行するかで恐らく最新の数値は少し異なるでしょうが、↓みたいなnumpy.arrayになっていれば成功です。
array([ 13203.1967 , 14108.4087 , 13629.7741 , …,
705250.73215101, 715577.70439035, 709218.79085038])
これでデータの収集と整形が終わったのでTa-libの関数を使って計算をしていきます。
Ta-libでテクニカル指標を計算する
# talibのインポート import talib # 単純移動平均線を計算する ema=talib.EMA(price) # 指数移動平均線を計算する sma=talib.SMA(price) # ボリンジャーバンドを計算する bbands=talib.BBANDS(price) # モメンタムを計算する momentum=talib.MOM(price,timeperiod=10) # MACDを計算する macd=talib.MACD(price,fastperiod=12, slowperiod=26, signalperiod=5) # RSIを計算する rsi = talib.RSI(price, timeperiod=14)
MACD・移動平均・RSIなどは、デフォルトで何日分の計算をするか決まっていますが、引数timeperiod
を指定してやることで任意の日数で計算することができます。
またMACDやボリンジャーバンドを計算すると、返り値が3つの行列になっているので、macd=talib.MACD(price)なら3番目の行列に短期移動平均-長期移動平均の結果が格納されているので、二次元配列の3番目の行列先頭を取り出す際はmacdのmacd[2][0]という風に書く必要があります。
まとめ
Ta-libでは他にもまだまだ計算できるテクニカル指標が一杯あるのですが、全部書くとキリがないので、とりあえず自分がよく使うテクニカル指標をざっと紹介しました。これでpythonで関数1つでテクニカル指標が計算できるのでテクニカル分析やバックテストも格段に手間が省けて便利ですね!
公式ドキュメントを見たところ自分の知らないテクニカル指標がたくさんあったので、それらをうまく組み合わせてテクニカル分析(バックテスト)→実装すればBotの性能が上がるかも・・・???
コメント
[…] 参照記事:【Python】テクニカル指標が簡単に計算できるTa-libの使い方 […]
[…] 関連記事:【Python】テクニカル指標が簡単に計算できるTa-libの使い方 […]