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")

EDINET

# 大株主状況
df = await client.get_edinet_major_shareholders(code="86970")
df = await client.get_edinet_major_shareholders_range("20240101", "20240131")

# 政策保有株式
df = await client.get_edinet_cross_shareholdings(code="86970")
df = await client.get_edinet_cross_shareholdings_range("20240101", "20240131")

# 大量保有報告書
df = await client.get_edinet_large_volume_shareholders(code="86970")
df = await client.get_edinet_large_volume_shareholders_range("20240101", "20240131")

指数

# 指数四本値
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.2.0.tar.gz (93.1 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.2.0-py3-none-any.whl (24.4 kB view details)

Uploaded Python 3

File details

Details for the file async_jquants_api_client-0.2.0.tar.gz.

File metadata

  • Download URL: async_jquants_api_client-0.2.0.tar.gz
  • Upload date:
  • Size: 93.1 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.2.0.tar.gz
Algorithm Hash digest
SHA256 8faf5604851c13d7c3b66c68017732b4135b533b3acfb7ef00c400b279c26e33
MD5 f9a8620c7d3f267d99457236b77737dd
BLAKE2b-256 6088952bc3d0aaa8b14ffda999a51667b8912cf5163052dfe534171938fa016e

See more details on using hashes here.

Provenance

The following attestation bundles were made for async_jquants_api_client-0.2.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.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for async_jquants_api_client-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1030deb22c229a3e674906139d5859b37f6e5c261d89afdec01a29f32048cb88
MD5 70fc4131c5d4b4f41d7af9068b743584
BLAKE2b-256 550b59a6f332b1a45d3439b1ee5e7183bce492cbd0d1a6a8d6a15908f297d2f3

See more details on using hashes here.

Provenance

The following attestation bundles were made for async_jquants_api_client-0.2.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