JQuants APIで日本株データを無料取得|製造メーカー株をPythonで自動収集する方法

先月、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でデータ分析をするうえでほぼ必須のツールだと思います。無料で使え、公式データなので信頼性が高く、財務情報まで取れる。

個人的には、次は財務データと株価データを組み合わせて「決算サプライズ後の値動きパターン」を分析してみようと思っています。製造メーカーって決算で大きく動く銘柄が多いので、ここをうまく使えるようになりたい。

タイトルとURLをコピーしました