Sho
# Mount Google colab
from google.colab import drive
drive.mount('/content/drive')
!wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz
!tar -xzvf ta-lib-0.4.0-src.tar.gz
!cd ta-lib && ./configure --prefix=/usr && make && make install
!pip install Ta-Lib
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import talib
# 訓練データのファイルパス
path = "***"
# 訓練データの読み込み
df = pd.read_csv(f"{path}/data/train_data.csv")
# indexを"Date"列へ変更
df["Date"] = pd.to_datetime(df["Date"], format="%Y/%m/%d")
df.set_index(keys="Date", inplace=True)
print(f"df.shape: {df.shape}")
df.head(2)
df.shape: (420, 3278)
VGSH | JEF | IVZ | KTCC | FBZ | PLOW | JBK | IAC | IVR | VSH | VCV | OKE | ROK | FTAG | BRKR | GSK | JPS | SRPT | VMI | IMKTA | BDR | JAKK | MVC | AMSF | APTO | CNX | XOMA | LBY | BIOL | PAAS | KOF | LAC | EML | IVC | TILE | IEF | CSV | QADA | TBNK | HOG | ... | KRO | MORN | BHV | MMU | SGRP | PBA | GF | OSPN | J | AMKR | CPHI | TRT | OPRX | DXYN | GFED | FRAF | HWCC | WYND | CHMG | EVC | NNA | IOR | ATLC | STWD | TTM | NOC | EQS | MKC | MXL | NEV | ASFI | JTA | MNR | TFSL | GTN | TYG | VIRC | BIS | WOOD | MASI | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Date | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2011-11-13 | 55.942184 | 17.649006 | 13.770864 | 4.77 | 13.818835 | 10.198389 | 12.440549 | 38.484608 | 4.836254 | 8.575465 | 7.877108 | 23.100210 | 59.334507 | 84.253273 | 11.731660 | 28.273636 | 4.168243 | 4.86 | 75.028809 | 12.110400 | 1.13 | 18.456266 | 7.713052 | 15.194721 | 2.88 | 29.963728 | 30.400000 | 10.973586 | 14.384466 | 20.405405 | 73.412354 | 1.75 | 16.415005 | 19.071070 | 10.358725 | 88.829475 | 5.339281 | 10.804994 | 15.03547 | 29.228592 | ... | 12.701912 | 53.690952 | 13.001904 | 8.411827 | 1.22 | 16.457903 | 6.239215 | 8.04 | 39.470684 | 4.63 | 0.88 | 2.40 | 3.06 | 2.93 | 4.992733 | 10.988591 | 9.748321 | 10.293147 | 17.453051 | 1.078169 | 33.496590 | 1.92 | 3.16 | 6.810544 | 15.831424 | 47.542465 | 2.21 | 40.948685 | 4.96 | 8.450615 | 3.721562 | 4.747546 | 5.567790 | 7.262252 | 1.80 | 20.079035 | 1.504111 | 826.767029 | 30.918266 | 18.430309 |
2011-11-20 | 55.978844 | 16.270664 | 12.719761 | 4.94 | 12.744166 | 10.035272 | 12.065370 | 36.252533 | 4.658076 | 7.657301 | 7.939425 | 22.540537 | 55.720310 | 78.528595 | 11.262002 | 27.104542 | 4.072667 | 4.08 | 69.938858 | 11.282884 | 1.14 | 17.461733 | 6.991731 | 14.490328 | 2.52 | 27.630514 | 30.799999 | 10.061356 | 12.466537 | 20.022963 | 68.245247 | 1.65 | 16.306412 | 18.346851 | 8.876307 | 89.084717 | 5.274280 | 9.564995 | 14.27878 | 27.989960 | ... | 11.972300 | 52.916691 | 12.470938 | 8.487832 | 1.22 | 16.131611 | 5.840057 | 7.13 | 37.356007 | 4.15 | 0.82 | 2.48 | 3.09 | 2.88 | 5.225369 | 11.137086 | 8.741022 | 10.082382 | 17.491066 | 0.787348 | 30.493443 | 1.67 | 3.59 | 6.498439 | 15.531258 | 45.167881 | 2.13 | 40.328121 | 4.75 | 8.548306 | 3.590744 | 4.549112 | 5.473421 | 7.125532 | 1.56 | 19.711763 | 1.474619 | 769.836304 | 29.410889 | 17.534525 |
2 rows × 3278 columns
class TechnicalIndicators():
"""
Create technical indicators by Ta-Lib,
the open-source library(https://mrjbq7.github.io/ta-lib/index.html).
Returns:
dict_df(dict): dictionary of dataframe of each ticker
key: ticker name
value: dataset as DataFrame
Indicator:
MACD
RSI
"""
def __init__(self, df, ticker):
"""
Args:
df(DataFrame): Dataset of stock prices for each stock
ticker(list): Ticker, e.g. MSFT, FB..
"""
self.df = df
self.ticker = ticker
# for return
self.dict_df = {}
def __call__(self):
"""
Create each indicator
"""
for ticker in self.ticker:
# Stock price of the ticker
price = self.df[ticker]
# Data of one of the tickers
self.df_each = pd.DataFrame()
self.df_each['price'] = price
# Create indicators
self.macd(price, fastperiod=12, slowperiod=26, signalperiod=9)
self.rsi(price, timeperiod=14)
# Add the created DataFrame to the dictionary
self.dict_df[ticker] = self.df_each
return self.dict_df
"""
Momentum-indicator Part
"""
def macd(self, price, fastperiod=12, slowperiod=26, signalperiod=9):
"""
MACD - Moving Average Convergence/Divergence
Ref. http://www.tadoc.org/indicator/MACD.htm
Args:
price: price of close values
fastperiod:
slowperiod:
signalperiod:
"""
macd, macdsignal, macdhist = talib.MACD(price, fastperiod=12, slowperiod=26, signalperiod=9)
self.df_each['macd'] = macd
self.df_each['macdsignal'] = macdsignal
self.df_each['macdhist'] = macdhist
def rsi(self, price, timeperiod=14):
"""
RSI - Relative Strength Index
Ref. http://www.tadoc.org/indicator/RSI.htm
Args:
price: price of close values
"""
rsi = talib.RSI(price, timeperiod=14)
self.df_each['rsi'] = rsi
"""
Plot
"""
def plot_indicator(self, ticker, indicator):
plt.plot(self.dict_df[ticker][indicator], label=indicator)
plt.xlabel('date')
plt.ylabel('indicator value')
plt.legend()
plt.show()
def plot_macd(self, macd, macdsignal, macdhist):
plt.plot(macd, label='macd')
plt.plot(macdsignal, label='macdsignal')
plt.bar(macdhist.index,macdhist, label='macdhist')
plt.xlabel('date')
plt.ylabel('indicator value')
plt.legend()
plt.show()
# ti: technical
ticker = ['VGSH', 'JEF']
ti = TechnicalIndicators(df, ticker)
df_dict = ti()
# print(df_dict)
# MACD
ticker, indicator = 'JEF', 'macd'
ti.plot_macd(df_dict[ticker]['macd'], df_dict[ticker]['macdsignal'], df_dict[ticker]['macdhist'])
# RSI
ticker, indicator = 'JEF', 'rsi'
ti.plot_indicator(ticker, indicator)
Sho
各銘柄の株価からテクニカル指標を作成するコードを作成しました。 TA-Libという外部ライブラリを用いると簡単に作成することができます。 今回は代表的な指標であるMACDとRSIを実装してみました。
間違いの指摘など、色々ご意見頂けますと嬉しいです。 また、コンペではありますが、自作指標の提案など議論の活発化の手助けなれば幸いです。