| name | akshare-tools |
| description | 利用 AkShare 获取A股/港股/美股/基金/期货/宏观数据。结合 Wind Python API 做实时行情补充。用于:股票筛选、财务分析、量化选股、板块分类、估值对比等场景。触发:用户要求获取A股数据、财务指标、板块成分,或要求量化筛选。 |
| author | sunchenzheng |
| tags | ["akshare","finance","stock","china-a-share","financial-data","screening"] |
AKShare 金融数据工具包
官方文档:https://akshare.akfamily.xyz/
安装:pip install akshare
版本:1.18.54(2026-04 测试可用)
核心数据接口(已验证可用)
1. stock_financial_abstract — 利润表/ROE/净利率(宽格式)
用途:获取净利润、营收、ROE、净利润率等指标(2024/2023/2022 年报)
注意:数据格式为宽格式(列为日期,行指标),需要按行匹配指标名
import akshare as ak
import pandas as pd
def yuan_to_yi(v):
"""元->亿元(阈值1亿);万元->亿元(阈值<1亿)"""
if v is None: return None
try:
if isinstance(v, str):
v = v.replace(',', '')
if '亿' in v: return float(v.replace('亿', ''))
if '万' in v: return round(float(v.replace('万', '')) / 1e4, 2)
return float(v)
vf = float(v)
if abs(vf) > 1e8:
return round(vf / 1e8, 2)
else:
return round(vf / 1e4, 2)
except: return None
ab = ak.stock_financial_abstract(symbol='000001')
cols = list(ab.columns)
c24 = next((c for c in cols if str(c) == '20241231'), None)
c23 = next((c for c in cols if str(c) == '20231231'), None)
for _, row in ab.iterrows():
if len(row) < 2: continue
name = str(row.iloc[1]).strip()
v24 = yuan_to_yi(row.get(c24)) if c24 else None
v23 = yuan_to_yi(row.get(c23)) if c23 else None
if name == '归属净利润':
profit_2024 = v24
profit_2023 = v23
elif name == '营业总收入':
revenue_2024 = v24
revenue_2023 = v23
elif '净资产收益率' in name:
roe_2024 = row.get(c24)
elif '销售净利率' in name:
npm_2024 = row.get(c24)
关键指标对应关系:
| 指标名(AkShare) | 说明 |
|---|
归属净利润 | 归母净利润(最准确) |
净利润 | 兜底用,可能重复 |
营业总收入 | 营收(优先) |
营业收入 | 营收(兜底) |
净资产收益率 | ROE(百分比,如 15.3 表示 15.3%) |
销售净利率 | 净利润率(百分比) |
2. stock_financial_cash_new_ths — 经营现金流(长格式)
用途:获取经营活动现金流量净额
重要:返回数据是长格式(metric_name / value),不是宽格式!
cash = ak.stock_financial_cash_new_ths(symbol='300124')
df24 = cash[cash['report_date'] == '2024-12-31']
df23 = cash[cash['report_date'] == '2023-12-31']
if len(df24) > 0:
ocf_row = df24[df24['metric_name'] == 'indirect_act_cash_flow_net']
if len(ocf_row) > 0:
val = ocf_row.iloc[0]['value']
ocf_2024 = yuan_to_yi(val)
常见 metric_name 值:
| metric_name | 说明 |
|---|
indirect_act_cash_flow_net | 间接法经营现金流净额 ✅ |
act_cash_flow_net | 现金净增加额 |
cash_net_profit | 现金净收益 |
注意:部分股票(如浪潮信息)的间接法数据可能与直接法差距较大,需交叉验证。
3. 与 Wind API 配合使用
AkShare 财务数据权威,Wind API 实时行情准确。两者配合:
import sys
sys.path.insert(0, r'C:\Wind\Wind.NET.Client\WindNET\x64')
import WindPy as w
w.w.start()
r = w.w.wss('600519.SH,000001.SZ', 'sec_name,close,pe_ttm,pb_lf,ps_ttm',
'tradeDate=20260410')
if r.ErrorCode == 0:
for j, code in enumerate(r.Codes):
pe = r.Data[2][j]
pb = r.Data[3][j]
price = r.Data[1][j]
Wind tradeDate 参数:不加则返回最近可用日期,非当日数据。
常用选股接口
实时行情(全市场)
df = ak.stock_zh_a_spot_em()
df = ak.stock_zh_a_hist(symbol='000001', period='daily',
start_date='20230101', end_date='20231231', adjust='qfq')
财务筛选
df = ak.stock_financial_indicator_dfcf(symbol='000001',
start_date='20230101', end_date='20241231')
df = ak.stock_history_dividend_detail(symbol='000001', indicator='分红', date='')
df = ak.stock_shareholder_change_ths(symbol='000001')
宏观数据
df = ak.macro_china_cpi()
df = ak.macro_china_ppi()
完整筛选流程示例
参见脚本:scripts/quant_final_v4.py
STOCKS = {
"688981.SH": "中芯国际",
"688256.SH": "寒武纪",
"300124.SZ": "汇川技术",
}
c1 = df["净利润亿"] > 0
c2 = df["经营现金流亿"] > 0
c3 = (df["PE_TTM"] > 0) & (df["PE_TTM"] < 50)
c4 = (df["PB_LF"] > 0) & (df["PB_LF"] < 6)
已知限制
| 问题 | 说明 | 解决方案 |
|---|
| 非经常性损益 | 无直接接口 | Wind 终端 F9 财务附表 |
| 资产减值损失 | 无直接接口 | Wind 终端 F9 财务附表 |
| 国资背景 | 无直接接口 | Wind 终端 F9 股东页 |
| 间接法现金流异常 | 部分股票数据不准确 | 交叉验证直接法数据 |
| 数据延迟 | 年报通常滞后 3-4 个月 | Q3/半年报替代 |
安装
pip install akshare
pip install --upgrade akshare