J-Quants API は日本取引所グループ(JPX)が提供する、企業の決算データや時系列の株価データなど金融情報にアクセスできるAPIです。データ分析をしたい個人投資家にとって効率的なデータの取得は大きなハードルでしたが、J-Quants API により金融データがREST APIで提供されることで、ソフトウェアで簡単に最新データにアクセスできるようになりました。本記事ではJ-Quants API の登録方法と使い方、そしてCData REST Excel Add-Ins と組み合わせてExcel で利用する方法を紹介します。
1. J-Quants APIの登録
J-Quants API を使用するにはメールアドレスと氏名、住所の登録が必要です。
新規登録はトップページの[J-Quants APIに登録する]をクリックします。
メールアドレスとパスワードを設定し、[利用規約に同意して登録する]をクリックします。
設定したメールアドレスにメールが届いたらサインインし、プランを選択します。今回はFree を選択しました。
最後に名前と住所を入力して[申し込む]をクリックします。
これで登録は完了です。API のアクセスには登録したメールアドレスとパスワードを使います。
2. J-Quants APIの使い方1 ~ 認証
金融データを取得するエンドポイントへアクセスするには、ユーザが正規のアカウントを保持していることを証明するIdトークンが必要です。また、Idトークンの取得にはリフレッシュトークンが必要です。
2.1 リフレッシュトークンの取得
リフレッシュトークンの取得方法はこちらです。リクエストボディにメールアドレスとパスワードを付与して v1/token/auth_user エンドポイントにアクセスします。
以下にcurlでの実行例を示します。
curl --request POST "https://api.jquants.com/v1/token/auth_user" --header "Content-Type: application/json" --data "{ \"mailaddress\":\"[email protected]\",\"password\":\"testpassword\"}"
リフレッシュトークンが取得できました。
{"refreshToken": "eyJjdHkiOiJKV1QiLCJlbmMi_2x1lj0GsFpJwb4P ~省略~ Dg6tGl4WGlZ-KyveWeVg3zoDk2GA.MJeF5v4nG_ZQXFv6vfAHXA"}
2.2 Idトークンの取得
Idトークンの取得方法はこちらです。クエリパラメータにリフレッシュトークンを付与してv1/token/auth_refreshエンドポイントにアクセスします。
curlでの実行例を示します。
curl --request POST "https://api.jquants.com/v1/token/auth_refresh?refreshtoken=eyJjdHkiOiJKV1QiLCJlbmMi_2x1lj0GsFpJwb4P ~省略~ Dg6tGl4WGlZ-KyveWeVg3zoDk2GA.MJeF5v4nG_ZQXFv6vfAHXA"
Idトークンが取得できました。データの取得にはこのIdトークンを使います。
{"IdToken": "eyJraWQiOiJHQXNvU2D6wSEVECKgKmxHVL7 ~省略~ pRmbxu1uWCNqKt5gJ8JSRLj6X51kibpNvzZK
3. J-Quants APIの使い方2 ~ データ取得
それではIdトークンを使ってデータを取得してみます。J-Quants API は財務、株価、配当情報などデータの種類ごとにエンドポイントが分かれていますが、共通的な取得方法はだいたい以下の通りです。
- 各エンドポイントにGET メソッドでアクセス
- 認証情報としてヘッダにAuthorization=を設定
- code, dateなどのクエリパラメータを使用して企業コードや日付でフィルタリング
3.1 上場銘柄一覧の取得
はじめに上場銘柄の一覧を取得してみます。API仕様はこちらです。
ここでは例としてトヨタ自動車(7203)の銘柄情報を取得してみます。クエリパラメータとしてcode=7203を付与します。
curl --request GET "https://api.jquants.com/v1/listed/info?code=7203" --header "Authorization: eyJraWQiOiJHQXNvU2D6wSEVECKgKmxHVL7 ~省略~ pRmbxu1uWCNqKt5gJ8JSRLj6X51kibpNvzZK"
レスポンスとして以下のように企業情報が返ってきました。
{"info": [{"Date": "2023-09-14", "Code": "72030", "CompanyName": "トヨタ自動車", "CompanyNameEnglish": "TOYOTA MOTOR CORPORATION", "Sector17Code": "6", "Sector17CodeName": "自動車・輸送機", "Sector33Code": "3700", "Sector33CodeName": "輸送 用機器", "ScaleCategory": "TOPIX Core30", "MarketCode": "0111", "MarketCodeName": "プライム"}]}
3.2 株価の取得
続いて株価を取得してみます。API仕様はこちらです。
トヨタ自動車(7203)の2023年9月1日の株価を取得してみます。クエリパラメータとしてcode=7203と、date=2023-09-01 を付与します。
curl --request GET "https://api.jquants.com/v1/listed/info?code=7203&date=2023-09-01" --header "Authorization: eyJraWQiOiJHQXNvU2D6wSEVECKgKmxHVL7 ~省略~ pRmbxu1uWCNqKt5gJ8JSRLj6X51kibpNvzZK"
以下のように9月1日の株価として始値、高値、安値、終値などが返ってきました。
{"daily_quotes": [{"Date": "2023-09-01", "Code": "72030", "Open": 2485.0, "High": 2525.0, "Low": 2483.0, "Close": 2519.5, "UpperLimit": "0", "LowerLimit": "0", "Volume": 23445600.0, "TurnoverValue": 58964193700.0, "AdjustmentFactor": 1.0, "AdjustmentOpen": 2485.0, "AdjustmentHigh": 2525.0, "AdjustmentLow": 2483.0, "AdjustmentClose": 2519.5, "AdjustmentVolume": 23445600.0}]}
dateパラメータを指定しない場合は取得可能な全期間のデータを取得します。また、from, toパラメータを使って取得する期間を指定することもできます。
4. Excelからアクセス1 ~ 接続
個人がデータ分析にAPI を使うときはpython などでプログラムを作成することが一般的ですが、今回はツールを使ってノーコードでAPI にアクセスします。
分析ツールとして使うのはExcelで、データの取得には CData REST Excel Add-Ins を使います。CData REST Excel Add-Ins は指定したURL のREST API にアクセスし、Excel 上にデータを取得してくれるアドインです。
このアドインはレスポンスをうまく解釈してテーブルに展開してくれますが、レスポンスが複雑な構造になっていたり、一般的でない認証方法が使われている場合には別途スキーマ定義情報が必要になります。これらの定義情報はRSDファイル と呼ばれるファイルに記述します。
RSD ファイルはエンドポイントごとに作成します。今回、J-Quants用のRSDファイルとして、上場銘柄一覧の/listed/infoエンドポイントにアクセスするCompany.rsd, 財務情報の/listed/statemtnsエンドポイントにアクセスするStatements.rsd, そして株価情報の/prices/daily_quotesエンドポイントにアクセスするDailyQuotes.rsd の3つを作成しました。これらのRSD ファイルはこちらからダウンロードできます。
4.1 CData REST Excel Add-Ins のインストール
はじめにCData REST Excel Add-Ins をExcel で使えるようにします。こちらからCData REST Excel Add-Ins をダウンロードしインストールしてください。恒久的に使う場合は有料となりますが、評価版は30日間無料で使用できます。インストールが完了すると以下のようにExcel にCData タブが追加されます。
4.2 接続設定
J-Quants API への接続を設定します。CData タブの[データの取得]をクリックし、[取得元:REST]を選択します。初回は接続情報を設定する画面が表示されますので、以下のプロパティに値を設定します。
セクション |
プロパティ名 |
設定値 |
Authentication |
User |
J-Quants API アカウントのメールアドレス |
Authentication |
Password |
J-Quants API アカウントのパスワード |
Schema |
Location |
RSDファイルがあるフォルダのパス |
Miscellaneous |
Other |
「PseudoColumns="*=*"」を設定 |
プロパティ設定後に[接続テスト]をクリックし、エラーが発生しないことを確認してください。ここまで設定すればデータ取得準備は完了です。
5. Excelからアクセス2 ~ データ取得
それでは設定した接続を用いてデータを取得します。
5.1 上場銘柄一覧の取得
はじめに上場銘柄一覧を取得します。CData タブの[データの取得]をクリックし、[取得元:REST]を選択します。接続が完了していると以下のように[CData クエリ]画面が表示されます。この画面では接続するエンドポイント(テーブル/ビューとして定義)や取得する項目を選択します。上場銘柄一覧はCompany.rsd ファイルで定義されたCompany ビューに紐づけられているので、[選択]をクリックして[CData.REST.Company (ビュー)]を選択します。
ビューを選択するとカラム一覧が読み込まれます。ここで取得する項目やフィルタ条件を指定することができます。今回は全銘柄の全項目を取得しますので何も設定せずに[OK]をクリックしてください。
APIからデータの取得が完了するとシートが追加されデータが展開されます。以下のように上場銘柄の一覧が表示されました。
5.2 株価の取得
続いてトヨタ自動車(7203)の2023年8月1日から1ヶ月の株価を取得します。[CData クエリ]画面でDailyQuotes ビューを選択し、企業や取得期間を指定するフィルタ条件を設定します。SearchCode に企業コード「7203」, SearchDateFrom に取得開始日「2023-08-01」, SearchDateTo に取得終了日「2023-08-31」を設定します。[フィルタ]はすべて[次の値に等しい]にします。
[OK]をクリックし、しばらく待つと以下のように株価データが表示されます。
Excel のローソクチャートを使うと日足の株価チャートが簡単に作成できます。
5.3 財務情報を取得
続いてトヨタ自動車(7203)の23年3月期の四半期キャッシュフロー推移を取得します。[CData クエリ]画面でStatements ビューを選択します。フィルタ条件として、SearchCode に企業コード「7203」, CurrentPeriodStartDate に会計期間の開始日「2022-04-01」を設定します。
財務情報はカラム数が非常に多いため取得するカラムを絞り込みます。カラムリストで以下のカラムのみチェックしてください。
カラム |
説明 |
TypeOfCurrentPeriod |
会計期間の種類 |
CashFlowsFromOperatingActivities |
営業キャッシュフロー |
CashFlowsFromInvestingActivities |
投資キャッシュフロー |
CashFlowsFromFinancingActivities |
財務キャッシュフロー |
APIからデータ取得が完了すると以下のように四半期キャッシュフローのデータが展開されます。デフォルトでは数値として読み込まれるため、Excel で列の書式を通貨にしました。
グラフ機能を使うとIR 資料にあるようなキャッシュフロー推移グラフが作成できます。
5.4 PERを計算
このセクションでは簡単なSQL の知識が必要になります。
最後に投資家おなじみの指標PER (株価収益率)を計算します。PER はEPS と株価から計算するため、財務情報と株価の2つのエンドポイントへのアクセスが必要になります。それぞれのデータをシートに展開してから計算する方法もありますが、今回はピンポイントでデータを取得するためにCDATAQUERY関数を使います。CDATAQUERY 関数はCData Excel Add-Ins によって追加されるExcel の数式で、それぞれのビューに対して任意のSQL を実行することができます。
注意:CDATAQUERY 関数は他のExcel 関数と同様に行の追加やセルのコピーなどシートが更新されるたびに関数が実行され、そのたびにAPI アクセスが発生します。そのためExcelの自動計算をオフにすることをお勧めします。
今回はこの関数を使ってトヨタ自動車(7203)の、23年3月期のEPSと8月31日の株価に基づく実績PERを計算します。
はじめに23年3月期のEPS を取得します。これを取得するSQL は以下の通りです。23年3月期通期のレコードを取得するためのフィルタ条件として CurrentPeriodStartDate = '2022-04-01' and TypeOfCurrentPeriod = 'FY' を指定しました。
select EarningsPerShare from Statement where SearchCode = 7203 and CurrentPeriodStartDate = '2022-04-01' and TypeOfCurrentPeriod = 'FY'"J
これをCDATAQUERY 関数で実行します。セルに入力した数式は以下の通りです。値のみを取得するために「Scalar=True」オプションを指定しています。
=CDATAQUERY("select EarningsPerShare from Statement where SearchCode = 7203 and CurrentPeriodStartDate = '2022-04-01' and TypeOfCurrentPeriod = 'FY'",,,,"Scalar=True")
続いて株価として2023年8月31日の終値を取得します。実行したSQLは以下の通りです。
select Close from DailyQuotes where SearchCode = 7203 and SearchDate = '2023-08-31
セルに入力した数式は以下の通りです。
=CDATAQUERY("select Close from DailyQuotes where SearchCode = 7230 and SearchDate = '2023-08-31'",,,,"Scalar=True")
最後に終値をEPS で割ってPER を計算します。それぞれ項目名を追加して以下のようにExcel 上でPER を表示できました。
上記はトヨタ自動車(7203)のみのPER を計算しましたが、WHERE 句のSearchCode を参照にして他のセルに入力された企業コードのPER を計算するように改良します。
セルに入力した数式は以下の通りです。
=CDATAQUERY("select EarningsPerShare from Statement where SearchCode = "&B2&" and CurrentPeriodStartDate = '2022-04-01' and TypeOfCurrentPeriod = 'FY'",,,,"Scalar=True")
これを利用して他の自動車メーカーのPER も計算してみます。コードに日産自動車(7201)、マツダ(7261)、ホンダ(7267)、SUBARU(7270) の企業コードを入力し、数式をコピーします。すると以下のように日産自動車(7201)以外のPER を計算し表示することができました。
日産自動車(7201)のEPS が取得できなかった理由は23年3月期通期のレコードが2件あったためです。APIの財務情報エンドポイントは開示書類ごとにレコードが存在します。日産自動車は23年3月期通期の開示資料として「決算短信」と「業績予想の修正」の2つが登録されており、Excel上に後者のレコード情報が読み込まれたことでEPS が取得できませんでした。また、今回は実績PER を計算しましたが指標としてより重要なのは来期純利益予想に基づく予想PER です。来期予想EPS はForecastEarningsPerShare カラムで取得できますが、このときレコードの取得条件(会計期間の指定)をどう設定するかが難しいところです。ここらへんは改良の余地がありそうです。
おわりに
本記事ではJ-Quants APIの使い方とCData REST Excel Add-Ins を使った簡単な分析方法を紹介しました。RSD ファイルはその他のCData Drivers でも使うことができます。金融データをPower BI で可視化したり、CData Sync を使ってデータベースに同期することもできますので、ぜひいろいろなツールで分析をお試しください。
関連コンテンツ