Python&Colab:TA-Lib でテクニカル分析、Plotly でローソク足の描画

Python&Colab:TA-Lib でテクニカル分析、Plotly でローソク足の描画

Python でテクニカル分析ができるライブラリ「TA-Lib」を、Google Colab で使用する方法の備忘録。pandas_datareader で価格データを取得、TA-Lib でテクニカル分析をして、Plotly でローソク足のチャートを出力する手順。

Google Colab:TA-Lib でテクニカル分析、Plotly でローソク足の描画

  1. 必要なモジュールのインストールと読み込み
    1. TA-Lib のインストール
    2. Plotly のアップデート
    3. 必要なモジュールの読み込み
  2. データの取得
  3. TA-Lib でテクニカル分析の算出
  4. Plotly でグラフを出力して確認する

1.必要なモジュールのインストールと読み込み

1-1.TA-Lib のインストール

まず、「TA-Lib」をダウンロードしてtarファイルを解凍。

Google Colab: Cell-1

!curl -L http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz -O && tar xzvf ta-lib-0.4.0-src.tar.gz

&&で複数の処理をつなげて記述している。curl -L http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz -Oでファイルをダウンロード。tar xzvf ta-lib-0.4.0-src.tar.gzでダウンロードしたtarファイルを解凍。

次に、ライブラリをインスールする。

Google Colab: Cell-2

!cd ta-lib && ./configure --prefix=/usr && make && make install && cd - && pip install ta-lib

cd ta-libでディレクトリの移動。./configure --prefix=/usrmakemake installはインストール作業。詳細は以下のリンクを参照。cd -で元のディレクトリに戻って、pip install ta-libで Python にインストール。

インストール作業については、以下のページを参考に。

目次へ

1-2.Plotly のアップデート

Plotly のアップデートは次のコードを実行するだけ。この一連のコードを試したときのバージョンはplotly-3.5.0

Google Colab: Cell-3

!pip install plotly --upgrade

目次へ

1-3.必要なモジュールの読み込み

使用するモジュールをすべて読みこんでおく。enable_plotly_in_cell()は、Google Colab のセルで Plotly を表示するのに必要な関数。グラフを出力するときに使用する。

Google Colab: Cell-4

import pandas as pd
import pandas_datareader.data as web
import numpy as np
import talib as ta
import plotly
import plotly.graph_objs as go
import plotly.figure_factory as ff
plotly.offline.init_notebook_mode( connected=True )

# google colabでplotlyを表示するにはこれが必要。
# グラフを書き出すセルごとに使用する
def enable_plotly_in_cell():
    import IPython
    from plotly.offline import init_notebook_mode
    display(IPython.core.display.HTML('''
            <script src="/static/components/requirejs/require.js"></script>
    '''))
    init_notebook_mode( connected=False )

目次へ

2.データの取得

テスト用のデータは、yahoo(米国)の日経平均を使用する。

Google Colab: Cell-5

# データを取得
df = web.DataReader('^N225', 'yahoo', '2018/1/1')

# 出力して確認
df.head()

出力結果は以下のようになる。

pandas_datareader データ取得結果

目次へ

3.TA-Lib でテクニカル分析の算出

3つの移動平均線と ATR を算出してみる。

Google Colab: Cell-6

# 計算用に numpy の配列を作成する
h = np.array( df.loc[: ,"High"]  ,dtype='f8' ) # 浮動小数点数による NumPy 配列にしておく
l = np.array( df.loc[: ,"Low"]   ,dtype='f8' )
c = np.array( df.loc[: ,"Close"] ,dtype='f8' )

df.loc[: ,"ATR20"] = ta.ATR( h ,l ,c ,timeperiod=20 )

df.loc[: ,"EMA5"]  = ta.EMA( c ,timeperiod=5 )
df.loc[: ,"EMA20"] = ta.EMA( c ,timeperiod=20 )
df.loc[: ,"EMA40"] = ta.EMA( c ,timeperiod=40 )

# 出力して確認
df.tail()

算出結果は以下。

TA-Lib 算出結果

目次へ

4.Plotly でグラフを出力して確認する

最後に、Plotly でローソク足を出力して、何となく視覚的に確認してみる。

Google Colab: Cell-7

layout = dict(
     autosize = False
    ,legend   = dict( xanchor="left" ,y=1.01 ,orientation="h")
    ,width    = 950
    ,height   = 800
    ,xaxis    = dict( title="" ,type="date" ,showgrid=True ,tickangle=45 ,anchor="y1" ,rangeslider=dict(visible=False) )
    ,yaxis    = dict( domain=[.05 ,.3] ,title="" ,side="right" )
    ,yaxis2   = dict( domain=[.3 ,.95] ,title="" ,side="right" )
    ,font     = dict( family='Courier New, monospace' ,size=20 ,color='#7f7f7f' ) )

trace = go.Candlestick(
     x     = df.index
    ,open  = df['Open']
    ,high  = df['High']
    ,low   = df['Low']
    ,close = df['Close']
    ,yaxis = 'y2'
    ,increasing = dict( line=dict(color='#CCCCCC') )
    ,decreasing = dict( line=dict(color='#777777') ) )

fig = dict( data=[trace] ,layout=layout )

fig['data'].extend([
     go.Scatter( yaxis="y2" ,x=df.index ,y=df["EMA5"]  ,name= 'EMA5'  ,line=dict(color='#F44336' ,width=1) )
    ,go.Scatter( yaxis="y2" ,x=df.index ,y=df["EMA20"] ,name= 'EMA20' ,line=dict(color='#4CAF50' ,width=1) )
    ,go.Scatter( yaxis="y2" ,x=df.index ,y=df["EMA40"] ,name= 'EMA40' ,line=dict(color='#303F9F' ,width=1) ,fill="tonexty" ,fillcolor="rgba(170,170,170,.2)" )
    ,go.Scatter( yaxis="y1" ,x=df.index ,y=df["ATR20"] ,name= 'ATR20' ,line=dict(color='#4CAF50' ,width=2) ) ])

# Google Colab ではこれを実行しないと表示されない
enable_plotly_in_cell()

# グラフを描画
plotly.offline.iplot(fig)

以下のようなグラフになった。問題はなさそう。

Plotly 出力結果

目次へ

参考にしたサイト

Back to Top

最高のトレード環境を実現する「サクソバンク証券」

ボクが唯一つかっている取引会社です。

世界中のほとんどの市場に対応していて、日本株をCFDで取引すれば個別株とFXの損益を通算することもできます。何よりも、ひとつの口座に入金するだけですべての銘柄を取引できるのが本当に便利。

SaxoTraderGO
  • 「FX口座」150以上の通貨ペア
  • 「株価指数CFD口座」約250種類
  • 「個別株CFD口座」日米中など世界22カ国・34市場
  • 「バラエティCFD口座」債券やVIX、商品など約100種類
  • MT4にも対応!

Investment Tech Hack

Sorry... doesn't support your browser

To get the best possible experience using our site we recommend that you upgrade to a modern web browser. Investment Tech Hackではご利用中のブラウザサポートはしていません。
Internet Explorerのアップグレード行う、もしくはその他のブラウザを使用しての閲覧をお願いします。