尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

最简单的 Python 量化数据获取方案:efinance 四大金融市场一站式搞定

最简单的 Python 量化数据获取方案:efinance 四大金融市场一站式搞定 最简单的 Python 量化数据获取方案efinance 四大金融市场一站式搞定【免费下载链接】efinanceefinance 是一个可以快速获取基金、股票、债券、期货数据的 Python 库回测以及量化交易的好帮手项目地址: https://gitcode.com/gh_mirrors/ef/efinance你是不是也有过这样的经历周末心血来潮想写个量化策略结果打开浏览器一搜数据源注册、认证、看文档、配 API 密钥折腾两小时真正的策略代码一行还没写。想监控股票、基金、债券、期货四个市场就得同时维护四五套不同接口的代码——有的返回 JSON有的返回 XML有的干脆让你自己去抓网页。数据获取这件前置小事硬生生成了劝退无数新手的第一座大山。今天要介绍的efinance就是来解决这个问题的。它是一个专注于 Python 金融数据获取的开源库用同一套简洁的 API 统一覆盖基金、股票、债券、期货四大市场装好之后几行代码就能拿到规整的 DataFrame 数据完全免费、无需任何密钥。它已经成为很多量化交易开发者回测和实盘策略的数据好帮手。这篇文章会带你从零起步像打游戏通关一样一步步跑通你的第一个金融数据 Demo再把它玩出花样。先看一眼efinance 能做什么与其听我啰嗦不如先看看它的能力卡片——所有核心能力一句话讲明白模块核心能力一句话人话解释stock历史 K 线 / 实时行情 / 龙虎榜 / 资金流向股票的前世今生都能查还支持 A 股、港股、美股、ETFfund基金净值 / 持仓明细 / 基金经理 / 行业分布跟踪你定投的基金连它买了什么股票都看得一清二楚bond可转债行情 / 债券基本信息 / 转债 K 线可转债打新和套利玩家的必备数据futures期货合约信息 / 期货历史行情覆盖国内几大交易所的主力合约与具体合约为什么说它省心三点就够统一 API 设计四个市场都是get_quote_history、get_realtime_quotes这类同名函数学会一个其余触类旁通标准输出所有接口直接返回 pandas 的 DataFrame/Series拿到就能算指标、画图、喂给模型不用做格式转换零门槛启动pip install efinance一条命令不需要注册任何账号不需要配置任何密钥。 一句话总结别人在集齐七颗龙珠式地对接各种数据源时你已经用 efinance 把数据拿回来开始写策略了。实战主线从零跑通你的第一个数据 Demo这一节的目标很具体用 efinance 拿到贵州茅台上市以来的全部日 K 线数据并算出它的 20 日均线。走完这一步你就掌握了这个库最核心的用法。第一步三步完成环境配置假设你电脑上已经装好了 Python 3.6 以上版本配置过程就三步打开终端Windows 是 CMD 或 PowerShellmacOS/Linux 是 Terminal输入安装命令并回车pip install efinance验证安装是否成功python -c import efinance as ef; print(ef.__version__)如果能看到版本号输出恭喜你环境就绪了。这里有个小坑如果你用的是 Python 3.10 及以上版本efinance 已经在内部帮你处理了 SSL 兼容问题不需要手动改任何配置但如果遇到网络相关的报错先检查是不是公司代理或防火墙拦截了请求换到正常网络环境通常就能解决。 想保持最新功能定期执行pip install efinance --upgrade即可changelog 里会记录每个版本的修复和新增功能值得关注changelog.md。第二步一行代码获取核心数据现在打开你喜欢的编辑器VS Code、PyCharm、Jupyter 都行新建一个 Python 文件first_demo.py写入下面这段完整代码import efinance as ef # 股票代码600519 是贵州茅台 stock_code 600519 # 获取历史日 K 线数据 # klt101 表示日线beg/end 控制起止日期默认从上市到最新 df ef.stock.get_quote_history(stock_code) # 看一眼数据规模和列名 print(f共获取 {len(df)} 行记录) print(字段列表, list(df.columns)) # 查看最近 5 天的行情 print(df.tail(5)) # 计算 20 日均线移动平均 df[MA20] df[收盘].rolling(20).mean() print(\n最近 5 天的 20 日均线) print(df[[日期, 收盘, MA20]].tail(5))第三步运行并看懂输出在终端执行python first_demo.py你会看到类似下面的输出效果共获取 4761 行记录 字段列表 [股票名称, 股票代码, 日期, 开盘, 收盘, 最高, 最低, 成交量, 成交额, 振幅, 涨跌幅, 涨跌额, 换手率] 股票名称 股票代码 日期 开盘 收盘 最高 最低 成交量 成交额 振幅 涨跌幅 涨跌额 换手率 4756 贵州茅台 600519 2021-07-23 1937.82 1900.00 1937.82 1895.09 47585 9.057762e09 2.20 -2.06 -40.01 0.38 4757 贵州茅台 600519 2021-07-26 1879.00 1804.11 1879.00 1780.00 98619 1.789436e10 5.21 -5.05 -95.89 0.79 4758 贵州茅台 600519 2021-07-27 1803.00 1712.89 1810.00 1703.00 86577 1.523081e10 5.93 -5.06 -91.22 0.69 4759 贵州茅台 600519 2021-07-28 1703.00 1768.90 1788.20 1682.12 85369 1.479247e10 6.19 3.27 56.01 0.68 4760 贵州茅台 600519 2021-07-29 1810.01 1740.00 1823.00 1734.34 51035 9.067345e09 5.01 -1.63 -28.90 0.41为什么这样设计get_quote_history返回的是标准的 pandas DataFrame列名全是中文、一目了然收盘、涨跌幅、换手率这些字段拿过来就能直接用rolling()、pct_change()计算技术指标——你不需要写任何解析代码。如果不这样做会踩什么坑如果你尝试用爬虫去东财网页上解析 HTML光处理反爬和字段对应就得耗掉一个晚上而这里一行函数全搞定了。 小贴士get_quote_history还支持传入代码列表一次批量获取多只股票返回的是{代码: DataFrame}的字典批量场景非常好用。进阶变奏把 efinance 用出花样基础 Demo 跑通之后我们来点真实的。下面三个场景都是实际开发中会遇到的需求你可以直接照搬思路。场景一给基金做一次底层持仓透视什么情况下需要你在纠结这只基金到底买了什么光看净值涨跌看不出名堂。用 efinance 的get_invest_position可以拿到基金最新公开的持仓明细帮你判断它的风格是否适合你import efinance as ef fund_code 161725 # 招商中证白酒指数(LOF)A positions ef.fund.get_invest_position(fund_code) print(前十大重仓股) print(positions.head(10))输出会清楚列出贵州茅台、山西汾酒、泸州老窖等重仓股的持仓占比和较上期变化——一次调用省去翻几十页基金季报的时间做基金筛选时尤其好用。场景二跨市场相关性分析什么情况下需要你想看看股债跷跷板在近期是否成立为资产配置提供依据。efinance 最大的优势就是跨市场统一接口几行代码就能把股票和债券的数据拉到同一张表里算相关性import efinance as ef # 获取上证指数日线 stock_df ef.stock.get_quote_history(000001) # 获取某只可转债的日线 bond_df ef.bond.get_quote_history(123111) # 对齐日期并计算涨跌幅相关性 merged stock_df[[日期, 涨跌幅]].merge( bond_df[[日期, 涨跌幅]], on日期, suffixes(_股, _债) ) corr merged[涨跌幅_股].corr(merged[涨跌幅_债]) print(f股债涨跌幅相关性系数{corr:.4f})带来的收益你不需要去维护两套数据源和两套字段映射相关性分析从想想就头大变成复制就能跑。场景三监控当日主力资金动向什么情况下需要盘中想实时盯某只票的主力净流入。get_today_bill返回分钟级的资金流数据get_history_bill返回日级历史配合起来可以做一个简单的资金监控import efinance as ef # 当日分钟级主力资金流 today_bill ef.stock.get_today_bill(300750) print(当日主力资金动向最近5分钟) print(today_bill.tail(5)) # 历史日级主力资金流 history_bill ef.stock.get_history_bill(300750) print(\n近5日主力净流入单位元) print(history_bill[[日期, 主力净流入]].tail(5))带来什么收益与其盯盘看盘口不如用数据说话——把感觉主力在出货变成主力净流入连续 3 日为负这种可验证的量化结论。这三个场景串起来看你会发现 efinance 的用法高度一致选模块 → 调函数 → 拿 DataFrame → 做分析。学会一个场景其他场景基本是举一反三。避坑指南老手才懂的经验谈以下几条都是实际使用中高频出现的翻车点用问题 → 原因 → 解决方案三段式讲清楚。坑 1批量请求被限流问题一次性循环请求几百只股票中途开始报超时或空数据。原因短时间内请求过于密集触发了数据源的限流保护。解决方案控制并发、适当加延迟。efinance 内部对多标的批量请求已经做了多线程优化你只需要在外层控制节奏import time def fetch_with_pacing(codes, interval0.5): 分批获取数据每批之间休息一会避免被限流 results {} for code in codes: results[code] ef.stock.get_quote_history(code) time.sleep(interval) # 每只之间休息 0.5 秒 return results坑 2拿到空 DataFrame 不知道怎么排查问题get_quote_history返回了空的 DataFrame以为库坏了。原因代码输错或该标的不存在也可能是网络波动导致请求失败。解决方案先检查代码有效性再结合返回结果判断import efinance as ef df ef.stock.get_quote_history(600519) if df.empty: print(未获取到数据请检查股票代码是否正确或稍后重试) else: print(f成功获取 {len(df)} 行数据)坑 3不同频率 K 线不会选参数问题想拿分钟级数据却不知道klt参数怎么填。原因klt是 K 线周期代码很多人卡在参数含义上。解决方案记住这张对照表随用随查klt 取值数据频率典型用途1 / 5 / 15 / 30 / 60分钟级 K 线日内交易、短线操作101日线长期趋势、价值投资102周线中期波段103月线资产配置、宏观分析# 获取 5 分钟 K 线 df_5min ef.stock.get_quote_history(600519, klt5)坑 4频繁重复下载浪费时间和流量问题每次运行脚本都把几万行历史数据重新拉一遍。原因没做缓存重复请求同样数据。解决方案对不常变化的数据日线、基本面建立本地缓存只在必要时增量更新import os from datetime import datetime cache_file cache_600519.csv if os.path.exists(cache_file): # 取本地最新日期只增量拉取后面几天 local pd.read_csv(cache_file) last_date local[日期].max().replace(-, ) else: last_date None df ef.stock.get_quote_history( 600519, beglast_date if last_date else 19000101 ) df.to_csv(cache_file, indexFalse) 记住一个原则盘中高频数据少缓存日线等低频数据大胆缓存能省下大量网络请求。快问快答新手最关心的 6 个问题Q1efinance 是免费的吗A完全免费且开源基于公开数据源无需任何付费订阅或 API 密钥。Q2上手需要多久A装了 Python 就能用看完本文第三节十分钟内就能跑通第一个 Demo。Q3支持哪些市场和品种A股票A 股/港股/美股/ETF、基金净值/持仓/经理、债券可转债为主、期货国内各交易所。Q4数据会翻车吗A数据来自公开接口合理使用一般很稳定。建议在网络波动时加重试与空值判断详见避坑指南。Q5能拿到分钟级数据吗A可以klt参数支持 1/5/15/30/60 分钟等频率满足日内策略需求。Q6遇到问题去哪求助A先看项目内的 API 文档 docs/api.md 和示例 examples/stock.ipynb四类市场的 Notebook 示例都有现成用法。现在就去试试动手才是最好的学习看完这么多别让这篇文章停留在收藏夹吃灰。打开终端执行那条安装命令跑一遍第三节的first_demo.py然后试着把代码里的600519换成你关心的任何代码——那一刻你会真正体会到数据自由的感觉。给你的资源清单完整 API 文档docs/api.md股票示例examples/stock.ipynb基金示例examples/fund.ipynb债券示例examples/bond.ipynb期货示例examples/futures.ipynb版本更新记录changelog.md想深入源码或参与开发也可以把仓库 clone 到本地研究git clone https://gitcode.com/gh_mirrors/ef/efinance cd efinance用 efinance 打通数据获取这一环你会发现量化研究里最枯燥的部分被大幅压缩省下来的时间全部可以用来打磨你的策略本身。温馨提示本项目仅供学习交流使用请勿用于商业用途。投资有风险入市需谨慎量化交易请务必在充分了解风险、做好回测与风控后再考虑实盘操作。【免费下载链接】efinanceefinance 是一个可以快速获取基金、股票、债券、期货数据的 Python 库回测以及量化交易的好帮手项目地址: https://gitcode.com/gh_mirrors/ef/efinance创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表