1. はじめに
前回 インストールしたので実際に使ってみることとします。
2. 事前準備
データとして以下から日経平均の時系列を取得します。
日経の指数公式サイト
日経平均株価の日次データが CSV 形式でダウンロードできます。
データを突っ込むクラスを作成します。
class Nikkei:
"""
株価データを保持するクラス
"""
def __init__(self, data):
self.date = data['Date']
self.open = data['Open']
self.high = data['High']
self.low = data['Low']
self.close = data['Close']
上記に日付昇順でデータを取り込んだことを前提で話を進めていきます。
def read_csv(filename):
"""
CSV形式の株価データを読み込む
0:日付、1:始値、2:高値、3:安値、4:終値の5列の内、日付は文字列、他は数値のため変換
"""
converters = {
1: lambda s: float(s.strip('"')),
2: lambda s: float(s.strip('"')),
3: lambda s: float(s.strip('"')),
4: lambda s: float(s.strip('"'))
}
csv_data = np.genfromtxt('nikkei_stock_average_daily_jp.csv', delimiter=',', skip_header=1, dtype=None, names=('Date', 'Open', 'High', 'Low', 'Close'), converters=converters)
return Nikkei(csv_data)
3. SMA(移動平均線)を計算する
移動平均線を計算してプロットするコードを以下に示します。
import talib
import numpy as np
import matplotlib.pyplot as plt
def sma(nikkei, period):
"""
移動平均線を計算する
"""
# pylint: disable=no-member
return talib.SMA(np.array(nikkei.close, dtype=np.double), timeperiod=period)
if __name__ == "__main__":
nikkei_data = read_csv('nikkei_stock_average_daily_jp.csv')
# 5日移動平均線を計算
sma5 = sma(nikkei_data, 5)
# 25日移動平均線を計算
sma25 = sma(nikkei_data, 25)
# 75日移動平均線を計算
sma75 = sma(nikkei_data, 75)
# 200日移動平均線を計算
sma200 = sma(nikkei_data, 200)
# 移動平均をプロット
plt.plot(nikkei_data.date, nikkei_data.close, label='Close')
plt.plot(nikkei_data.date, sma5, label='SMA5')
plt.plot(nikkei_data.date, sma25, label='SMA25')
plt.plot(nikkei_data.date, sma75, label='SMA75')
plt.plot(nikkei_data.date, sma200, label='SMA200')
plt.legend()
plt.savefig("sma.png")
plt.show()
横軸の日付の部分が潰れていてよくわからんですが、移動平均線がプロットされていることがわかります。
他の指標も計算できるので、興味があれば試してみてください。
公式ではこちらで使える関数が一覧できます。
TA-Lib辞典 にも使い方をまとめてくださった方が載っているので参考にしてみてください。
4. まとめ
TA-Lib を使うことで、テクニカル指標を計算することができました。
いちいち自分で計算しなくてもよくなるので便利ですね。
今回の記事も、Github Copilot が7割くらい書いてくれました。
A. 参考サイト
Python wrapper for TA-Lib (https://ta-lib.org/).
TA-Lib辞典
TA-Libを用いた判断指標の算出(SMA, EMA, BB, RSI, MACD, ATR)
Pythonの「TA-Lib」ライブラリでテクニカル指標の計算と可視化をしてみよう
コメント