🧪 Skills

AKShare

Comprehensive free financial data API library — supports A-shares, Hong Kong stocks, US stocks, futures, options, funds, bonds, forex, and macro data, no API...

v1.0.1
❤️ 1
⬇️ 116
👁 1
Share

Description


name: akshare description: Comprehensive free financial data API library — supports A-shares, Hong Kong stocks, US stocks, futures, options, funds, bonds, forex, and macro data, no API key required. version: 1.1.0 homepage: https://github.com/akfamily/akshare metadata: {"clawdbot":{"emoji":"💹","requires":{"bins":["python3"]}}}

AKShare (Open-Source Financial Data API Library)

AKShare is a comprehensive, free Python financial data API library covering A-shares, Hong Kong stocks, US stocks, futures, options, funds, bonds, forex, and macroeconomic data. No registration or API key is required, and all functions return pandas.DataFrame.

Documentation: https://akshare.akfamily.xyz/

Installation

pip install akshare --upgrade

Requires Python 3.9+ (64-bit).

Basic Usage

import akshare as ak

# Get daily candlestick data for Ping An Bank
df = ak.stock_zh_a_hist(symbol="000001", period="daily", start_date="20240101", end_date="20240630")
print(df)

Function Naming Convention

{asset_type}_{market}_{data_type}_{data_source}
  • Asset type: stock (stocks), futures (futures), fund (funds), bond (bonds), forex (foreign exchange), option (options), macro (macroeconomics), index (indices)
  • Market: zh (China), us (United States), hk (Hong Kong), or exchange codes
  • Data type: spot (real-time), hist (historical), daily (daily bars), minute (minute bars)
  • Data source: em (East Money), sina (Sina Finance), exchange abbreviations

Stock Data (A-Shares)

Real-Time Quotes — All A-Shares

import akshare as ak

# Get real-time quotes for all A-shares
df = ak.stock_zh_a_spot_em()
# Returned columns: 序号 (index), 代码 (code), 名称 (name), 最新价 (latest price), 涨跌幅 (change %), 涨跌额 (change amount), 成交量 (volume), 成交额 (turnover), 振幅 (amplitude), 最高 (high), 最低 (low), 今开 (open), 昨收 (prev close), 量比 (volume ratio), 换手率 (turnover rate), 市盈率 (P/E ratio), 市净率 (P/B ratio), ...

Historical Candlestick Data

# Get historical daily candlestick data for a specific stock
df = ak.stock_zh_a_hist(
    symbol="000001",       # Stock code (without prefix)
    period="daily",        # Period: "daily", "weekly", "monthly"
    start_date="20240101", # Start date, format YYYYMMDD
    end_date="20240630",   # End date
    adjust=""              # Adjustment: "" (unadjusted), "qfq" (forward-adjusted), "hfq" (backward-adjusted)
)
# Returned columns: 日期 (date), 开盘 (open), 收盘 (close), 最高 (high), 最低 (low), 成交量 (volume), 成交额 (turnover), 振幅 (amplitude), 涨跌幅 (change %), 涨跌额 (change amount), 换手率 (turnover rate)

Minute-Level Candlestick Data

# Get minute-level candlestick data
df = ak.stock_zh_a_hist_min_em(
    symbol="000001",
    period="5",            # Minute interval: "1", "5", "15", "30", "60"
    start_date="2024-01-02 09:30:00",
    end_date="2024-01-02 15:00:00",
    adjust=""              # Adjustment type
)

Individual Stock Basic Info

# Get basic information for an individual stock
df = ak.stock_individual_info_em(symbol="000001")
# Returned columns: 总市值 (total market cap), 流通市值 (circulating market cap), 行业 (industry), 上市时间 (listing date), 股票代码 (stock code), 股票简称 (stock name), 总股本 (total shares), 流通股 (circulating shares) ...

Hong Kong Stock Data

# Hong Kong stock real-time quotes
df = ak.stock_hk_spot_em()

# Hong Kong stock historical candlestick data
df = ak.stock_hk_hist(
    symbol="00700",        # Tencent Holdings
    period="daily",        # Daily bars
    start_date="20240101",
    end_date="20240630",
    adjust="qfq"           # Forward-adjusted
)

