AKShare 开源金融数据接口库 - 支持A股、港股、美股、期货、期权、基金、债券、外汇、宏观数据,免费无需API Key。
AKShare(开源金融数据API库)
功能概述
AKShare(开源金融数据API库)是一项面向实际任务的技能,主要用于AKShare 是一个全面的免费Python金融数据API库,覆盖A股、港股、美股、期货、期权、基金、债券、外汇和宏观经济数据;无需注册或API Key,所有函数返回 pandas.DataFrame;
核心要点
- 文档:https://akshare.akfamily.xyz/;
- 需要 Python 3.9+(64位);
- 函数命名规则;
使用与执行
Asset t。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
结果检查与注意事项
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
AKShare(开源金融数据API库)
AKShare 是一个全面的免费Python金融数据API库,覆盖A股、港股、美股、期货、期权、基金、债券、外汇和宏观经济数据。无需注册或API Key,所有函数返回 pandas.DataFrame。
文档:https://akshare.akfamily.xyz/
安装
pip install akshare --upgrade
需要 Python 3.9+(64位)。
基本用法
import akshare as ak # 获取平安银行日K线数据 df = ak.stock_zh_a_hist(symbol="000001", period="daily", start_date="20240101", end_date="20240630") print(df)
函数命名规则
{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
股票数据(A股)
实时行情 — 全部A股
import akshare as ak # 获取全部A股实时行情 df = ak.stock_zh_a_spot_em() # 返回字段: 序号、代码、名称、最新价、涨跌幅、涨跌额、成交量、成交额、振幅、最高、最低、今开、昨收、量比、换手率、市盈率、市净率 ...
历史K线数据
# 获取指定股票历史日K线数据
df = ak.stock_zh_a_hist(
symbol="000001", # 股票代码(不带前缀)
period="daily", # 周期: "daily"(日), "weekly"(周), "monthly"(月)
start_date="20240101", # 开始日期,格式YYYYMMDD
end_date="20240630", # 结束日期
adjust="" # 复权: ""(不复权), "qfq"(前复权), "hfq"(后复权)
)
# 返回字段: 日期、开盘、收盘、最高、最低、成交量、成交额、振幅、涨跌幅、涨跌额、换手率
分钟级K线数据
# 获取分钟级K线数据
df = ak.stock_zh_a_hist_min_em(
symbol="000001",
period="5", # 分钟间隔: "1", "5", "15", "30", "60"
start_date="2024-01-02 09:30:00",
end_date="2024-01-02 15:00:00",
adjust="" # 复权类型
)
个股基本信息
# 获取个股基本信息 df = ak.stock_individual_info_em(symbol="000001") # 返回字段: 总市值、流通市值、行业、上市时间、股票代码、股票简称、总股本、流通股 ...
港股数据
# 港股实时行情
df = ak.stock_hk_spot_em()
# 港股历史K线数据
df = ak.stock_hk_hist(
symbol="00700", # 腾讯控股
period="daily", # 日线
start_date="20240101",
end_date="20240630",
adjust="qfq" # 前复权
)
美股数据
# 美股日线数据 df = ak.stock_us_daily(symbol="AAPL", adjust="qfq") # 美股实时行情 df = ak.stock_us_spot_em()
指数数据
# A股指数历史数据 (e.g., Shanghai Composite Index 000001) df = ak.stock_zh_index_daily_em(symbol="sh000001") # 指数成分股 (e.g., CSI 300) df = ak.index_stock_cons_csindex(symbol="000300")
基金数据
# ETF实时行情
df = ak.fund_etf_spot_em()
# ETF历史K线数据
df = ak.fund_etf_hist_em(
symbol="510300", # 沪深300ETF
period="daily",
start_date="20240101",
end_date="20240630",
adjust="qfq"
)
# 开放式基金每日净值
df = ak.fund_open_fund_daily_em(symbol="000001")
# 基金评级
df = ak.fund_rating_all()
期货数据
# 期货日线数据(按交易所汇总) from akshare import get_futures_daily df = get_futures_daily(start_date="20240101", end_date="20240102", market="CFFEX") # 交易所选项: "CFFEX"(中金所), "SHFE"(上期所), "DCE"(大商所), "CZCE"(郑商所), "INE"(上海国际能源交易中心), "GFEX"(广期所) # 期货实时行情 df = ak.futures_zh_spot() # 期货库存数据 df = ak.futures_inventory_99(symbol="豆一")
期权数据
# 交易所期权历史数据 df = ak.option_hist_dce(symbol="豆粕期权") # 上证50ETF期权 df = ak.option_sse_spot_price(symbol="510050")
债券数据
# 可转债列表 df = ak.bond_zh_cov() # 可转债历史K线数据 df = ak.bond_zh_hs_cov_daily(symbol="sz123456") # 中国债券现货报价 df = ak.bond_spot_quote()
外汇数据
# 外汇实时行情(东方财富) df = ak.forex_spot_em() # 外汇即期报价(中国外汇交易中心) df = ak.fx_spot_quote() # 外汇掉期报价 df = ak.fx_swap_quote()
宏观经济数据
# 中国CPI年度数据 df = ak.macro_china_cpi_yearly() # 中国GDP年度数据 df = ak.macro_china_gdp_yearly() # 中国PMI数据 df = ak.macro_china_pmi() # 美国非农就业数据 df = ak.macro_usa_non_farm() # 美国CPI月度数据 df = ak.macro_usa_cpi_monthly()
新闻与舆情
# 个股财经新闻(东方财富) df = ak.stock_news_em(symbol="000001") # 央视新闻 df = ak.news_cctv(date="20240101")
完整示例:下载数据并绘制K线图
import akshare as ak
import pandas as pd
import mplfinance as mpf # pip install mplfinance
# 获取贵州茅台前复权日K线数据
df = ak.stock_zh_a_hist(
symbol="600519",
period="daily",
start_date="20240101",
end_date="20240630",
adjust="qfq"
)
# 设置日期索引并重命名列为英文(mplfinance要求)
df.index = pd.to_datetime(df["日期"]) # 设置日期为索引
df.rename(columns={
"开盘": "Open", # 开盘价
"收盘": "Close", # 收盘价
"最高": "High", # 最高价
"最低": "Low", # 最低价
"成交量": "Volume" # 成交量
}, inplace=True)
# 绘制K线图(含5/10/20日均线和成交量)
mpf.plot(df, type="candle", mav=(5, 10, 20), volume=True)
使用技巧
- 无需API Key或注册 — 开箱即用。
- 所有函数返回 pandas DataFrame — 可直接用于分析、导出和可视化。
- A股数据列名为中文;美股/港股数据列名为英文。
- 使用
--upgrade保持akshare最新版 — 由于上游数据源变化,接口更新频繁。 - 非Python用户可使用 AKTools HTTP API封装。
- 数据仅供学术研究使用 — 不构成投资建议。
- 完整API参考:https://akshare.akfamily.xyz/data/index.html
进阶示例
批量下载多只股票
import akshare as ak
import pandas as pd
# 定义要下载的股票列表
stock_list = ["000001", "600519", "300750", "601318", "000858"]
all_data = {}
for symbol in stock_list:
# 下载每只股票的前复权日K线数据
df = ak.stock_zh_a_hist(
symbol=symbol,
period="daily",
start_date="20240101",
end_date="20240630",
adjust="qfq"
)
df["股票代码"] = symbol # 添加股票代码列,便于后续合并
all_data[symbol] = df
print(f"已下载 {symbol},共 {len(df)} 条记录")
# 合并所有股票数据为一个大的DataFrame
combined = pd.concat(all_data.values(), ignore_index=True)
combined.to_csv("multi_stock_data.csv", index=False)
print(f"合并总计: {len(combined)} 条记录")
计算技术指标(均线、MACD、RSI)
import akshare as ak
import pandas as pd
import numpy as np
# 获取贵州茅台前复权日K线数据
df = ak.stock_zh_a_hist(symbol="600519", period="daily",
start_date="20240101", end_date="20241231", adjust="qfq")
# 将收盘价转换为浮点数 (收盘 = close price)
df["收盘"] = df["收盘"].astype(float)
# 计算均线
df["MA5"] = df["收盘"].rolling(window=5).mean() # 5日均线
df["MA10"] = df["收盘"].rolling(window=10).mean() # 10日均线
df["MA20"] = df["收盘"].rolling(window=20).mean() # 20日均线
df["MA60"] = df["收盘"].rolling(window=60).mean() # 60日均线
# 计算MACD指标
ema12 = df["收盘"].ewm(span=12, adjust=False).mean() # 12日指数移动平均
ema26 = df["收盘"].ewm(span=26, adjust=False).mean() # 26日指数移动平均
df["DIF"] = ema12 - ema26 # 快线(DIF)
df["DEA"] = df["DIF"].ewm(span=9, adjust=False).mean() # 慢线(DEA)
df["MACD"] = 2 * (df["DIF"] - df["DEA"]) # MACD柱
# 计算RSI指标(14日)
delta = df["收盘"].diff()
gain = delta.where(delta > 0, 0) # 上涨幅度
loss = -delta.where(delta < 0, 0) # 下跌幅度
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值
# 计算布林带(20日)
df["BOLL_MID"] = df["收盘"].rolling(window=20).mean() # 中轨
df["BOLL_UP"] = df["BOLL_MID"] + 2 * df["收盘"].rolling(window=20).std() # 上轨
df["BOLL_DN"] = df["BOLL_MID"] - 2 * df["收盘"].rolling(window=20).std() # 下轨
# 展示:日期、收盘价及各技术指标
print(df[["日期", "收盘", "MA5", "MA20", "DIF", "DEA", "MACD", "RSI14"]].tail(10))
筛选涨停股
import akshare as ak
# 获取全部A股实时行情
df = ak.stock_zh_a_spot_em()
# 筛选涨幅>9.5%的股票(接近涨停)
df["涨跌幅"] = df["涨跌幅"].astype(float) # 涨跌幅 = change percentage
limit_up = df[df["涨跌幅"] >= 9.5].sort_values("涨跌幅", ascending=False)
print(f"今日涨停/接近涨停股票: 共 {len(limit_up)} 只")
# 展示:代码、名称、最新价、涨跌幅、成交额、换手率
print(limit_up[["代码", "名称", "最新价", "涨跌幅", "成交额", "换手率"]].head(20))
获取龙虎榜数据
import akshare as ak # 获取龙虎榜详细数据 df = ak.stock_lhb_detail_em(start_date="20240101", end_date="20240131") print(df.head()) # 获取龙虎榜营业部排名 df_dept = ak.stock_lhb_hyyyb_em(start_date="20240101", end_date="20240131") print(df_dept.head())
获取融资融券数据
import akshare as ak # 获取沪深融资融券汇总数据 df = ak.stock_margin_sse(start_date="20240101", end_date="20240630") print(df.head()) # 获取个股融资融券明细 df_detail = ak.stock_margin_detail_sse(date="20240102") print(df_detail.head())
获取北向资金(陆港通)数据
import akshare as ak # 获取北向资金历史数据 df = ak.stock_hsgt_hist_em(symbol="北向资金") # 北向资金 = Northbound capital print(df.tail(10)) # 获取北向资金持股明细 df_hold = ak.stock_hsgt_hold_stock_em(market="北向", indicator="今日排行") # 北向 = Northbound, 今日排行 = Today's ranking print(df_hold.head(20))
获取股东数据
import akshare as ak # 获取前十大股东 df = ak.stock_gdfx_top_10_em(symbol="600519", date="20231231") print(df) # 获取前十大流通股东 df_float = ak.stock_gdfx_free_top_10_em(symbol="600519", date="20231231") print(df_float)
获取板块行情数据
import akshare as ak # 获取行业板块行情 df_industry = ak.stock_board_industry_name_em() print(df_industry.head(20)) # 获取概念板块行情 df_concept = ak.stock_board_concept_name_em() print(df_concept.head(20)) # 获取特定板块成分股 df_stocks = ak.stock_board_industry_cons_em(symbol="银行") # 银行 = Banking print(df_stocks)
获取限售解禁数据
import akshare as ak # 获取限售解禁数据 df = ak.stock_restricted_release_queue_em(symbol="全部A股") # 全部A股 = All A-shares print(df.head(20))
获取市场资金流向
import akshare as ak # 获取大盘资金流向 df = ak.stock_market_fund_flow() print(df.tail(10)) # 获取个股资金流向 df_stock = ak.stock_individual_fund_flow(stock="000001", market="sz") print(df_stock.tail(10))
完整示例:多因子选股
import akshare as ak
import pandas as pd
# 步骤1:获取全部A股实时行情
df = ak.stock_zh_a_spot_em()
# 步骤2:转换数据类型
for col in ["市盈率-动态", "市净率", "换手率", "涨跌幅", "成交额"]:
df[col] = pd.to_numeric(df[col], errors="coerce")
# 步骤3:多因子筛选
# 条件1:PE 在5-30之间(排除亏损和高估值)
# 条件2:PB 在0.5-5之间
# 条件3:换手率 > 1%(合理流动性)
# 条件4:涨跌幅在-3%到3%之间(排除异常波动)
filtered = df[
(df["市盈率-动态"] > 5) & (df["市盈率-动态"] < 30) &
(df["市净率"] > 0.5) & (df["市净率"] < 5) &
(df["换手率"] > 1) &
(df["涨跌幅"] > -3) & (df["涨跌幅"] < 3)
].copy()
# 步骤4:按PE排序,选取最低PE的前20只股票
result = filtered.sort_values("市盈率-动态").head(20)
print(f"筛选出 {len(result)} 只股票:")
print(result[["代码", "名称", "最新价", "市盈率-动态", "市净率", "换手率", "涨跌幅"]])
🤖 AI Agent 高阶使用指南
对于 AI Agent,在使用 AKShare 时应遵循以下高阶策略和最佳实践,以确保数据的准确性和任务的高效完成:
1. 数据校验与错误处理
在获取数据后,AI 应当主动检查数据格式是否符合预期,以及是否存在缺失值(NaN)。
import akshare as ak
import pandas as pd
def safe_get_stock_data(symbol="600519"):
try:
df = ak.stock_zh_a_hist(symbol=symbol, period="daily", start_date="20230101", adjust="qfq")
if df.empty:
return "获取的数据为空,请检查股票代码或日期范围。"
# 填充或丢弃缺失值
df = df.dropna()
return df.head()
except Exception as e:
return f"获取数据时发生错误: {str(e)}"
print(safe_get_stock_data())
2. 跨市场数据聚合分析
AI 经常需要进行宏观经济分析或跨市场对比。以下演示如何组合多接口数据进行分析:
import akshare as ak
import pandas as pd
# 1. 获取 A股 指数数据(上证指数)
df_sh = ak.stock_zh_index_daily_em(symbol="sh000001")
df_sh = df_sh[['date', 'close']].rename(columns={'close': 'SH_Close', 'date': 'Date'})
# 2. 获取 美股 指数数据(标普500)
df_spx = ak.index_us_stock_sina(symbol=".INX")
df_spx = df_spx[['date', 'close']].rename(columns={'close': 'SPX_Close', 'date': 'Date'})
# 3. 合并数据进行趋势对比
df_merged = pd.merge(df_sh, df_spx, on='Date', how='inner')
print("中美股市指数对比:")
print(df_merged.tail())
3. 构建动态监控指标
AI 可以定期调用以下代码来获取实时的异动信息(如涨跌停板),从而做出及时的策略响应:
import akshare as ak
# 获取当日涨停板数据
df_limit_up = ak.stock_zt_pool_em(date="20231010") # 可替换为当日日期,如 "20240101"
if not df_limit_up.empty:
print(f"发现 {len(df_limit_up)} 只涨停股票!")
# 筛选连板数大于等于3的强势股
strong_stocks = df_limit_up[df_limit_up['连板数'] >= 3]
print("强势连板股:")
print(strong_stocks[['代码', '名称', '最新价', '连板数']])
else:
print("未获取到涨停板数据,可能是非交易日。")
社区与支持
由 大佬量化 维护 — 量化交易教学与策略研发团队。
微信客服: bossquant1 · Bilibili · 搜索 大佬量化 — 微信公众号 / Bilibili / 抖音
热门AI工具
相关专题
Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。
0
2026.10.28
Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。
0
2026.10.28
Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。
0
2026.10.28
本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。
0
2026.10.22
本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。
0
2026.10.22
本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。
0
2026.10.22
本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。
0
2026.10.22
本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。
0
2026.10.22
本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。
0
2026.10.22
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.6万人学习
共6课时 | 54.7万人学习
最新文章