news 2026/8/18 14:29:09

如何用 Python 轻松搞定量化交易数据获取?一个免费库打通四大金融市场

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何用 Python 轻松搞定量化交易数据获取?一个免费库打通四大金融市场

如何用 Python 轻松搞定量化交易数据获取?一个免费库打通四大金融市场

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

做量化交易的第一道坎,往往不是策略写不出来,而是数据不知道从哪里拿。说句得罪人的实话:量化交易数据获取本该是整套流程里最简单的一环,却劝退了最多新手。

我第一次搭交易系统时就栽在这里:想同时盯股票和基金,先注册了两个数据服务商的账号,一个要配 API 密钥,另一个返回全英文字段,还得写脚本做字段映射;等想把债券、期货也接进来时,我已经在四份风格迥异的文档里晕头转向。一周过去,策略一行没写,光在跟数据格式搏斗。

后来我遇到 efinance 这个开源库,才意识到这件事本可以不这么痛苦。

一个库,给四大金融市场统一的数据入口 🎯

efinance 是免费、开源的 Python 库,基于东方财富网的数据源,把股票、基金、债券、期货四类金融数据封装成风格一致的 API。最打动我的一点:不需要注册、不需要密钥、不需要理解底层接口,装好就能用——相当于一套开箱即用的免费金融数据接口。

安装只需一条命令:

pip install efinance

然后,三行代码就能用 Python 获取股票历史数据,比如贵州茅台二十多年的日 K 线:

import efinance as ef # 获取贵州茅台的历史日 K 线,默认返回前复权数据 stock_df = ef.stock.get_quote_history('600519') print(f'共 {len(stock_df)} 行记录') print(stock_df[['日期', '开盘', '收盘', '涨跌幅']].tail(3))

返回的是规整的 pandas DataFrame,日期、开高低收、成交量、成交额、涨跌幅、换手率等常用列一应俱全,拿到就能直接进 pandas 做计算。它还支持传入代码列表一次批量拉取——传列表时返回一个以代码为键的字典。

"换一家数据源就要重学一套接口"的体验,在这里被统一掉了。

实战主线:用 efinance 搭一个迷你数据看板

光看单函数没感觉,下面用一个小项目串起完整流程:做一个覆盖四大金融市场的迷你看板,体验一遍量化交易数据获取的真实节奏。

看板核心代码只有十几行:

import efinance as ef # 1. 股票:贵州茅台今年以来的日 K 线 stock = ef.stock.get_quote_history('600519', beg='2026-01-01') # 2. 基金:白酒指数基金的历史净值 fund = ef.fund.get_quote_history('161725') # 3. 债券:全市场可转债实时行情(取前 5 行演示) bond = ef.bond.get_realtime_quotes().head(5) # 4. 期货:先取全市场行情,用第一个合约的行情 ID 再取历史数据 futures_id = ef.futures.get_realtime_quotes().iloc[0]['行情ID'] futures = ef.futures.get_quote_history(futures_id) # 顺手算个 5 日均线,验证数据可直接进入分析流程 stock['MA5'] = stock['收盘'].rolling(5).mean() print('股票最新收盘:', stock['收盘'].iloc[-1]) print('基金最新净值:', fund['单位净值'].iloc[-1]) print('债券样例:', bond[['债券代码', '债券名称', '涨跌幅']]) print('期货最新收盘:', futures['收盘'].iloc[-1])

运行后,四个市场的关键数据一次性汇总到控制台。全程没有注册账号、没有配置密钥,从安装到跑通不到十分钟。拿到 DataFrame 之后,画 K 线、算指标、喂给机器学习模型,都交给熟悉的 pandas 生态即可。

3 个必须避开的坑

用了几个月,我踩过几个印象深刻的坑,提前帮你绕开:

坑一:默认拉全量历史数据,循环请求容易触发限流

get_quote_history默认从 1900 年拉到今天,动辄几千行。如果你在循环里对几十只股票各拉一次全量,很容易被数据源限流,表现为偶发超时或空返回。

应对有两招:一是begend参数按需缩小时间范围;二是加一层本地缓存,避免重复请求:

import os import time import pandas as pd def fetch_with_cache(code, cache_dir='./data'): """本地缓存 6 小时,减少重复请求""" path = os.path.join(cache_dir, f'{code}.csv') os.makedirs(cache_dir, exist_ok=True) if os.path.exists(path) and time.time() - os.path.getmtime(path) < 6 * 3600: return pd.read_csv(path) df = ef.stock.get_quote_history(code) df.to_csv(path, index=False) return df

坑二:频率和复权参数没搞清楚,算出的指标对不上

get_quote_history有两个常用参数:klt控制频率,fqt控制复权方式。我最初用日线参数去取分钟级数据,返回空表,排查半天才发现是频率代码写错了。常用频率对照如下:

klt 值含义典型用途
101日线趋势分析、回测
102周线中期波段
103月线资产配置
1 / 5 / 15 / 30 / 60对应分钟线日内交易

fqt取值为 1 前复权、2 后复权、3 不复权。回测建议用默认的前复权,研究分红除权才需要不复权数据。

坑三:批量请求没有错误兜底,一次网络抖动拖垮整个脚本

数据源偶尔抽风是常态,批量拉数时一定要给单次失败留退路。简单的做法是把重试逻辑包进一个函数,失败时按指数退避等待再试,连续失败就返回空表,而不是让整个程序崩溃。网络不稳定时,这层兜底能省下大把排查时间。

想继续深入?这些入口别错过 📌

  • API 文档:四个模块全部函数的参数说明和示例在 docs/api.md。
  • 示例代码:examples/ 下有股票、基金、债券、期货四个 Jupyter Notebook,照着跑一遍基本就上手了,适合作为量化交易入门的第一份练习材料。
  • 版本动态:新功能与接口调整记录在 changelog.md,升级前值得扫一眼。
  • 源码学习:想了解实现细节或二次开发,可以克隆仓库git clone https://gitcode.com/gh_mirrors/ef/efinance后阅读源码。

现在就开始你的量化之旅 🚀

如果你正卡在数据获取这一步,我的建议很直接:装上 efinance,先跑通上面的看板代码,再对照文档把你需要的接口逐个试一遍。当量化交易数据获取不再是瓶颈,你就能把精力放回真正重要的地方——策略本身。

最后提醒一句:本库仅供学习交流使用,请勿用于商业用途。量化交易有风险,历史数据表现不代表未来收益,实盘前请务必充分了解相关风险并做好资金管理。

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!