US Stock Data

# US stock daily candlestick data
df = ak.stock_us_daily(symbol="AAPL", adjust="qfq")

# US stock real-time quotes
df = ak.stock_us_spot_em()

Index Data

# A-share index historical data (e.g., Shanghai Composite Index 000001)
df = ak.stock_zh_index_daily_em(symbol="sh000001")

# Index constituents (e.g., CSI 300)
df = ak.index_stock_cons_csindex(symbol="000300")

Fund Data

# ETF real-time quotes
df = ak.fund_etf_spot_em()

# ETF historical candlestick data
df = ak.fund_etf_hist_em(
    symbol="510300",       # CSI 300 ETF
    period="daily",
    start_date="20240101",
    end_date="20240630",
    adjust="qfq"
)

# Open-end fund daily NAV
df = ak.fund_open_fund_daily_em(symbol="000001")

# Fund ratings
df = ak.fund_rating_all()

Futures Data

# Futures daily data (aggregated by exchange)
from akshare import get_futures_daily
df = get_futures_daily(start_date="20240101", end_date="20240102", market="CFFEX")
# market options: "CFFEX" (China Financial Futures Exchange), "SHFE" (Shanghai Futures Exchange), "DCE" (Dalian Commodity Exchange), "CZCE" (Zhengzhou Commodity Exchange), "INE" (Shanghai International Energy Exchange), "GFEX" (Guangzhou Futures Exchange)

# Futures real-time quotes
df = ak.futures_zh_spot()

# Futures inventory data
df = ak.futures_inventory_99(symbol="豆一")

Options Data

# Exchange options historical data
df = ak.option_hist_dce(symbol="豆粕期权")

# SSE 50 ETF options
df = ak.option_sse_spot_price(symbol="510050")

Bond Data

# Convertible bond list
df = ak.bond_zh_cov()

# Convertible bond historical candlestick data
df = ak.bond_zh_hs_cov_daily(symbol="sz123456")

# China bond spot quotes
df = ak.bond_spot_quote()

Forex Data

# Forex real-time quotes (East Money)
df = ak.forex_spot_em()

# Forex spot quotes (China Foreign Exchange Trade System)
df = ak.fx_spot_quote()

# Forex swap quotes
df = ak.fx_swap_quote()

Macroeconomic Data

# China CPI annual data
df = ak.macro_china_cpi_yearly()

# China GDP annual data
df = ak.macro_china_gdp_yearly()

# China PMI data
df = ak.macro_china_pmi()

# US Non-Farm Payrolls data
df = ak.macro_usa_non_farm()

# US CPI monthly data
df = ak.macro_usa_cpi_monthly()

News and Sentiment

# Individual stock financial news (East Money)
df = ak.stock_news_em(symbol="000001")

# CCTV news
df = ak.news_cctv(date="20240101")

Complete Example: Download Data and Plot a Candlestick Chart

import akshare as ak
import pandas as pd
import mplfinance as mpf  # pip install mplfinance

# Get forward-adjusted daily candlestick data for Kweichow Moutai
df = ak.stock_zh_a_hist(
    symbol="600519",
    period="daily",
    start_date="20240101",
    end_date="20240630",
    adjust="qfq"
)

# Set date index and rename columns to English (required by mplfinance)
df.index = pd.to_datetime(df["日期"])  # 日期 = Date
df.rename(columns={
    "开盘": "Open",    # 开盘 = Open price
    "收盘": "Close",   # 收盘 = Close price
    "最高": "High",    # 最高 = High price
    "最低": "Low",     # 最低 = Low price
    "成交量": "Volume" # 成交量 = Volume
}, inplace=True)

# Plot candlestick chart with 5/10/20-day moving averages and volume
mpf.plot(df, type="candle", mav=(5, 10, 20), volume=True)

Usage Tips

  • No API key or registration required — works out of the box.
  • All functions return pandas DataFrame — ready for analysis, export, and visualization.
  • A-share data columns are in Chinese; US/HK stock data columns are in English.
  • Use --upgrade to keep akshare up to date — interfaces update frequently due to upstream data source changes.
  • Non-Python users can use the AKTools HTTP API wrapper.
  • Data is for academic research only — not investment advice.
  • Full API reference: https://akshare.akfamily.xyz/data/index.html

