Async Python client for JQuants API
Project description
async-jquants-api-client
Async Python client for JQuants API v2.
jquants-api-client-python の以下の点を改善したライブラリです:
- スレッドセーフでない・
requests.Sessionベース →httpx+asyncioによる完全非同期実装 - v2 のレートリミット未対応 →
aiolimiterによるプラン別レートリミット対応
要件
- Python 3.10+
- JQuants API キー(JQuants で取得)
インストール
pip install async-jquants-api-client
GitHubからの開発版インストール
pip install git+https://github.com/getumen/async-jquants-api-client.git
設定
API キーは以下の優先順位で読み込まれます:
- コード内で直接指定
- 環境変数
JQUANTS_API_KEY - 設定ファイル
jquants-api.toml(カレントディレクトリ →~/.jquants-api/の順)
設定ファイルの例
[jquants-api-client]
api_key = "your_api_key_here"
基本的な使い方
import asyncio
from async_jquants_api_client import JQuantsClientV2, Plan
async def main():
async with JQuantsClientV2(api_key="your_api_key", plan=Plan.STANDARD) as client:
# 株価日足(1日分)
df = await client.get_eq_bars_daily(code="86970", date_yyyymmdd="2024-01-05")
print(df)
# 株価日足(期間指定、全銘柄を並列取得)
df = await client.get_eq_bars_daily_range("20240101", "20240131")
print(df)
asyncio.run(main())
プラン別レートリミット
| プラン | リクエスト数/分 |
|---|---|
| FREE | 5 |
| LIGHT | 60 |
| STANDARD | 120 |
| PREMIUM | 500 |
| fins/summary (全プラン共通) | 60 |
| fins/details (全プラン共通) | 60 |
from async_jquants_api_client import JQuantsClientV2, Plan
async with JQuantsClientV2(api_key="your_api_key", plan=Plan.PREMIUM) as client:
...
API リファレンス
株式マスター
# 上場銘柄一覧
df = await client.get_eq_master(code="86970", date="20240105")
# 上場銘柄一覧(業種・市場区分の英語名付き)
df = await client.get_list()
株価
# 日足
df = await client.get_eq_bars_daily(code="86970", date_yyyymmdd="2024-01-05")
df = await client.get_eq_bars_daily(code="86970", from_yyyymmdd="20240101", to_yyyymmdd="20240131")
# 日足(日付範囲、全銘柄を並列取得)
df = await client.get_eq_bars_daily_range("20240101", "20240131")
# 前場四本値
df = await client.get_eq_bars_daily_am(code="86970")
# 分足・5分足・15分足
df = await client.get_eq_bars_minute(code="86970", date_yyyymmdd="2024-01-05")
df = await client.get_eq_bars_5minute(code="86970", date_yyyymmdd="2024-01-05")
df = await client.get_eq_bars_15minute(code="86970", date_yyyymmdd="2024-01-05")
財務情報
# 財務情報サマリ
df = await client.get_fin_summary(code="86970")
df = await client.get_fin_summary_range("20240101", "20240131", cache_dir="/path/to/cache")
# 財務諸表詳細
df = await client.get_fin_details(date_yyyymmdd="2024-01-05")
df = await client.get_fin_details_range("20240101", "20240131", cache_dir="/path/to/cache")
# 配当金情報
df = await client.get_fin_dividend(code="86970")
# 決算発表予定
df = await client.get_eq_earnings_cal()
市場統計
# 空売り比率
df = await client.get_mkt_short_ratio(date_yyyymmdd="2024-01-05")
df = await client.get_mkt_short_ratio_range("20240101", "20240131")
# 空売り残高報告
df = await client.get_mkt_short_sale_report(disclosed_date="2024-01-05")
df = await client.get_mkt_short_sale_report_range("20240101", "20240131")
# 信用取引週末残高
df = await client.get_mkt_margin_interest(date_yyyymmdd="2024-01-05")
df = await client.get_mkt_margin_interest_range("20240101", "20240131")
# 日々公表信用取引残高
df = await client.get_mkt_margin_alert(date_yyyymmdd="2024-01-05")
df = await client.get_mkt_margin_alert_range("20240101", "20240131")
# 売買内訳
df = await client.get_mkt_breakdown(date_yyyymmdd="2024-01-05")
df = await client.get_mkt_breakdown_range("20240101", "20240131")
# 取引カレンダー
df = await client.get_mkt_calendar(from_yyyymmdd="20240101", to_yyyymmdd="20240131")
# 投資部門別売買状況
df = await client.get_eq_investor_types(section="TSEPrime")
指数
# 指数四本値
df = await client.get_idx_bars_daily(code="0000", date_yyyymmdd="2024-01-05")
# TOPIX
df = await client.get_idx_bars_daily_topix(from_yyyymmdd="20240101", to_yyyymmdd="20240131")
デリバティブ
# 先物四本値
df = await client.get_drv_bars_daily_fut(date_yyyymmdd="2024-01-05")
df = await client.get_drv_bars_daily_fut_range("20240101", "20240131")
# オプション四本値
df = await client.get_drv_bars_daily_opt(date_yyyymmdd="2024-01-05")
df = await client.get_drv_bars_daily_opt_range("20240101", "20240131")
# 日経225オプション四本値
df = await client.get_drv_bars_daily_opt_225(date_yyyymmdd="2024-01-05")
df = await client.get_drv_bars_daily_opt_225_range("20240101", "20240131")
マスターデータ(ローカル)
# 17業種・33業種・市場区分(APIリクエストなし)
df = client.get_17_sectors()
df = client.get_33_sectors()
df = client.get_market_segments()
キャッシュ
get_fin_summary_range と get_fin_details_range は cache_dir を指定することで日付ごとにキャッシュできます。
df = await client.get_fin_summary_range(
"20200101", "20240131",
cache_dir="/path/to/cache"
)
df = await client.get_fin_details_range(
"20200101", "20240131",
cache_dir="/path/to/cache"
)
キャッシュファイルのパス形式:
| メソッド | 形式 | パス |
|---|---|---|
get_fin_summary_range |
CSV.gz | {cache_dir}/{yyyy}/v2_fin_summary_{yyyymmdd}.csv.gz |
get_fin_details_range |
Parquet | {cache_dir}/{yyyy}/v2_fin_details_{yyyymmdd}.parquet |
エラーハンドリング
from async_jquants_api_client import JQuantsAuthError, JQuantsAPIError
try:
df = await client.get_eq_bars_daily(code="86970", date_yyyymmdd="2024-01-05")
except JQuantsAuthError:
# 401/403: APIキーが無効
...
except JQuantsAPIError as e:
# その他のAPIエラー(リトライ済み)
print(e.status_code, e.message)
429/500/502/503/504 は指数バックオフで最大3回自動リトライします。
ライセンス
Apache License 2.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file async_jquants_api_client-0.1.0.tar.gz.
File metadata
- Download URL: async_jquants_api_client-0.1.0.tar.gz
- Upload date:
- Size: 91.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
08a3c820a5cd7069b4a0cda2faa24d5d98bb166777dbbd7ec56cd3d53cee4bbc
|
|
| MD5 |
7104dd32959ea33663fa197b7ce1db71
|
|
| BLAKE2b-256 |
65e5aeba07868a0f8d06712c63f9ff4363252fa9909cf3ce00084cd24fd7f1e1
|
Provenance
The following attestation bundles were made for async_jquants_api_client-0.1.0.tar.gz:
Publisher:
python-publish.yml on getumen/async-jquants-api-client
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
async_jquants_api_client-0.1.0.tar.gz -
Subject digest:
08a3c820a5cd7069b4a0cda2faa24d5d98bb166777dbbd7ec56cd3d53cee4bbc - Sigstore transparency entry: 1807477656
- Sigstore integration time:
-
Permalink:
getumen/async-jquants-api-client@e86cb5453df6ba093a6d06caac49eb0ddba6f8fe -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/getumen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@e86cb5453df6ba093a6d06caac49eb0ddba6f8fe -
Trigger Event:
release
-
Statement type:
File details
Details for the file async_jquants_api_client-0.1.0-py3-none-any.whl.
File metadata
- Download URL: async_jquants_api_client-0.1.0-py3-none-any.whl
- Upload date:
- Size: 23.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d8d5b586a1124becbde9289c1975462686592a18b247d726e721296cd9580208
|
|
| MD5 |
b8361dfa84ebc97bf30d55f60af822ce
|
|
| BLAKE2b-256 |
b26c7f3a4aea0443c90f0f3fc066ac8a7efe6c88331af6bb22ab2de31789962b
|
Provenance
The following attestation bundles were made for async_jquants_api_client-0.1.0-py3-none-any.whl:
Publisher:
python-publish.yml on getumen/async-jquants-api-client
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
async_jquants_api_client-0.1.0-py3-none-any.whl -
Subject digest:
d8d5b586a1124becbde9289c1975462686592a18b247d726e721296cd9580208 - Sigstore transparency entry: 1807477680
- Sigstore integration time:
-
Permalink:
getumen/async-jquants-api-client@e86cb5453df6ba093a6d06caac49eb0ddba6f8fe -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/getumen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@e86cb5453df6ba093a6d06caac49eb0ddba6f8fe -
Trigger Event:
release
-
Statement type: