AKShare被限IP、Tushare要积分?这才是最适合量化用的数据接口

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,我们可以高效、稳定地获取股票列表、历史价格、估值和财务数据,为量化分析提供坚实的数据基础。聪明的你一定会发现,这个平台在数据获取方面的优势明显,值得深入探索。不过有一个小缺点就是调用的时候需要打开掘金量化的客户端。

如果你对某个具体的策略实现感兴趣,或者在使用过程中遇到问题,欢迎留言讨论。我们一起进步,一起发财!💰

相关推荐
小奏技术7 分钟前
基于 Spring AI 和 MCP:用自然语言查询 RocketMQ 消息
后端·aigc·mcp
编程轨迹16 分钟前
面试官:如何在 Java 中读取和解析 JSON 文件
后端
Mikhail_G19 分钟前
Python应用函数调用(二)
大数据·运维·开发语言·python·数据分析
lanfufu20 分钟前
记一次诡异的线上异常赋值排查:代码没错,结果不对
java·jvm·后端
编程轨迹25 分钟前
如何在 Java 中实现 PDF 与 TIFF 格式互转
后端
编程轨迹26 分钟前
面试官:你知道如何在 Java 中创建对话框吗
后端
编程轨迹37 分钟前
深入理解 Java 中的信号机制
后端
weixin_4723394639 分钟前
使用Python提取PDF元数据的完整指南
java·python·pdf
夕颜11141 分钟前
让 cursor 教我用 cursor 的隐藏技能
后端·trae
橘子青衫1 小时前
Java并发编程利器:CyclicBarrier与CountDownLatch解析
java·后端·性能优化