先月、yfinanceで三菱重工(7011.T)のデータを取ろうとしたら、取得できる期間が短くて困ったんですよね。「もっと長期の日足データが欲しい」と思って調べてたら、日本取引所グループが無料でAPIを公開してることを知って、正直ちょっと感動しました。これ、もっと早く知りたかった。。。
なぜJQuants APIを調べたか
僕が投資してるのは主に製造メーカー系の日本株。トヨタ、デンソー、三菱重工あたりをちょこちょこ持ってます。こういった銘柄のバックテストをするには、信頼できる長期の株価データが必要です。
yfinanceは手軽だけど、日本株の場合はデータが欠けてたり、過去の株式分割調整がうまくいってなかったりすることがある。そこで「日本の公式データソースはないか?」と調べて見つけたのが JQuants API です。
日本取引所グループ(JPX)が提供する無料(一部有料プランあり)のAPIで、上場銘柄の株価・財務データ・指数などが取得できます。無料プランでも過去約2年分の日足データが使えます。
JQuants APIとは
JQuants APIは、JPXが運営するデータ提供サービスです。2022年に正式公開され、個人投資家でも無料で利用できます。主なデータ種別はこんな感じ:
- 株価(日足・4本値・出来高・調整後株価)
- 財務情報(決算短信データ)
- 投資部門別売買状況
- 銘柄マスタ(業種・市場区分など)
無料プランは過去約2年分(有料の「スタンダード」プランなら約12年)。製造メーカーのバックテストには有料プランが欲しくなりますが、まずは無料で試せます。
セットアップ:アカウント登録とライブラリインストール
まず JQuants公式サイトでアカウントを作ります(メールアドレスのみ、無料)。登録後にリフレッシュトークンが発行されます。
次にPythonライブラリをインストール。公式クライアントが便利です:
pip install jquants-api-client
基本的な使い方:製造メーカーの株価を取得する
実際にトヨタ(7203)とデンソー(6902)の株価を取得するコードを書いてみます:
import jquantsapi
import pandas as pd
from datetime import datetime, timedelta
# クライアント初期化(リフレッシュトークンを環境変数から読む)
import os
cl = jquantsapi.Client(refresh_token=os.environ["JQUANTS_REFRESH_TOKEN"])
# 取得期間
end_date = datetime.today().strftime("%Y-%m-%d")
start_date = (datetime.today() - timedelta(days=365)).strftime("%Y-%m-%d")
# 製造メーカー銘柄コード
makers = ["7203", "6902", "7011", "6367"] # トヨタ、デンソー、三菱重工、ダイキン
# 全銘柄まとめて取得
dfs = []
for code in makers:
df = cl.get_prices_daily_quotes(
code=code,
date_ctor=start_date,
date_end=end_date
)
df["Code"] = code
dfs.append(df)
prices = pd.concat(dfs, ignore_index=True)
# 調整後終値でピボット
close_pivot = prices.pivot(index="Date", columns="Code", values="AdjustmentClose")
close_pivot.index = pd.to_datetime(close_pivot.index)
print(close_pivot.tail(5))
ポイントは AdjustmentClose(調整後終値)を使うこと。株式分割が自動補正されているので、過去データとの比較がしやすくなります。
業種フィルタで製造メーカーだけを絞り込む
銘柄マスタAPIを使えば、業種コードで自動的に製造業銘柄を抽出できます:
# 銘柄マスタ取得
listed = cl.get_list()
# 業種で絞り込み(SectorCode33 = 33業種分類)
# 3700: 機械、3800: 電気機器、3500: 輸送用機器、など
manufacturing_codes = ["3500", "3700", "3800", "3300"]
makers_list = listed[listed["Sector33Code"].isin(manufacturing_codes)][["Code", "CompanyName", "Sector33CodeName"]]
print(f"製造業銘柄数: {len(makers_list)}")
print(makers_list.head(10))
これで製造業に絞った銘柄リストが取れます。スクリーニングの起点として使えます。
財務データも取れる:決算短信との組み合わせ
JQuants APIのもう一つの強みが財務データ。決算短信の数値(売上高・営業利益・純利益など)も取得できます:
# 財務情報取得(トヨタ)
statements = cl.get_statements(code="7203")
# 主要財務指標を確認
cols = ["DisclosedDate", "NetSales", "OperatingProfit", "NetIncome", "EPS"]
print(statements[cols].tail(8))
株価データと財務データを組み合わせれば、「決算発表の翌日の株価動向」みたいな分析もPythonで完結できます。
yfinanceとの使い分け
正直、yfinanceは今後も使い続けます。手軽さは圧倒的。ただし日本株の精度が怪しい場面(株式分割の調整ミス、欠損など)があるときや、財務データと組み合わせた分析をしたいときはJQuantsが頼りになります。
バックテスト用途では:
- yfinance → 手軽に動かしたいとき、米国株も一緒に扱うとき
- JQuants API → 日本株の精度が重要なとき、財務データと組み合わせるとき
まとめ
JQuants APIは、日本株投資家がPythonでデータ分析をするうえでほぼ必須のツールだと思います。無料で使え、公式データなので信頼性が高く、財務情報まで取れる。
個人的には、次は財務データと株価データを組み合わせて「決算サプライズ後の値動きパターン」を分析してみようと思っています。製造メーカーって決算で大きく動く銘柄が多いので、ここをうまく使えるようになりたい。

