股票、基金、债券、期货数据一次拿齐:efinance 金融数据获取实战指南
2026/8/18 15:01:28 网站建设 项目流程

股票、基金、债券、期货数据一次拿齐:efinance 金融数据获取实战指南

【免费下载链接】efinanceefinance 是一个可以快速获取基金、股票、债券、期货数据的 Python 库,回测以及量化交易的好帮手!🚀🚀🚀项目地址: https://gitcode.com/gh_mirrors/ef/efinance

efinance 是一个免费开源的 Python 金融数据获取库,帮你在股票、基金、债券、期货四个市场之间,用同一套代码习惯拿数据,所有结果统一以 pandas DataFrame 返回。这篇文章会带你从一个普通投资者的视角出发,从安装开始,一步步把"看行情、查持仓、筛可转债"这些真实需求跑起来,读完你就能搭出自己的数据小工具。

数据不该是拦路虎:为什么你需要一个轻量数据源

先描述一个你可能很熟悉的场景:周五晚上想复盘一周的持仓,你打开股票软件看 A 股,切到基金网站查净值,再去期货论坛翻行情,最后对着可转债表格手动算涨幅……四个网站、四套界面、四种导出格式,等你把数据拼到一张表里,一个小时已经过去了。

这正是 efinance 想解决的问题。它把"从东方财富网取数据"这件事封装成几个简短函数,你不需要注册任何账号、申请任何 API 密钥,pip装完就能用。返回的数据统一是 DataFrame,列名规范、可直接参与 pandas 计算,配合画图、筛选、排序都很顺手。

各模块的常用入口,先记个印象即可:

模块常用函数典型用途
ef.stockget_quote_history / get_latest_quote / get_daily_billboard历史K线、自选股快照、龙虎榜
ef.fundget_quote_history / get_invest_position / get_base_info净值走势、持仓透视、基金资料
ef.bondget_realtime_quotes / get_quote_history可转债全市场行情、个券K线
ef.futuresget_futures_base_info / get_quote_history合约清单、主力合约历史行情

💡 数据的价值不在于"有没有",而在于"能不能随手拿到"。efinance 把这道门槛挪开了。

第一关:从基金净值开始的第一份数据

安装只有一条命令,环境干净的话几分钟内就能完成:

pip install efinance

以后想升级就加个参数:pip install efinance --upgrade。如果你偏好容器化运行,项目还提供了 Dockerfile,细节可以看 docs/install.md。

装好后,我们拿一只最常见的指数基金练手。这段代码做的事情很简单:拉取某只白酒指数基金的历史净值,看看它最近的表现和均线:

import efinance as ef # 招商中证白酒指数(LOF)A,代码 161725 net = ef.fund.get_quote_history('161725') # 返回的是 DataFrame:日期、单位净值、累计净值、涨跌幅 print(net.tail()) print('近一年净值涨幅:', (net['单位净值'].iloc[-1] / net['单位净值'].iloc[-252] - 1) * 100, '%')

两处值得留意:一是所有接口都返回 DataFrame,不用自己去解析网页,拿到就能直接算;二是get_quote_history对股票、债券、期货同样适用,只是参数略多。常用的两个参数是klt(周期)和fqt(复权):klt=101是日线,换成 102、103 就是周线和月线,做日内分析则传 1、5、15、30、60 这类分钟数;做技术指标前记得把fqt的复权方式选好,避免除权跳空干扰计算。

💡 第一份数据到手,你就已经越过了新手村的门槛——剩下的事情都是往这个模板里加料。

第二关:把自选股清单变成实时行情快照

净值是"事后"数据,平时盯盘更想要"当下"的行情。假设你维护着一个自选股清单文件watchlist.txt,每行一个代码,下面这段代码会一次性把它们全部拉回来,并按当日涨跌幅排序:

import efinance as ef # 读取自选股清单,每行一个股票代码 with open('watchlist.txt', encoding='utf-8') as f: codes = [line.strip() for line in f if line.strip()] # 一次请求批量获取这些股票的最新报价 snapshot = ef.stock.get_latest_quote(codes) # 按涨跌幅排序,看看今天谁最活跃 hot = snapshot.sort_values('涨跌幅', ascending=False) print(hot[['股票名称', '最新价', '涨跌幅']].head(10))

get_latest_quote接收一个代码列表,正好对应"自选股"这个天然需求;返回后借助 pandas 的sort_values就能完成排序。类似的实时能力还有几个:get_realtime_quotes()直接返回整个沪深市场的实时行情(几千行,适合做全市场扫描);get_today_bill('300750')给出某只股票当日分钟级的主力资金净流入;get_daily_billboard()则能拉取龙虎榜,传入起止日期即可查看某个时间段的上榜记录。

