AKShare(开源金融数据API库)
AKShare 是一个全面的免费Python金融数据API库,覆盖A股、港股、美股、期货、期权、基金、债券、外汇和宏观经济数据。无需注册或API Key,所有函数返回 pandas.DataFrame。
安装
bashpip install akshare --upgrade
需要 Python 3.9+(64位)。
基本用法
pythonimport 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股
pythonimport akshare as ak # 获取全部A股实时行情 df = ak.stock_zh_a_spot_em() # 返回字段: 序号、代码、名称、最新价、涨跌幅、涨跌额、成交量、成交额、振幅、最高、最低、今开、昨收、量比、换手率、市盈率、市净率 ...
历史K线数据
python# 获取指定股票历史日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线数据
python# 获取分钟级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="" # 复权类型 )
个股基本信息
python# 获取个股基本信息 df = ak.stock_individual_info_em(symbol="000001") # 返回字段: 总市值、流通市值、行业、上市时间、股票代码、股票简称、总股本、流通股 ...
港股数据
python# 港股实时行情 df = ak.stock_hk_spot_em() # 港股历史K线数据 df = ak.stock_hk_hist( symbol="00700", # 腾讯控股 period="daily", # 日线 start_date="20240101", end_date="20240630", adjust="qfq" # 前复权 )
美股数据
python# 美股日线数据 df = ak.stock_us_daily(symbol="AAPL", adjust="qfq") # 美股实时行情 df = ak.stock_us_spot_em()
指数数据
python# 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")
基金数据
python# 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()
期货数据
python# 期货日线数据(按交易所汇总) 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="豆一")
期权数据
python# 交易所期权历史数据 df = ak.option_hist_dce(symbol="豆粕期权") # 上证50ETF期权 df = ak.option_sse_spot_price(symbol="510050")
债券数据
python# 可转债列表 df = ak.bond_zh_cov() # 可转债历史K线数据 df = ak.bond_zh_hs_cov_daily(symbol="sz123456") # 中国债券现货报价 df = ak.bond_spot_quote()
外汇数据
python# 外汇实时行情(东方财富) df = ak.forex_spot_em() # 外汇即期报价(中国外汇交易中心) df = ak.fx_spot_quote() # 外汇掉期报价 df = ak.fx_swap_quote()
宏观经济数据
python# 中国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()
新闻与舆情
python# 个股财经新闻(东方财富) df = ak.stock_news_em(symbol="000001") # 央视新闻 df = ak.news_cctv(date="20240101")
完整示例:下载数据并绘制K线图
pythonimport 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
进阶示例
批量下载多只股票
pythonimport 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)
pythonimport 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))
筛选涨停股
pythonimport 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))
获取龙虎榜数据
pythonimport 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())
获取融资融券数据
pythonimport 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())
获取北向资金(陆港通)数据
pythonimport 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))
获取股东数据
pythonimport 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)
获取板块行情数据
pythonimport 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)
获取限售解禁数据
pythonimport akshare as ak # 获取限售解禁数据 df = ak.stock_restricted_release_queue_em(symbol="全部A股") # 全部A股 = All A-shares print(df.head(20))
获取市场资金流向
pythonimport 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))
完整示例:多因子选股
pythonimport 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)。
pythonimport 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 经常需要进行宏观经济分析或跨市场对比。以下演示如何组合多接口数据进行分析:
pythonimport 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 可以定期调用以下代码来获取实时的异动信息(如涨跌停板),从而做出及时的策略响应:
pythonimport 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 / 抖音


