Skip to main content

PyJQuants

PyPI CI Python 3.10+ License: MIT Open In Colab

日本語ドキュメント / Japanese Documentation

日本語のドキュメントとチュートリアルは こちら をご覧ください。 Colabで試す: Open In Colab

yfinance-style Python library for J-Quants API (Japanese stock market data).

Documentation (EN) | API Spec | Quickstart Notebook

Features

  • yfinance-style API: Familiar interface for quantitative analysts
  • Lazy-loaded attributes: Data fetched on first access, then cached
  • V2 API support: Simple API key authentication
  • Type hints: Full type annotations with Pydantic models
  • DataFrame integration: Price data returned as pandas DataFrames

Feature Availability by Tier

Feature Free Light Standard Premium
Daily prices ✓* ✓ ✓ ✓
Stock info & search ✓* ✓ ✓ ✓
Financial statements ✓* ✓ ✓ ✓
Trading calendar ✓* ✓ ✓ ✓
Earnings calendar ✓ ✓ ✓ ✓
Investor trades (market-wide) - ✓ ✓ ✓
TOPIX index - ✓ ✓ ✓
Nikkei 225 index - - ✓ ✓
Index options (Nikkei 225) - - ✓ ✓
Margin interest - - ✓ ✓
Short selling ratio - - ✓ ✓
Short positions report - - ✓ ✓
Margin alerts - - ✓ ✓
Sector classifications - - ✓ ✓
Morning session (AM) prices - - - ✓
Dividends - - - ✓
Detailed financials (BS/PL/CF) - - - ✓
Trade breakdown - - - ✓
Futures - - - ✓
Options - - - ✓

*Free tier has 12-week delayed data

Installation

pip install pyjquants

For development:

pip install pyjquants[dev]

Quick Start

Setup

Get your API key from the J-Quants dashboard and set it:

export JQUANTS_API_KEY="your_api_key_here"

Basic Usage

import pyjquants as pjq

# Create a ticker - data is lazy-loaded from API
ticker = pjq.Ticker("7203")  # Toyota

# Access info (fetched on first access, then cached)
ticker.info.name            # "トヨタ自動車"
ticker.info.name_english    # "Toyota Motor Corporation"
ticker.info.sector          # "輸送用機器"
ticker.info.market          # "Prime"

# Get price history (yfinance-style)
df = ticker.history("30d")        # Recent 30 days
df = ticker.history("1y")         # Last year
df = ticker.history(start="2024-01-01", end="2024-06-30")  # Custom range

# Financial data
ticker.financials           # Financial statements
ticker.dividends            # Dividend history

Multi-Ticker Download

import pyjquants as pjq

# Download multiple tickers at once
df = pjq.download(["7203", "6758", "9984"], period="30d")

Search

import pyjquants as pjq

# Search by name or code
tickers = pjq.search("トヨタ")
for t in tickers:
    print(f"{t.code}: {t.info.name}")

Market Indices

import pyjquants as pjq

# Get TOPIX index
topix = pjq.Index.topix()
df = topix.history("1y")

# Get Nikkei 225
nikkei = pjq.Index.nikkei225()
df = nikkei.history("30d")

Market Information

import pyjquants as pjq
from datetime import date

market = pjq.Market()

# Check trading days
market.is_trading_day(date(2024, 12, 25))  # False (holiday)
market.next_trading_day(date(2024, 1, 1))  # Next open day

# Sector information
market.sectors_17  # 17-sector classification
market.sectors_33  # 33-sector classification

Configuration

Environment Variables

Variable Description
JQUANTS_API_KEY Your J-Quants API key (required)
JQUANTS_CACHE_ENABLED Enable caching (default: true)
JQUANTS_CACHE_TTL Cache TTL in seconds (default: 3600)
JQUANTS_RATE_LIMIT Requests per minute (default: 60)

Rate limit tiers: Free=5, Light=60, Standard=120, Premium=500

TOML Configuration

Create ~/.jquants/config.toml:

[auth]
api_key = "your_api_key_here"

[cache]
enabled = true
ttl_seconds = 3600

[rate_limit]
requests_per_minute = 60

Data Models

PriceBar

from pyjquants import PriceBar

bar = ticker.history("1d").iloc[0]
bar.date            # datetime.date
bar.open            # Decimal
bar.high            # Decimal
bar.low             # Decimal
bar.close           # Decimal
bar.volume          # int

API Reference

Main API