💡 从"看单只"到"看一组",只差一个列表参数的距离,这就是批量的价值。

第三关:让可转债与期货也进入你的视野

盯完股票,不妨把目光投向另外两个市场。可转债是很多人的"低波动打新"选择,但全市场几百只券,靠肉眼翻太累。下面的代码用三行筛选出"涨得凶又换手活跃"的券:

import efinance as ef # 获取全市场可转债实时行情 bonds = ef.bond.get_realtime_quotes() # 筛选:涨幅超过 3% 且换手率超过 10% 的活跃券 active = bonds[(bonds['涨跌幅'] > 3) & (bonds['换手率'] > 10)] active = active.sort_values('换手率', ascending=False) print(active[['债券名称', '最新价', '涨跌幅', '换手率']])

逻辑和你手动筛选完全一致,只是把"翻网页"换成了 pandas 的布尔索引,改个阈值就能反复用。期货市场同理:ef.futures.get_futures_base_info()能列出交易所全部合约与行情ID,拿到 ID 后ef.futures.get_quote_history('115.ZCM')即可取得动力煤主力合约的日线;如果传一个 ID 列表,返回的会是一个以 ID 为键的字典,方便你同时对比多个品种。

基金这边还有一个很实用的视角——持仓透视。ef.fund.get_invest_position('161725')返回这只基金最新公开的前十大重仓股及占比,再配合ef.fund.get_base_info(['161725'])拿到基金规模、经理等资料,你就能回答"我买的基金到底买了什么"这个问题。

💡 四个市场共用同一套"取数 + DataFrame 处理"的心法,学会一个就等于学会四个。

第四关:绕开常见的坑,让脚本稳定运行

新手阶段最容易踩的坑,其实翻来覆去就那么几个,提前知道能省下不少排查时间。

坑一:批量请求返回的不是一张表,而是一个字典。股票、基金、债券的get_quote_history传单个代码返回 DataFrame,传列表则返回字典,需要按代码去取,比如result['600519']。写代码前先确认入参是字符串还是列表,返回值类型完全不同。

坑二:日期参数有自己的脾气。股票、债券、期货的get_quote_history支持begend限定区间,格式是'20240101'这种紧凑写法,带横线反而会报错。基金接口没有区间参数,只有数量上限pz,别混用。

坑三:全市场行情是一张几千行的大表。get_realtime_quotes()第一次跑出来会把你吓一跳,几千行数据直接print会刷屏。正确姿势是先筛选、排序,再取前几行输出,内存和眼睛都轻松。

坑四:接口偶尔闹脾气。密集请求时可能遇到限流或连接超时,这不是代码 bug,是数据源在"喘气"。解决办法很简单:循环里加个time.sleep(1)之类的小间隔,必要时做一次重试;要是长期大量使用,README 里也提到了可选的替代数据源 TickFlow,可以留意。

坑五:列名是中文。返回的列叫"涨跌幅""最新价"而不是 "change_pct""price",用英文列名取值会报 KeyError。习惯中文列名后反而省事——拿到表就能直接读懂每一列的含义。

💡 踩坑不可怕,可怕的是同一个坑踩两次。把上面五条记进你的"排雷清单",脚本会稳很多。

下一步:从今天开始动手

到这里,你已经走完了从安装到实战的完整闭环。接下来最有效的做法,是拿自己的真实需求练一遍:

  1. 执行pip install efinance,跑通上面任意一段代码;
  2. watchlist.txt换成你自己的自选股,体验批量快照;
  3. 打开四个市场的示例 Notebook(examples/stock.ipynb、examples/fund.ipynb、examples/bond.ipynb、examples/futures.ipynb),照着改参数,理解每个函数能干什么;
  4. 需要查全部函数签名时,翻 docs/api.md;想知道版本更新了什么,看 changelog.md;
  5. 想读源码、做二次开发,可以git clone https://gitcode.com/gh_mirrors/ef/efinance把仓库拉下来研究。

最后提醒一句:工具本身是为了帮你节省时间、看清数据,不代表任何投资建议。所有数据仅用于学习研究,实盘决策请务必独立判断并做好风险控制。

💡 今天装一个库、跑通一段代码,明天你就有能力把自己零散的投资想法变成看得见的数据表格——这就是最好的开始。

【免费下载链接】efinanceefinance 是一个可以快速获取基金、股票、债券、期货数据的 Python 库,回测以及量化交易的好帮手!🚀🚀🚀项目地址: https://gitcode.com/gh_mirrors/ef/efinance

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询