ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

efinance 完整入门指南:一篇文章搞定股票基金债券期货数据获取

efinance 完整入门指南:一篇文章搞定股票基金债券期货数据获取 efinance 完整入门指南一篇文章搞定股票基金债券期货数据获取【免费下载链接】efinanceefinance 是一个可以快速获取基金、股票、债券、期货数据的 Python 库回测以及量化交易的好帮手项目地址: https://gitcode.com/gh_mirrors/ef/efinance你是否也有过这样的经历想做量化交易数据获取结果股票用一个接口、基金要换另一个平台、债券和期货又是完全陌生的数据源光是注册账号、研究文档就耗掉了一个周末这正是很多量化新手的第一道坎。efinance正是为此而生——它是一个完全免费开源的 Python 库只需import efinance as ef就能从同一套简洁 API 中拿到股票、基金、债券、期货四大市场的行情数据把凑数据的时间省下来还给策略本身。别让数据接口成为你入行量化交易的第一道坎想象一下这个场景你的策略需要同时观察贵州茅台的日 K 线、一只白酒指数基金的净值、对应可转债的实时价格以及动力煤期货的走势。传统做法是维护四份文档、四组请求参数、四种返回格式最后还得自己写代码把字段对齐。而用 efinance四个市场走的几乎都是同一个套路调用get_quote_history或get_realtime_quotes拿回统一结构的 DataFrame。更贴心的是它的入参宽容度很高传股票代码可以传微软这样的中文名称也可以单个标的可以代码列表同样支持。这意味着你不需要先记住每个市场特有的 ID 规则把查代码这件事也一并省掉了。一张表看懂efinance 与传统取数方式的差别对比维度efinance 方案传统多平台取数接口数量一套 API 覆盖四类市场每类市场一套独立接口认证成本无需注册、无 API Key常需申请密钥、绑定权限数据格式统一 pandas DataFrame各家字段命名五花八门学习曲线半小时上手每个平台重新学一遍使用成本完全免费部分服务按量计费代码维护量一套封装到处用多处适配、频繁改版当然免费与便利背后也有代价数据来自公开行情源存在一定延迟且短期内高频请求可能触发限流。明白了这些边界你就能把它放在合适的位置——做策略研究、回测和数据底座它是一把非常好用的万能钥匙。先跑起来安装 efinance 并拿到第一份行情安装只需要一条 pip 命令pip install efinance如果你想跟着源码深入学习或者参与二次开发也可以克隆仓库后以可编辑模式安装git clone https://gitcode.com/gh_mirrors/ef/efinance cd efinance pip install -e .装好之后试试第一段代码——获取贵州茅台的历史日 K 线import efinance as ef # 获取贵州茅台600519的历史行情默认是日 K 线 kline ef.stock.get_quote_history(600519) # 打印行数与列名感受一下返回的数据结构 print(f共 {len(kline)} 条记录字段{list(kline.columns)}) print(kline.tail(3))运行后你会得到一个约几千行的 DataFrame包含日期、开盘、收盘、最高、最低、成交量、成交额、涨跌幅、换手率等 13 个字段。从上市首日到最新交易日完整历史一次到位。也就是说从安装到拿到第一份可分析的数据前后不过三行代码。四大市场一套 API逐个认识你的数据通道efinance 的顶层结构非常清晰ef.stock、ef.fund、ef.bond、ef.futures四个模块分别对应四大市场。我们一个个看。股票模块的覆盖面最广除了历史 K 线还能拿实时行情、资金流向和龙虎榜import efinance as ef # 沪深 A 股最新实时行情一次返回全市场 realtime ef.stock.get_realtime_quotes() # 单只股票的逐笔资金流入分钟级 bill ef.stock.get_today_bill(300750) print(bill.tail(3))基金模块聚焦净值与持仓信息非常适合做定投研究import efinance as ef # 获取招商中证白酒指数基金的历史净值 net_value ef.fund.get_quote_history(161725) # 查看该基金最新公开的十大重仓股 position ef.fund.get_invest_position(161725) print(position.head(5))债券模块目前主打可转债实时行情、全部可转债基本资料、单只转债 K 线都有覆盖import efinance as ef # 全市场可转债实时行情 convertible ef.bond.get_realtime_quotes() # 全部可转债的发行信息评级、申购日、发行规模等 all_bonds ef.bond.get_all_base_info() print(all_bonds[[债券代码, 债券名称, 债券评级]].head(5))期货模块稍有一点不同期货没有统一的股票代码而是用行情 ID 定位合约。官方给的用法是先取行情 ID 列表再取对应合约的历史数据import efinance as ef # 第一步拿到全部期货合约的行情 ID 列表 quote_ids ef.futures.get_realtime_quotes()[行情ID] # 第二步用第一个 ID通常是某主力合约取历史行情 futures_kline ef.futures.get_quote_history(quote_ids[0]) print(futures_kline.tail(3))四类市场轮一遍你会发现调用模式惊人地一致都是传一个标识 → 拿回 DataFrame区别只在于标识是股票代码、基金代码、债券代码还是期货行情 ID。这种一致性正是它好上手的关键。一个函数的多面性频率、区间与批量参数get_quote_history是最常用的函数它的几个参数可以覆盖大多数取数需求kltK 线频率101 是日线102 是周线103 是月线1/5/15/30/60 则是分钟线做日内策略时非常有用beg/end指定起始与截止日期避免每次都拉全量历史省时又省流量fqt复权方式做技术分析时建议用前复权数据避免除权跳空干扰指标计算。例如要获取贵州茅台最近一个月的 5 分钟 K 线import efinance as ef # klt5 表示 5 分钟线beg/end 限定区间 mini_kline ef.stock.get_quote_history( 600519, beg20240101, end20240131, klt5, ) print(mini_kline.head(3))批量场景也同样简单——传入代码列表即可返回值会自动变成代码 → DataFrame的字典结构import efinance as ef # 一次获取多只股票的历史行情 multi ef.stock.get_quote_history([600519, 000858, 601318]) print(type(multi)) # dict print(list(multi.keys()))让取数更省心的三个小工具缓存、批处理与容错真实项目中数据获取往往要反复执行直接裸调接口既慢又容易触发限流。这里分享三个自用的封装思路。第一个给热门标的加一层本地缓存把不常变的数据留在磁盘上import os import pandas as pd from datetime import datetime def local_store(code, fetch_func, cache_dir./data_cache, max_age_hours6): 带有效期的本地缓存命中缓存直接读过期则重新拉取。 os.makedirs(cache_dir, exist_okTrue) cache_file os.path.join(cache_dir, f{code}.parquet) if os.path.exists(cache_file): # 检查缓存文件是否过期 age (datetime.now().timestamp() - os.path.getmtime(cache_file)) / 3600 if age max_age_hours: return pd.read_parquet(cache_file) # 未命中缓存或已过期重新获取并落盘 df fetch_func(code) df.to_parquet(cache_file) return df第二个控制批量的节奏避免一次性并发过多请求被限流import time def fetch_in_batches(codes, fetch_func, batch_size5, sleep_seconds1): 分批拉取并合并结果每批之间稍作停顿降低被限流的概率。 result {} for i in range(0, len(codes), batch_size): batch codes[i:i batch_size] result.update(fetch_func(batch)) if i batch_size len(codes): time.sleep(sleep_seconds) return result第三个给网络波动加保险。efinance 内部本身已有重试机制但如果你要串联多个步骤建议在外面再包一层兜底逻辑保证单点失败不会中断整个采集流程。这些封装都不复杂却能明显提升数据管道的稳定性。拆开看看efinance 内部是怎么把数据送到你手上的了解一点内部结构遇到问题时会更有方向感。整个仓库的布局相当规整efinance/ ├── stock/ # 股票数据入口 ├── fund/ # 基金数据入口 ├── bond/ # 债券数据入口 ├── futures/ # 期货数据入口 ├── common/ # 各市场共用的底层请求与字段处理 ├── utils/ # 装饰器、行情 ID 查询等公共工具 ├── config/ # 全局配置与缓存路径 └── shared/ # 共享会话session等资源四个对外模块其实是薄壳——它们各自负责组织业务参数真正的 HTTP 请求、字段重命名、类型转换等脏活累活大多收敛在common与utils里。比如utils里的装饰器会自动把返回的 DataFrame 中可转数字的列转成数值类型省去你手动清洗的功夫。一次典型请求的数据流大致是这样的传入代码/名称 ↓ utils.search_quote 把标识解析成行情 ID含本地缓存3 天内命中不再请求 ↓ common 层按行情 ID 组装参数并发起请求 ↓ 响应经字段重命名、类型转换等装饰器加工 ↓ 返回统一结构的 pandas DataFrame 给调用方顺带一提搜索结果会以文件形式缓存在本地重复查询相同代码时会先走缓存这也是它查代码很快的原因之一。高频问题快问快答Q1efinance 需要注册账号或申请密钥吗不需要。它基于公开行情接口安装后即可使用无任何认证流程。Q2返回的数据是什么格式统一是 pandas DataFrame批量多标的时为字典value 是 DataFrame可以直接接 pandas、numpy 生态做分析。Q3数据能拿到多早的历史取决于标的本身像贵州茅台可以回溯到 2001 年上市首日美股苹果可以到上世纪八十年代足够支撑长期回测。Q4会不会被限流合理使用一般没问题但短时间内高频轮询有触发限流的可能。建议适当控制频率、加上间隔并缓存不常变化的数据。Q5行情是实时的吗实时行情通常有几秒到分钟的延迟做盘中监控够用如果是毫秒级高频交易它并不适合请选用更专业的行情源。避坑清单给新手的四条提醒别把频率参数记混klt101是日线而非 1 分钟线分钟线用klt1/5/15。写策略前先打印几行确认粒度避免拿错周期还浑然不觉。注意复权处理计算均线、动量这类指标时建议使用前复权数据否则除权缺口会污染计算结果。区分基金与股票的历史基金模块返回的是净值序列字段与股票 K 线不同别用同一套代码硬套。期货记得先查行情 ID它不像股票那样直接传代码就行先走一步get_realtime_quotes()拿到 ID 列表更稳妥。结语把时间还给策略让 efinance 做你的数据底座数据获取从来不该是量化开发的主角它只是舞台下的后勤。efinance 的价值就在于把这份后勤工作压缩到近乎零成本免费、无门槛、一套 API 覆盖四大市场拿到手的还是干净的 DataFrame。现在就去pip install efinance跑通你人生中第一份行情数据吧——接下来无论是做技术指标分析、基金净值跟踪还是可转债轮动监控你都已经有了一个足够可靠的数据起点。温馨提示本项目仅供学习交流使用请勿用于商业用途。投资有风险入市需谨慎量化策略请务必经过充分回测与风险验证后再考虑实盘。【免费下载链接】efinanceefinance 是一个可以快速获取基金、股票、债券、期货数据的 Python 库回测以及量化交易的好帮手项目地址: https://gitcode.com/gh_mirrors/ef/efinance创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表