Class/Function Description
Ticker(code) Stock ticker with .history(), .info, .financials
download(codes, period) Download price data for multiple tickers
search(query) Search tickers by name or code
Index Market index (TOPIX, Nikkei 225)
Market Market utilities (calendar, sectors)

Models & Enums

Class Description
PriceBar OHLCV price data
StockInfo Stock information
Sector Industry sector
MarketSegment TSE_PRIME, TSE_STANDARD, TSE_GROWTH, OTHER

API Endpoint Mapping

PyJQuants provides a Pythonic interface to all J-Quants V2 API endpoints.

Tier legend: (L) = Light+, (S) = Standard+, (P) = Premium only

Equities

J-Quants API PyJQuants
/equities/bars/daily Ticker("7203").history("30d")
/equities/bars/daily/am Ticker("7203").history_am("30d") (P)
/equities/master Ticker("7203").info / search("トヨタ")
/equities/earnings-calendar Market().earnings_calendar()
/equities/investor-types Market().investor_trades() (L)

Financials

J-Quants API PyJQuants
/fins/summary Ticker("7203").financials
/fins/dividend Ticker("7203").dividends (P)
/fins/details Ticker("7203").financial_details (P)

Markets

J-Quants API PyJQuants
/markets/calendar Market().is_trading_day(date) / trading_days(start, end)
/markets/margin-interest Market().margin_interest() (S)
/markets/sectors/topix17 Market().sectors_17 (S)
/markets/sectors/topix33 Market().sectors_33 (S)
/markets/short-ratio Market().short_ratio() (S)
/markets/breakdown Market().breakdown("7203") (P)
/markets/short-sale-report Market().short_positions() (S)
/markets/margin-alert Market().margin_alerts() (S)

Indices

J-Quants API PyJQuants
/indices/bars/daily/topix Index.topix().history("30d") (L)
/indices/bars/daily Index.nikkei225().history("30d") (S)

Derivatives

J-Quants API PyJQuants
/derivatives/bars/daily/futures Futures("NK225M").history("30d") (P)
/derivatives/bars/daily/options Options("NK225C25000").history("30d") (P)
/derivatives/bars/daily/options/225 IndexOptions.nikkei225().history("30d") (S)

Rate Limits by Tier

J-Quants V2 API has different rate limits based on subscription tier:

Tier Requests/min Monthly Fee Best For
Free 5 ¥0 Testing, learning
Light 60 ~¥1,650 Personal projects
Standard 120 ~¥3,300 Active trading
Premium 500 ~¥16,500 Production systems

Configure your rate limit in environment:

export JQUANTS_RATE_LIMIT=60  # Match your tier

Architecture

PyJQuants follows a Clean Domain-Driven Design:

pyjquants/
├── domain/       # Business logic (Ticker, Index, Market, Futures, Options, models)
├── infra/        # Infrastructure (Session, Cache, Config)
└── adapters/     # API layer (endpoint definitions)

See the Architecture documentation for details.

Development

# Clone repository
git clone https://github.com/obichan117/pyjquants.git
cd pyjquants

# Install with uv
uv sync --all-extras

# Run tests
uv run pytest tests/ -v

# Type checking
uv run mypy pyjquants/

# Linting
uv run ruff check pyjquants/

# Build documentation
uv run mkdocs build --strict

# Serve documentation locally
uv run mkdocs serve

License

MIT License - see LICENSE for details.

Links

Metadata

Release files for pyjquants 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyjquants 0.3.0
File Size Uploaded Provenance
pyjquants-0.3.0.tar.gz 311.7 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for pyjquants 0.3.0
File Interpreter ABI Platform
pyjquants-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 352.3 kB

Release files / pyjquants-0.3.0.tar.gz

Download URL pyjquants-0.3.0.tar.gz
Size 311.7 kB
Tags Source
SHA-256 checksum
How to use checksums
cbeb46d21e669a21d72f90937a2e5de2c76a4c637f88487a55cba0df2ed62edd
BLAKE2b-256 checksum
How to use checksums
4f7b1b89491c80f9ba08d3d39ebb7546fe9a86bcc37b668ad3bf0339671bb121
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.0

Release files / pyjquants-0.3.0-py3-none-any.whl

Download URL pyjquants-0.3.0-py3-none-any.whl
Size 40.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1b37447b4d36c46fb17825068f477aae805b40118bd706cbca80bd7cc8a4928b
BLAKE2b-256 checksum
How to use checksums
434c9c9f48f200dc104964c5f2e4f707e33ca117c67691b99690a772f884bf94
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.0

Security for pyjquants 0.3.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page