AKShare被限IP、Tushare要积分?这才是最适合量化用的数据接口
大家好我是花姐,今天咱们聊点实在的:如何用 Python 高效获取股票列表、历史价格、估值和财务数据。之前我推荐过 AKShare 和 Tushare,但 AKShare 频繁访问容易被限 IP,Tushare 又需要积分获取行情数据。后来查了好多资料,终于让我发现了一个超级棒的方法,速度贼快,关键是免费!🎉

他就是掘金量化平台API
一、为什么选择掘金量化?
你可能在想,掘金量化到底有啥优势?简单说:
- 速度快:数据响应迅速,几乎没有延迟。
- 免费:大部分基础数据无需积分、无需充值。
- 稳定性高:接口稳定,适合长期使用。
我本人对数据获取的速度和稳定性要求很高,掘金量化在这方面表现不错。💡
二、环境配置
首先,确保你已经注册了掘金量化账号,并获取了 API Token。然后,安装官方提供的 SDK:
bash
pip install gm -i https://mirrors.aliyun.com/pypi/simple/ -U
小提示: 安装的时候最好用python虚拟环境,支持python3.6 以上的版本
安装完成后,导入并初始化:
python
from gm.api import *
set_token('这里填写你的token')
聪明的你一定会发现,这个初始化过程非常简洁明了。
三、获取股票列表
获取股票列表是量化分析的第一步。使用掘金量化的 get_instruments
方法,可以轻松获取当前所有上市股票的信息:
python
data = get_instruments(
exchanges='SZSE,SHSE', #交易所代码
sec_types=1, #标的类型
df=True) #是否返回Dataframe格式数据

