Skip to main content

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 キーは以下の優先順位で読み込まれます:

  1. コード内で直接指定
  2. 環境変数 JQUANTS_API_KEY
  3. 設定ファイル 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_rangeget_fin_details_rangecache_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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

async_jquants_api_client-0.1.0.tar.gz (91.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

async_jquants_api_client-0.1.0-py3-none-any.whl (23.4 kB view details)

Uploaded Python 3

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

Hashes for async_jquants_api_client-0.1.0.tar.gz
Algorithm Hash digest
SHA256 08a3c820a5cd7069b4a0cda2faa24d5d98bb166777dbbd7ec56cd3d53cee4bbc
MD5 7104dd32959ea33663fa197b7ce1db71
BLAKE2b-256 65e5aeba07868a0f8d06712c63f9ff4363252fa9909cf3ce00084cd24fd7f1e1

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file async_jquants_api_client-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for async_jquants_api_client-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d8d5b586a1124becbde9289c1975462686592a18b247d726e721296cd9580208
MD5 b8361dfa84ebc97bf30d55f60af822ce
BLAKE2b-256 b26c7f3a4aea0443c90f0f3fc066ac8a7efe6c88331af6bb22ab2de31789962b

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page