Advanced Examples

Batch Download Multiple Stocks

import akshare as ak
import pandas as pd

# Define the list of stocks to download
stock_list = ["000001", "600519", "300750", "601318", "000858"]

all_data = {}
for symbol in stock_list:
    # Download forward-adjusted daily candlestick data for each stock
    df = ak.stock_zh_a_hist(
        symbol=symbol,
        period="daily",
        start_date="20240101",
        end_date="20240630",
        adjust="qfq"
    )
    df["股票代码"] = symbol  # Add stock code column (股票代码) for later merging
    all_data[symbol] = df
    print(f"Downloaded {symbol}, {len(df)} records")

# Merge all stock data into one large DataFrame
combined = pd.concat(all_data.values(), ignore_index=True)
combined.to_csv("multi_stock_data.csv", index=False)
print(f"Combined total: {len(combined)} records")

Calculate Technical Indicators (Moving Averages, MACD, RSI)

import akshare as ak
import pandas as pd
import numpy as np

# Get forward-adjusted daily candlestick data for Kweichow Moutai
df = ak.stock_zh_a_hist(symbol="600519", period="daily",
                         start_date="20240101", end_date="20241231", adjust="qfq")

# Convert close price to float (收盘 = close price)
df["收盘"] = df["收盘"].astype(float)

# Calculate moving averages
df["MA5"] = df["收盘"].rolling(window=5).mean()    # 5-day moving average
df["MA10"] = df["收盘"].rolling(window=10).mean()   # 10-day moving average
df["MA20"] = df["收盘"].rolling(window=20).mean()   # 20-day moving average
df["MA60"] = df["收盘"].rolling(window=60).mean()   # 60-day moving average

# Calculate MACD indicator
ema12 = df["收盘"].ewm(span=12, adjust=False).mean()  # 12-day exponential moving average
ema26 = df["收盘"].ewm(span=26, adjust=False).mean()  # 26-day exponential moving average
df["DIF"] = ema12 - ema26                              # Fast line (DIF)
df["DEA"] = df["DIF"].ewm(span=9, adjust=False).mean() # Slow line (DEA)
df["MACD"] = 2 * (df["DIF"] - df["DEA"])               # MACD histogram

# Calculate RSI indicator (14-day)
delta = df["收盘"].diff()
gain = delta.where(delta > 0, 0)       # Upward movement
loss = -delta.where(delta < 0, 0)      # Downward movement
avg_gain = gain.rolling(window=14).mean()
avg_loss = loss.rolling(window=14).mean()
rs = avg_gain / avg_loss
df["RSI14"] = 100 - (100 / (1 + rs))   # RSI value

# Calculate Bollinger Bands (20-day)
df["BOLL_MID"] = df["收盘"].rolling(window=20).mean()           # Middle band
df["BOLL_UP"] = df["BOLL_MID"] + 2 * df["收盘"].rolling(window=20).std()  # Upper band
df["BOLL_DN"] = df["BOLL_MID"] - 2 * df["收盘"].rolling(window=20).std()  # Lower band

# 日期 = date, 收盘 = close price
print(df[["日期", "收盘", "MA5", "MA20", "DIF", "DEA", "MACD", "RSI14"]].tail(10))

Filter Limit-Up Stocks

import akshare as ak

# Get real-time quotes for all A-shares
df = ak.stock_zh_a_spot_em()

# Filter stocks with gain > 9.5% (near daily limit-up)
df["涨跌幅"] = df["涨跌幅"].astype(float)  # 涨跌幅 = change percentage
limit_up = df[df["涨跌幅"] >= 9.5].sort_values("涨跌幅", ascending=False)
print(f"Today's limit-up / near limit-up stocks: {len(limit_up)} total")
# 代码 = code, 名称 = name, 最新价 = latest price, 涨跌幅 = change %, 成交额 = turnover, 换手率 = turnover rate
print(limit_up[["代码", "名称", "最新价", "涨跌幅", "成交额", "换手率"]].head(20))

Get Dragon-Tiger List Data

