日本取引所のAPIを使って株価&財務情報をゲットする
「株価情報を取得するにはどうしたらいいんだろう?」
「株価情報だけでなく財務情報も欲しい」
「できれば信頼できる情報ソースから取得したい」
そんなお悩みはありませんか?
これらの悩みを一発で解決するツールとして、
日本取引所のAPI(J-Quants-API)をおススメします
この記事では、
日本取引所のAPIを使って、
株価や財務情報を取得する方法のほか、
最後には株価と財務情報を使って、
PBRを算出する方法もご説明します。
日本取引所グループと聞いても
馴染みがうすいかもしれませんが、
要は東京証券取引所ですね。
今は、大阪証券取引所と合体して、
日本取引所グループになっています。
1. J-Quants アカウント登録
以下のサイトから
J-Quantsのアカウントを登録することで
APIを使えるようにします。
J-Quants APIに登録するをクリックするとユーザー登録画面になります
ここで登録したメールアドレスとパスワードを後から使います。
★APIの料金プラン
J-Quants APIは無料でも使えますが、
データによっては課金しないと取得できないものもあります。
最初は無料プランを選択しましょう。
ちなみに、無料プランは2年分のデータしかとれません。
また、株価データでも12週間遅延するので注意が必要です。
ここから、J-QuantsのAPIを使って、株価情報・財務情報を取得していきます。
Python用のライブラリーであるjquants-api-clientを使っていきます。
このライブラリーを使うことで、
より簡単に情報をゲットすることができます。
(逆にこのライブラリーを使わないと面倒です)
◾️公式ドキュメントはコチラ
3. ライブラリーのインストール・インポート
J-quantesのAPIクライアントをインストールします
!pip install jquants-api-client
必要なライブラリーをインポートします
import jquantsapi
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
import warnings
warnings.simplefilter('ignore')
4. APIクライアントのインスタンス化
J-quantsのアカウント登録に使った
MAIL_ADDRESSとPASSWORDを"*****"に入力します。
MAIL_ADDRESS = "*************"
PASSWORD = "***********"
cli = jquantsapi.Client(mail_address=MAIL_ADDRESS, password=PASSWORD)
◾️ Googleコラボでのシークレットキーの便利な使い方はコチラ
◾️ Googleコラボのシークレットキーを活用した場合のコードはコチラ
import os
from google.colab import userdata
os.environ["MAIL_ADDRESS"] = userdata.get('J_QUANTS_MAIL_ADDRESS')
os.environ["PASSWORD"] = userdata.get('J_QUANTS_PASSWORD')
MAIL_ADDRESS = os.environ["MAIL_ADDRESS"]
PASSWORD = os.environ["PASSWORD"]
これでJ-QuantsのAPIを使える環境が整いました。
早速、APIを使って情報を取得していきましょう。
5. 上場銘柄一覧の取得
まずは、簡単なところで、上場銘柄一覧を取得してみましょう。
# 最新日付の全銘柄一覧を取得
df_info = cli.get_listed_info()
df_lnfo.head()
★取得できる銘柄情報
Date:日付
Code:証券コード
CompanyName:企業名
CompanyNameEnglish:企業名(英語)
Sector17Code:17業種の該当コード
Sector17CodeName:17業種の該当名
Sector33Code:33業種の該当コード
Sector33CodeName:33業種の該当名
MarketCode:マーケットコード(プライム・スタンダードなど)
MarketCodeName:マーケットコード名
6. 業種情報の取得
銘柄ごとのAPIクライアントに埋め込まれている業種情報を取得します。
33業種と17業種の2種類用意されています。
まずは、33業種の情報を取得します。
df_33_sectors = cli.get_33_sectors()
df_33_sectors.head()
次に、17業種の情報を取得します。
df_17_sectors = cli.get_17_sectors()
df_17_sectors.head()
7. 株価情報の取得
さあ、株価情報を取得していきましょう
株価情報は2通りの取得方法が提供されています。
それぞれの取得方法を確認してみましょう。
★銘柄コードを指定して取得する方法
codeに証券コードを入力します。
df_price = cli.get_prices_daily_quotes(code=8697)
df_price.tail()
出力結果は以下の通りです。
4本値については、株式分割・併合等があった際の調整後の株価も用意されています。これは良いですね。
★日付を指定して取得する方法
指定した日付で全銘柄の情報を取得できます。
契約プランによっては取得可能なデータの範囲が定められています。
無料プランの場合、最大2年間で、12週間遅れとなります。
df_price = cli.get_prices_daily_quotes(date_yyyymmdd="20240129")
df_price.head(2)
◾️期間を指定することもできます。
こちらの方が使えると思います。
#日付指定した取得→縦持ち
d_from = datetime(2022,3,31)
d_to = datetime(2024,1,26)
df_price = cli.get_price_range(
start_dt=d_from.strftime(format="%Y%m%d"),
end_dt=d_to.strftime(format="%Y%m%d")
)
df_price
# 全期間のデータ
df_topix = cli.get_indices_topix()
df_topix.head()
8. 財務情報の取得
財務情報も
銘柄コードを指定して取得する方法と、
日付を指定して取得する方法が提供されています。
実際は、銘柄コードを指定して取得することが多いと思います。
★銘柄コードを指定して取得する方法
df_fin = cli.get_fins_statements(code=8697)
df_fin.tail(1).T
★日付を指定して取得する方法
df_fin = cli.get_fins_statements(date_yyyymmdd="20230601")
df_fin.head(3).T
★取得できる財務情報
公式には以下の43項目が掲載されていますが、
実際はもっと取得できるようです。
- **DisclosureNumber**: 開示番号
- **DisclosedDate**: 開示日
- **ApplyingOfSpecificAccountingOfTheQuarterlyFinancialStatements**: 四半期財務諸表の作成に特有の会計処理の適用
- **AverageNumberOfShares**: 期中平均株式数
- **BookValuePerShare**: 1株当たり純資産
- **ChangesBasedOnRevisionsOfAccountingStandard**: 会計基準等の改正に伴う会計方針の変更
- **ChangesInAccountingEstimates**: 会計上の見積りの変更
- **ChangesOtherThanOnesBasedOnRevisionsOfAccountingStandard**: 会計基準等の改正に伴う変更以外の会計方針の変更
- **CurrentFiscalYearEndDate**: 当事業年度終了日
- **CurrentFiscalYearStartDate**: 当事業年度開始日
- **CurrentPeriodEndDate**: 当会計期間終了日
- **DisclosedTime**: 開示時刻
- **DisclosedUnixTime**: 開示UnixTime
- **EarningsPerShare**: 1株当たり当期純利益
- **Equity**: 純資産
- **EquityToAssetRatio**: 自己資本比率
- **ForecastDividendPerShare1stQuarter**: 配当予想_第1四半期末
- **ForecastDividendPerShare2ndQuarter**: 配当予想_第2四半期末
- **ForecastDividendPerShare3rdQuarter**: 配当予想_第3四半期末
- **ForecastDividendPerShareAnnual**: 配当予想_合計
- **ForecastDividendPerShareFiscalYearEnd**: 配当予想_期末
- **ForecastEarningsPerShare**: 1株当たり当期純利益_通期予想
- **ForecastNetSales**: 売上高_通期予想
- **ForecastOperatingProfit**: 営業利益_通期予想
- **ForecastOrdinaryProfit**: 経常利益_通期予想
- **ForecastProfit**: 当期純利益_通期予想
- **LocalCode**: 銘柄コード
- **MaterialChangesInSubsidiaries**: 期中における重要な子会社の異動
- **NetSales**: 売上高
- **NumberOfIssuedAndOutstandingSharesAtTheEndOfFiscalYearIncludingTreasuryStock**: 期末発行済株式数
- **NumberOfTreasuryStockAtTheEndOfFiscalYear**: 期末自己株式数
- **OperatingProfit**: 営業利益
- **OrdinaryProfit**: 経常利益
- **Profit**: 当期純利益
- **ResultDividendPerShare1stQuarter**: 配当実績_第1四半期末
- **ResultDividendPerShare2ndQuarter**: 配当実績_第2四半期末
- **ResultDividendPerShare3rdQuarter**: 配当実績_第3四半期末
- **ResultDividendPerShareAnnual**: 配当実績_合計
- **ResultDividendPerShareFiscalYearEnd**: 配当実績_期末
- **RetrospectiveRestatement**: 修正再表示
- **TotalAssets**: 総資産
- **TypeOfCurrentPeriod**: 当会計期間の種類
- **TypeOfDocument**: 書類種別
9. PBRを算出する
最後にPBRを算出してみましょう。
ここで紹介する方法を応用すればPERも算出可能です。
味の素の2023年3月31日時点のPBRを取得します。
株価は2023年3月31日時点の調整前株価(終値)
1株あたり純資産(BookValuePerShare)は
2023年3月31日決算のものを使います。
code = 2802 # 味の素
fy = "2023-03-31"
def calc_pbr(code, fy):
# 株価データの取得
df_quotes_bycode = cli.get_prices_daily_quotes(code)
# fyに一致する日付の調整前株価を取得する
fy_price = df_quotes_bycode[df_quotes_bycode["Date"] == fy]["Close"].values[0]
# BPSデータの取得
df_fins = cli.get_fins_statements(code)
fy_bps = df_fins[
(df_fins["CurrentFiscalYearEndDate"] == fy) &
((df_fins["TypeOfDocument"] == "FYFinancialStatements_Consolidated_IFRS") |
(df_fins["TypeOfDocument"] == "FYFinancialStatements_Consolidated_JP"))
]["BookValuePerShare"].values[0]
# PBRの計算 株価/BPS
fy_pbr = fy_price / float(fy_bps)
return fy_pbr
pbr = calc_pbr(code, fy)
print(f"PBR: {pbr:.2f}")
◾️ 出力結果
PBR: 3.17
うまく取得できましたね!