Help us understand the problem. What is going on with this article?

TA-Libでテクニカル分析

More than 1 year has passed since last update.

TA-Libでテクニカル分析

簡単にテクニカル分析ができるライブラリTA-Libを試しました.TA-LibにはPythonのラッパーがあり,かなり簡単にですが紹介します.

準備

はじめに,TA-Libをインストールする必要があります.Macの場合はHomebrewでインストールできます.

$ brew install ta-lib

Pythonで使えるようにします.

$ pip install TA-Lib

テクニカル分析

今回使用するライブラリをインポートします.

import numpy as np
import pandas as pd
import talib
import quandl

今回はquandlでデータを取得します.

df = quandl.get('NIKKEI/INDEX')  # quandlの場合

TA-LibはDataFrameを引数にできないので,numpyのndarray形式にします.

close = np.array(df['Close Price'])
close[:5]

とにかく,いろいろなテクニカル指標を試してみます.(今回は終値のみで,ローソク足を用いる指標は使っていません.)

output = close.copy()
cols = ['Original']
# 単純移動平均(SMA: Simple Moving Average)
output = np.c_[output, talib.SMA(close)]
cols += ['SMA']
# 加重移動平均(WMA: Weighted Moving Average)
output = np.c_[output, talib.WMA(close)]
cols += ['WMA']
# 指数移動平均(EMA: Exponential Moving Average)
output = np.c_[output, talib.EMA(close)]
cols += ['EMA']
# 2重指数移動平均(DEMA: Double Exponential Moving Average)
output = np.c_[output, talib.DEMA(close)]
cols += ['DEMA']
# 3重指数移動平均(TEMA: Triple Exponential Moving Average)
output = np.c_[output, talib.T3(close)]
cols += ['TEMA']
# 三角移動平均(TMA: Triangular Moving Average)
output = np.c_[output, talib.TRIMA(close)]
cols += ['TMA']
# Kaufmanの適応型移動平均(KAMA: Kaufman Adaptive Moving Average)
output = np.c_[output, talib.KAMA(close)]
cols += ['KAMA']
# MESAの適応型移動平均(MAMA: MESA Adaptive Moving Average)
for arr in talib.MAMA(close):
    output = np.c_[output, arr]
cols += ['MAMA', 'FAMA']
# トレンドライン(Hilbert Transform - Instantaneous Trendline)
output = np.c_[output, talib.HT_TRENDLINE(close)]
cols += ['HT_TRENDLINE']
# ボリンジャー・バンド(Bollinger Bands)
for arr in talib.BBANDS(close):
    output = np.c_[output, arr]
cols += ['BBANDS_upperband', 'BBANDS_middleband', 'BBANDS_lowerband']
# MidPoint over period
output = np.c_[output, talib.MIDPOINT(close)]
cols += ['MIDPOINT']

# 変化率(ROC: Rate of change Percentage)
output = np.c_[output, talib.ROCP(close)]
cols += ['ROC']
# モメンタム(Momentum)
output = np.c_[output, talib.MOM(close)]
cols += ['MOM']
# RSI: Relative Strength Index
output = np.c_[output, talib.RSI(close)]
cols += ['RSI']
# MACD: Moving Average Convergence/Divergence
for arr in talib.MACD(close):
    output = np.c_[output, arr]
cols += ['MACD', 'MACD_signal', 'MACD_hist']
# APO: Absolute Price Oscillator
output = np.c_[output, talib.APO(close)]
cols += ['APO']
# PPO: Percentage Price Oscillator
output = np.c_[output, talib.PPO(close)]
cols += ['PPO']
# CMO: Chande Momentum Oscillator
output = np.c_[output, talib.CMO(close)]
cols += ['CMO']

# ヒルベルト変換 - Dominant Cycle Period
output = np.c_[output, talib.HT_DCPERIOD(close)]
cols += ['HT_DCPERIOD']
# ヒルベルト変換 - Dominant Cycle Phase
output = np.c_[output, talib.HT_DCPHASE(close)]
cols += ['HT_DCPHASE']
# ヒルベルト変換 - Phasor Components
for arr in talib.HT_PHASOR(close):
    output = np.c_[output, arr]
cols += ['HT_PHASOR_inphase', 'HT_PHASOR_quadrature']
# ヒルベルト変換 - SineWave
for arr in talib.HT_SINE(close):
    output = np.c_[output, arr]
cols += ['HT_SINE_sine', 'HT_SINE_leadsine']    
# ヒルベルト変換 - Trend vs Cycle Mode
output = np.c_[output, talib.HT_TRENDMODE(close)]
cols += ['HT_TRENDMODE']
output.shape

# 60日単純移動平均
output = np.c_[output, talib.SMA(close, timeperiod=60)]
cols += ['SMA60']
# 15日ボリンジャー・バンド
for arr in talib.BBANDS(close, timeperiod=15, nbdevup=2, nbdevdn=2, matype=0):
    output = np.c_[output, arr]
cols += ['BBANDS15_upperband', 'BBANDS15_middleband', 'BBANDS15_lowerband']
# 21日RSI
output = np.c_[output, talib.RSI(close, timeperiod=21)]
cols += ['RSI21']

引数のtimeperiodを指定して,いろんな期間を計算できます.

DataFrame形式にして,日付と対応させます.

data = pd.DataFrame(output, index=df.index, columns=cols)
data.tail()
Original SMA WMA EMA DEMA TEMA TMA KAMA MAMA FAMA ... HT_PHASOR_inphase HT_PHASOR_quadrature HT_SINE_sine HT_SINE_leadsine HT_TRENDMODE SMA60 BBANDS15_upperband BBANDS15_middleband BBANDS15_lowerband RSI21
Date
2018-01-26 23631.88 23336.888333 23577.879333 23396.084808 23950.015680 23881.542216 23358.915125 23401.776887 23774.262642 23579.472022 ... 21.325892 -43.817842 -0.589713 -0.988059 1.0 22920.246667 24056.610766 23800.404000 23544.197234 58.287358
2018-01-29 23629.34 23362.327333 23596.747183 23411.133530 23943.404763 23819.197807 23416.499625 23410.021533 23701.801321 23610.054347 ... 9.146663 81.389471 -0.713710 -0.999956 1.0 22947.261500 24061.838563 23794.724667 23527.610770 58.232275
2018-01-30 23291.97 23380.124000 23592.208000 23403.445560 23894.184742 23717.474237 23468.224208 23407.458663 23681.309755 23611.835732 ... 139.081959 117.191239 -0.837169 -0.978716 1.0 22968.599833 24121.395394 23757.523333 23393.651273 51.451184
2018-01-31 23098.29 23393.585333 23574.025161 23383.758105 23824.419397 23575.717839 23512.524500 23402.617512 23652.158767 23612.843808 ... 165.813706 -406.110394 -0.942737 -0.902462 0.0 22986.711167 24200.998868 23711.529333 23222.059798 48.076476
2018-02-01 23486.11 23424.681667 23579.994495 23390.361453 23808.770310 23470.100518 23551.332833 23405.839309 23569.134384 23601.916452 ... -122.751421 -700.414139 -0.978461 -0.837845 0.0 23004.478333 24198.805592 23696.574667 23194.343742 54.369135

5 rows × 36 columns

とりあえず,CSVに書き出します.

data.to_csv('NIKKEI_ta.csv')

TA-Libは予測モデルの特徴量の作成にも便利です.

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away