import akshare as ak

# Get Dragon-Tiger list detail data
df = ak.stock_lhb_detail_em(start_date="20240101", end_date="20240131")
print(df.head())

# Get Dragon-Tiger list brokerage branch rankings
df_dept = ak.stock_lhb_hyyyb_em(start_date="20240101", end_date="20240131")
print(df_dept.head())

Get Margin Trading Data

import akshare as ak

# Get Shanghai-Shenzhen margin trading summary data
df = ak.stock_margin_sse(start_date="20240101", end_date="20240630")
print(df.head())

# Get individual stock margin trading details
df_detail = ak.stock_margin_detail_sse(date="20240102")
print(df_detail.head())

Get Northbound Capital (Stock Connect) Data

import akshare as ak

# Get northbound capital historical data
df = ak.stock_hsgt_hist_em(symbol="北向资金")  # 北向资金 = Northbound capital
print(df.tail(10))

# Get northbound capital stock holdings details
df_hold = ak.stock_hsgt_hold_stock_em(market="北向", indicator="今日排行")  # 北向 = Northbound, 今日排行 = Today's ranking
print(df_hold.head(20))

Get Shareholder Data

import akshare as ak

# Get top 10 shareholders
df = ak.stock_gdfx_top_10_em(symbol="600519", date="20231231")
print(df)

# Get top 10 tradable shareholders
df_float = ak.stock_gdfx_free_top_10_em(symbol="600519", date="20231231")
print(df_float)

Get Sector Quotes Data

import akshare as ak

# Get industry sector quotes
df_industry = ak.stock_board_industry_name_em()
print(df_industry.head(20))

# Get concept sector quotes
df_concept = ak.stock_board_concept_name_em()
print(df_concept.head(20))

# Get constituent stocks of a specific sector
df_stocks = ak.stock_board_industry_cons_em(symbol="银行")  # 银行 = Banking
print(df_stocks)

Get Lock-Up Share Release Data

import akshare as ak

# Get lock-up share release data
df = ak.stock_restricted_release_queue_em(symbol="全部A股")  # 全部A股 = All A-shares
print(df.head(20))

Get Market Capital Flow

import akshare as ak

# Get overall market capital flow
df = ak.stock_market_fund_flow()
print(df.tail(10))

# Get individual stock capital flow
df_stock = ak.stock_individual_fund_flow(stock="000001", market="sz")
print(df_stock.tail(10))

Complete Example: Multi-Factor Stock Screening

import akshare as ak
import pandas as pd

# Step 1: Get all A-share real-time quotes
df = ak.stock_zh_a_spot_em()

# Step 2: Convert data types
for col in ["市盈率-动态", "市净率", "换手率", "涨跌幅", "成交额"]:
    df[col] = pd.to_numeric(df[col], errors="coerce")

# Step 3: Multi-factor screening
# Condition 1: PE between 5-30 (exclude loss-making and overvalued)
# Condition 2: PB between 0.5-5
# Condition 3: Turnover rate > 1% (reasonable liquidity)
# Condition 4: Daily change between -3% and 3% (exclude abnormal volatility)
filtered = df[
    (df["市盈率-动态"] > 5) & (df["市盈率-动态"] < 30) &
    (df["市净率"] > 0.5) & (df["市净率"] < 5) &
    (df["换手率"] > 1) &
    (df["涨跌幅"] > -3) & (df["涨跌幅"] < 3)
].copy()

# Step 4: Sort by PE, select top 20 lowest PE stocks
result = filtered.sort_values("市盈率-动态").head(20)
print(f"Selected {len(result)} stocks:")
print(result[["代码", "名称", "最新价", "市盈率-动态", "市净率", "换手率", "涨跌幅"]])

社区与支持

大佬量化 (Boss Quant) 维护 — 量化交易教学与策略研发团队。

微信客服: bossquant1 · Bilibili · 搜索 大佬量化 on 微信公众号 / Bilibili / 抖音

Reviews (0)

Sign in to write a review.

No reviews yet. Be the first to review!

Comments (0)

Sign in to join the discussion.

No comments yet. Be the first to share your thoughts!

Compatible Platforms

Pricing

Free

Related Configs