見出し画像

個人投資家が簡単に日本株マーケットデータや財務データを取得することができるJ-QuantsのAPIについて

個人投資家の金融データ周りの現状

個人投資家がTOPIX全銘柄などの大規模なユニバースを対象に、マーケットデータや財務データを時系列で取得し、分析を行うことは現状では割と困難である。無料で利用できるものは直近値はあるもののヒストリカルな情報がなかったり、RefinitivやBloomberg、Factsetといったプロ向けのデータベンダーと契約しようにもコストが高すぎるのである。しかし、TOPIXユニバースなどできちんとデータ分析してバックテストを行い仮説検証をしていかなければ、せっかく考えた投資戦略にも自信が持てなくなるし、ふわふわした状態で投資をしかねないので、何とかして安くデータを取得して分析したいと考えている個人投資家は多いと思う。そうした状況を鑑みてか、JPXが最近J-Quantsと呼ばれる個人投資家向けのサービスのベータ版を提供しており、ちょっと使ってみたら便利そうだったので、このnoteではJ-Quantsについて少しご紹介したい。

J-Quantsについて

JPXのサイトによると以下のように紹介されている

現状、日本においては個人の方が生の金融データを取得・利用することは容易ではありません。そのためJPXグループでは昨年、本プロジェクトにおいて個人の方向けにヒストリカルの株価や企業の財務データといったプロも利用する金融データを、その分析の手法を合わせて個人投資家の皆様に提供し、データを活用して投資分析をしていただくための教育施策を実施しました。本施策において株価・財務データ等の金融データをAPIにより提供したところ、本取り組みを継続して欲しいとの要望を多くいただいたため、今般、ベータ版として本サービスをリリースすることといたしました。

https://www.jpx.co.jp/corporate/news/news-releases/6020/20220704-01.html

現状、以下の時系列データを取得することができる。これだけあれば例えば、PBRやROEといった財務ファクターによる分位ポートフォリオのバックテストなどは十分可能であろうと思われる。

  • 東証上場会社にかかるヒストリカル株価(2017年以降の四本値・出来高等、株式分割等を調整した調整株価)

  • 決算短信情報を整形した財務データ(2017年以降の決算短信サマリー情報)

  • 銘柄情報

  • 業種情報

  • 翌日決算発表予定

株価はきちんと分割・併合の影響を調整したものについても提供してくれている点はとても親切だと思う。2017年以降のデータしか取れないのは少し短いような気もしないでもないが、ベータ版なので仕方ないだろう。

実際にAPIを触ってみる

APIを利用するにはまずここの一番下にある申し込みフォームから申請を行う必要がある。申し込みが完了したらAPIの仕様が書かれているこちらのページを参考にしながらデータ取得を行っていく。
まず最初に、先で登録したメールアドレスとパスワードを使ってリフレッシュトークンというものを取得する。リフレッシュトークンの有効期限は一週間となっており、期限が切れたら再度取得する必要がある 。

# モジュールのインポート
import pandas as pd
import requests
import json

# リフレッシュトークンの取得
mail_address = "登録したメールアドレス"
password = "登録したパスワード"

data = {"mailaddress":mail_address, "password":password}
r_post = requests.post(
    "https://api.jpx-jquants.com/v1/token/auth_user",
    data=json.dumps(data)
)
refresh_token = r_post.json()['refreshToken']

リフレッシュトークンを取得したら、次はIDトークンを取得する。こちらの有効期限は24時間らしい。

# IDトークンの取得
r_post = requests.post(
    f"https://api.jpx-jquants.com/v1/token/auth_refresh?refreshtoken={refresh_token}"
)
id_token = r_post.json()['idToken']

IDトークンが取得できれば次からいよいよデータが取得できる。まずはトヨタ自動車(7203)の調整済み終値を日次で取得してみる。銘柄コードを指定して取得できるが、通常の4桁のティッカーの末尾に0がついたものをしてしなければならないようである。

# 株価情報の取得
code = 72030
headers = {'Authorization': 'Bearer {}'.format(id_token)}
r = requests.get(
    f"https://api.jpx-jquants.com/v1/prices/daily_quotes?code={code}",
    headers=headers
)
price_df = pd.DataFrame(r.json()['daily_quotes'])

# グラフ化
price_df.set_index('Date', inplace=True)
price_df.index = pd.to_datetime(price_df.index, format='%Y%m%d')
price_df['AdjustmentClose'].plot(
    figsize=(10,5),
    grid=True
)

グラフを出力してみると正しくデータが取得できているようである。

トヨタ自動車(7203)の調整済み終値

財務データも取得できるので、トヨタの四半期決算におけるEPSを取得してみる。

# 財務データの取得
code = 72030
headers = {'Authorization': 'Bearer {}'.format(id_token)}
r = requests.get(
    f"https://api.jpx-jquants.com/v1/fins/statements?code={code}",
    headers=headers
)
statements_df = pd.DataFrame(r.json()['statements'])

# グラフ化
statements_df['EarningsPerShare'] = statements_df['EarningsPerShare'].astype('float')
statements_df.plot.bar(
    figsize=(7,5),
    x='CurrentPeriodEndDate',
    y='EarningsPerShare'
)

EPSは累積値で入っているようで、株式分割の影響等は未調整。2020-06-30データが二つあるのはバグだろうか?データは取得できたが、取り扱いには少し注意が必要なようである。

トヨタ自動車(7203)のEPS

今回はJ-QuantsのAPIを使ったデータ取得について簡単にまとめてみた。次回は、このデータを使ってもう少しクオンツチックな分析をしてみようと思う。

この記事が気に入ったらサポートをしてみませんか?