J-Quants APIで株価・財務情報を取得

データ分析の題材として,金融データを扱っている書籍は多いです.しかし,同じことを試そうと思っても,信頼できる長期的なデータを取得する方法がなかなかありません(経験上,無料で得られるデータでは,株式分割などを考慮しない株価になっている可能性がありました.※「調整済み」と書かれていても,実際はそうなっていないこともあるので注意が必要でした).

近年,JPX総研が「J-Quants API」なるサービスで,ヒストリカルの株価や企業財務情報などの金融データを個人向けにAPIで配信しています.
J-Quants APIについて - J-Quants API

この記事では,簡単な使い方をメモします.

注意

提供データの更新にはラグがあります.財務諸表など,速報と確報があるようです.特に,決算発表日に分析を行う場合には注意が必要です.
提供データの更新タイミング - J-Quants API


準備

「API利用までの流れ」に概要が書かれています.
API利用までの流れ - J-Quants API

まず,ユーザー登録が必要です.無料版と有料版があり,有料版はプランによって取得できるデータが変わります.

APIを利用する前に,リフレッシュトークン・IDトークンを取得します.以下にサンプルコードが書かれているので,適宜書き換えて使えばOKです(※メールアドレス,パスワードは自身のものに置き換えます).
リフレッシュトークン取得(/token/auth_user) - J-Quants API
IDトークン取得(/token/auth_refresh) - J-Quants API

import requests
import json

data = {"mailaddress":"<YOUR EMAIL_ADDRESS>", "password":"<YOUR PASSWORD>"}
r_post = requests.post("https://api.jquants.com/v1/token/auth_user", data=json.dumps(data))

REFRESH_TOKEN = r_post.json()["refreshToken"]
r_post = requests.post(f"https://api.jquants.com/v1/token/auth_refresh?refreshtoken={REFRESH_TOKEN}")

idToken = r_post.json()["idToken"]
headers = {'Authorization': 'Bearer {}'.format(idToken)}

例:株価取得

例として,APIで株価を取得してみます.
株価四本値(/prices/daily_quotes) - J-Quants API

code = 8697
code = str(code)
r = requests.get(f"https://api.jquants.com/v1/prices/daily_quotes?code={code}", headers=headers)

取得したデータをプロットしてみましょう.

import pandas as pd
import matplotlib.pyplot as plt

df  =  pd.DataFrame(r.json()["daily_quotes"])
df["Date"] = pd.to_datetime(df["Date"])

num = 2
fig = plt.figure(figsize = (6.4, 4.8 * num / 2), tight_layout = True)
axes = [fig.add_subplot(num, 1, i + 1) for i in range(num)]
axes[0].plot(df["Date"], df["AdjustmentClose"], label ="AdjustmentClose")
axes[1].bar(df["Date"], df["AdjustmentVolume"], label ="AdjustmentVolume")
for ax in axes:
    ax.legend()
plt.show()