小提示:
- exchanges:交易所代码,SHSE:上海证券交易所,SZSE:深圳证券交易所 , CFFEX:中金所,SHFE:上期所,DCE:大商所, CZCE:郑商所, INE:上海国际能源交易中心 ,GFEX:广期所
- sec_types 标的类型, 1: 股票, 2: 基金, 3: 指数, 4: 期货, 5: 期权, 8:可转债, 10: 期货连续合约,只能输入单个品种
可以通过print(data.columns)
查看有哪些列
text
Index(['symbol', 'sec_level', 'multiplier', 'margin_ratio', 'pre_close',
'upper_limit', 'lower_limit', 'adj_factor', 'is_suspended',
'settle_price', 'position', 'pre_settle', 'strike_price',
'conversion_price', 'redemption_record_date', 'sec_type', 'exchange',
'sec_id', 'sec_name', 'sec_abbr', 'price_tick', 'listed_date',
'delisted_date', 'trade_n', 'board', 'quote_unit',
'option_margin_ratio1', 'option_margin_ratio2', 'sec_type_ext',
'option_type', 'call_or_put', 'underlying_symbol', 'exercise_price',
'conversion_start_date', 'trade_date', 'is_adjusted'],
dtype='object')
通过data[['symbol','sec_name']]
就可以获取我们需要的股票代码和股票名称了
四、获取历史价格数据
历史价格数据是策略回测的基础。使用 history
方法,可以获取指定股票的历史行情数据:
python
for _,row in data.iterrows():
symbol = row.symbol
df_hq = history(symbol=symbol,
frequency='1d',
start_time='2025-01-01 09:00:00',
end_time='2025-06-01 16:00:00',
adjust=ADJUST_PREV,
adjust_end_time='2025-06-01',
df=True)
df_hq.to_csv(symbol+".csv",index=False)
- symbol:标的代码, 如有多个代码, 中间用 , (英文逗号) 隔开, 也支持 ['symbol1', 'symbol2'] 这种列表格式
- frequency:频率, 支持 'tick', '1d', '60s' 等, 默认 '1d'
- start_time :开始时间 (%Y-%m-%d %H:%M:%S 格式), 也支持 datetime.datetime 格式
- end_time:结束时间 (%Y-%m-%d %H:%M:%S 格式), 也支持 datetime.datetime 格式
- adjust:ADJUST_NONE or 0: 不复权, ADJUST_PREV or 1: 前复权, ADJUST_POST or 2: 后复权 默认不复权
- adjust_end_time :复权基点时间, 默认当前时间
- df: 是否返回 dataframe 格式, 默认 False, 返回 list[dict]
如果大家在做策略研究的时候最好把行情数据下载到本地,这样读取速度快,不占带宽。
五、获取估值数据
估值数据对于选股和策略优化至关重要。使用 stk_get_daily_valuation_pt
方法,可以获取市盈率、市净率等估值指标:
python
data = stk_get_daily_valuation_pt(
symbols=['SZSE.000001', 'SHSE.600000'],
fields='pe_ttm,pe_lyr,pe_mrq',
trade_date=None,
df=True)
print(data)
text
symbol trade_date pe_lyr pe_mrq pe_ttm
0 SHSE.600000 2025-05-30 7.9968 5.1414 7.9657
1 SZSE.000001 2025-05-30 5.0403 3.9787 5.1368
如果你需要其它估值指标可以参考下表
字段名 | 类型 | 中文名称 | 单位 |
---|---|---|---|
pe_ttm | float | 市盈率(TTM) | 倍 |
pe_lyr | float | 市盈率(最新年报LYR) | 倍 |
pe_mrq | float | 市盈率(最新报告期MRQ) | 倍 |
pe_1q | float | 市盈率(当年一季×4) | 倍 |
pe_2q | float | 市盈率(当年中报×2) | 倍 |
pe_3q | float | 市盈率(当年三季×4/3) | 倍 |
pe_ttm_cut | float | 市盈率(TTM) 扣除非经常性损益 | 倍 |
pe_lyr_cut | float | 市盈率(最新年报LYR) 扣除非经常性损益 | 倍 |
pe_mrq_cut | float | 市盈率(最新报告期MRQ) 扣除非经常性损益 | 倍 |
pe_1q_cut | float | 市盈率(当年一季×4) 扣除非经常性损益 | 倍 |
pe_2q_cut | float | 市盈率(当年中报×2) 扣除非经常性损益 | 倍 |
pe_3q_cut | float | 市盈率(当年三季×4/3) 扣除非经常性损益 | 倍 |
pb_lyr | float | 市净率(最新年报LYR) | 倍 |
pb_mrq | float | 市净率(最新报告期MRQ) | 倍 |
pb_lyr_1 | float | 市净率(剔除其他权益工具,LYR) | 倍 |
pb_mrq_1 | float | 市净率(剔除其他权益工具,MRQ) | 倍 |
pcf_ttm_oper | float | 市现率(经营现金流,TTM) | 倍 |
pcf_ttm_ncf | float | 市现率(现金净流量,TTM) | 倍 |
pcf_lyr_oper | float | 市现率(经营现金流,最新年报LYR) | 倍 |
pcf_lyr_ncf | float | 市现率(现金净流量,最新年报LYR) | 倍 |
ps_ttm | float | 市销率(TTM) | 倍 |
ps_lyr | float | 市销率(最新年报LYR) | 倍 |
ps_mrq | float | 市销率(最新报告期MRQ) | 倍 |
ps_1q | float | 市销率(当年一季×4) | 倍 |
ps_2q | float | 市销率(当年中报×2) | 倍 |
ps_3q | float | 市销率(当年三季×4/3) | 倍 |
peg_lyr | float | 历史PEG值(当年年报增长率) | |
peg_mrq | float | 历史PEG值(最新报告期增长率) | |
peg_1q | float | 历史PEG值(当年1季×4较上年增长率) | |
peg_2q | float | 历史PEG值(当年中报×2较上年增长率) | |
peg_3q | float | 历史PEG值(当年3季×4/3较上年增长率) | |
peg_np_cgr | float | 历史PEG值(PE_TTM较净利润3年复合增长率) | |
peg_npp_cgr | float | 历史PEG值(PE_TTM较净利润3年复合增长率) | |
dy_ttm | float | 股息率(TTM) | % |
dy_lfy | float | 股息率(上一财年LFY) | % |
六、获取财务数据
财务数据是量化分析的重要依据。使用 stk_get_finance_prime
方法,可以获取利润表、资产负债表、现金流量表等数据:
python
data = stk_get_finance_prime(
symbol='SZSE.000001',
fields='eps_basic,eps_dil',
rpt_type=None,
data_type=None,
start_date=None,
end_date=None,
df=True)
print(data)
text
symbol pub_date rpt_date rpt_type data_type eps_dil eps_basic
0 SZSE.000001 2025-04-19 2025-03-31 1 100 0.62 0.62
有一个需要强调下,symbol
只支持单个股票
- rpt_type:按报告期查询可指定以下报表类型:
- 1-一季度报
- 6-中报
- 9-前三季报
- 12-年报
- 默认None为不限
fields字段的值可以参考下表
字段名 | 类型 | 中文名称 | 单位 |
---|---|---|---|
eps_basic | float | 基本每股收益 | 元 |
eps_dil | float | 稀释每股收益 | 元 |
eps_basic_cut | float | 扣除非经常性损益后的基本每股收益 | 元 |
eps_dil_cut | float | 扣除非经常性损益后的稀释每股收益 | 元 |
net_cf_oper_ps | float | 每股经营活动产生的现金流量净额 | 元 |
bps_pcom_ps | float | 归属于母公司股东的每股净资产 | 元 |
ttl_ast | float | 总资产 | 元 |
ttl_liab | float | 总负债 | 元 |
share_cptl | float | 股本 | 股 |
ttl_inc_oper | float | 营业总收入 | 元 |
inc_oper | float | 营业收入 | 元 |
oper_prof | float | 营业利润 | 元 |
ttl_prof | float | 利润总额 | 元 |
ttl_eqy_pcom | float | 归属于母公司股东的所有者权益 | 元 |
net_prof_pcom | float | 归属于母公司股东的净利润 | 元 |
net_prof_pcom_cut | float | 扣除非经常性损益后归属于母公司股东的净利润 | 元 |
roe | float | 全面摊薄净资产收益率 | % |
roe_weight_avg | float | 加权平均净资产收益率 | % |
roe_cut | float | 扣除非经常性损益后的全面摊薄净资产收益率 | % |
roe_weight_avg_cut | float | 扣除非经常性损益后的加权平均净资产收益率 | % |
net_cf_oper | float | 经营活动产生的现金流量净额 | 元 |
eps_yoy | float | 每股收益同比比例 | % |
inc_oper_yoy | float | 营业收入同比比例 | % |
ttl_inc_oper_yoy | float | 营业总收入同比比例 | % |
net_prof_pcom_yoy | float | 归母净利润同比比例 | % |
bps_sh | float | 归属于普通股东的每股净资产 | 元 |
net_asset | float | 归属于普通股东的净资产 | 元 |
net_prof | float | 归属于普通股东的净利润 | 元 |
net_prof_cut | float | 扣除非经常性损益后归属于普通股东的净利润 | 元 |
七、总结
通过掘金量化平台的 API,我们可以高效、稳定地获取股票列表、历史价格、估值和财务数据,为量化分析提供坚实的数据基础。聪明的你一定会发现,这个平台在数据获取方面的优势明显,值得深入探索。不过有一个小缺点就是调用的时候需要打开掘金量化的客户端。
如果你对某个具体的策略实现感兴趣,或者在使用过程中遇到问题,欢迎留言讨论。我们一起进步,一起发财!💰