【Python】テクニカル指標が簡単に計算できるTa-libの使い方

前回は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がないとかで環境が構築できないとターミナルでエラーが返ってきたので、それをインストールしたのですが、結局治りませんでした。

追記:これで解決するケースもあるらしいのですが、結局原因はよく分かりません

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

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
&nbsp

を選択して下さい。

そして、ダウンロードしたモジュールをコマンドライン(コマンドプロンプト・Anacondaプロンプト)で展開しているディレクトリデフォルトなら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.head()

##価格だけ抽出する
price=bitcoin['price']

このまま単に抜きだしただけではpandas.Seriesなので、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の性能が上がるかも・・・???

プログラミングの独学はとても難しい


プログラミングは小学校の義務教育にも導入され始めており、これから社会人として生きていく上でプログラミングはもはや出来て当たり前、出来なれば論外というエクセルレベルの必須スキルになりつつあります。そしてそういう話を聞いて参考書なりを購入して独学でプログラミング勉強しようと思っている人も少なくないでしょう。しかしプログラミングを独学で勉強し始めようと思うものの



・「分からない箇所で詰まって挫折してしまった」

・「勉強する時間が足りない」

・「ネットの記事だと情報が断片的でよくわからない」

・「コードのエラーの原因が分からない」



という壁にぶち当たって、プログラミングの勉強を止めてしまう方が少なくありません。独学でプログラミングを勉強してる時間のほとんどはつまづいている時間です。実際僕も最初のころ独学でプログラミングを勉強していた頃はエラーの原因が分からず丸1日を不意にしてしまった・・・そんな苦い経験がありました。それで僕は一度はプログラミングの学習を諦めてしまいましたが、就活で現実を知る中で



「プログラミングを勉強して、いずれフリーランスとして自由な生き方がしたい」

「エンジニアとして若いうちから高収入を得たい」



という強い気持ちから一念発起して「侍エンジニアのwebサービスコース」に申し込み、プロのエンジニアの方に対面でマンツーマンでPythonによるWebサービス作り方とWeb技術の基本を教えてもらい、ようやくプログラミングが理解でき、今ではエンジニアとしてそこそこの暮らしができるようになりました。





侍エンジニアでは、とりあえずプログラミングやインターネットの基本を知っておきたい人から、HTML・cssなどでWebサイトやWebアプリを作ってみたい人やPythonを勉強してデータサイエンティストやAIエンジニアになりたい人まで幅広いニーズに応えた様々なコースが用意されています。



IT業界と言ってもエンジニアの仕事はプログラミング言語次第でサーバーから機械学習・ディープラーニングまで多種多様ですし、侍エンジニアの無料レッスン(カウンセリング)を受けてみて、自分のやりたいITの仕事は何なのか?を見つけるのがエンジニアへの第一歩になります。ちなみに今侍エンジニアの無料レッスンを受けると1000円分のAmazonギフト券がもらえるので、試しに受けてみるだけもお得です。


自分は半端に独学やオンラインスクールで勉強して金と時間を無駄にするくらいなら、リアルのプログラミングスクールに通ってしっかりプログラミングを勉強した方がいいと思います。ちなみに今、侍エンジニアに申し込むと、25歳以下の学生の方であれば、受講料が20%OFFになるので超お得です。


そして、プログラミングは大勢で授業を受けたり漫然とオンライン学習をするよりも自分が分からない箇所をピンポイントでプロの講師に直接質問して、ちゃんと納得するというスタイルの方がお金は確かに少し掛かりますが、独学で学ぶよりも絶対にモノになります。


シェアする

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

フォローする

   侍エンジニア塾       
侍エンジニアの無料体験レッスンを予約する -->