
efinance库简介
efinance是一个用于获取中国金融市场数据的Python库,支持股票、基金、期货等品种。它基于东方财富网的数据接口,提供简洁的函数调用,适合个人投资者和量化交易者快速获取数据。
安装与导入
安装efinance非常简单,使用pip命令即可:
pip install efinance
导入库:
import efinance as ef
获取股票实时行情
获取单只股票实时数据
使用ef.stock.get_realtime_quotes()函数获取单只或多只股票的实时行情。

# 获取单只股票(例如:贵州茅台,代码600519)
df = ef.stock.get_realtime_quotes('600519')
print(df)
返回的数据包含:最新价、涨跌幅、涨跌额、成交量、成交额、换手率等字段。
获取全部A股实时行情
调用时传入'沪深A股'参数:
df_all = ef.stock.get_realtime_quotes('沪深A股')
print(df_all.head())
该函数返回一个DataFrame,包含数千只股票的数据,可通过df_all.to_csv()保存到本地。
获取历史行情数据
获取日K线数据
使用ef.stock.get_quote_history()获取历史行情。
# 获取贵州茅台近一年日K线
df_hist = ef.stock.get_quote_history('600519', beg='20220101', end='20221231')
print(df_hist.head())
参数说明:
code:股票代码beg:开始日期,格式'YYYYMMDD'end:结束日期
返回的数据包括:日期、开盘、收盘、最高、最低、成交量、成交额等。
获取分钟级数据
efinance也支持分钟级数据,但需要指定klt参数(例如:1分钟、5分钟、15分钟、30分钟、60分钟)。
# 获取5分钟K线数据
df_5min = ef.stock.get_quote_history('600519', klt=5, beg='20220101', end='20220110')
print(df_5min.head())
注意:分钟级数据对区间长度有限制,通常只能获取最近几个交易日的数据。
获取财务数据
获取财务报表摘要
使用ef.stock.get_financial_summary()获取财务摘要。
df_fin = ef.stock.get_financial_summary('600519')
print(df_fin)
该函数返回多个财务报表的合并数据,包括资产负债表、利润表、现金流量表的关键指标。
获取主要财务指标
使用ef.stock.get_financial_analysis()获取更详细的财务指标。
df_analysis = ef.stock.get_financial_analysis('600519')
print(df_analysis)
返回的数据可能包含多个表,具体可通过df_analysis.keys()查看。
获取资金流向数据
efinance还可以获取个股的资金流向数据。
# 获取实时资金流向
df_flow = ef.stock.get_individual_fund_flow('600519')
print(df_flow)
该数据反映主力、超大单、大单、中单、小单的净流入流出情况。
获取大盘指数数据
获取上证指数、深证成指等指数行情。
# 获取上证指数(代码:000001)
df_index = ef.stock.get_quote_history('000001', beg='20220101', end='20221231')
print(df_index.head())
数据保存与处理
获取的数据是pandas DataFrame格式,方便进行各种处理。
保存为CSV
df_hist.to_csv('600519_history.csv', index=False, encoding='utf-8-sig')
数据清洗
通常需要将日期列转为datetime类型,并处理缺失值。
import pandas as pd
df_hist['日期'] = pd.to_datetime(df_hist['日期'])
df_hist.set_index('日期', inplace=True)
df_hist.dropna(inplace=True)
量化交易中的应用
efinance在量化交易中常用于策略回测和信号生成。
获取多只股票数据
可以通过列表批量获取:
stocks = ['600519', '000001', '601318']
for code in stocks:
df = ef.stock.get_quote_history(code, beg='20220101', end='20221231')
# 保存到本地或进行其他处理
构建策略信号
以简单的双均线策略为例:
import talib
df['MA5'] = talib.SMA(df['收盘'].values, timeperiod=5)
df['MA20'] = talib.SMA(df['收盘'].values, timeperiod=20)
# 金叉买入信号
signal = (df['MA5'] > df['MA20']) & (df['MA5'].shift(1) <= df['MA20'].shift(1))
实时监控
结合schedule或time模块,定期获取数据并监控价格异动。
注意事项
数据来源于网络接口,可能延迟或失效,建议自行验证。
频繁请求可能被限流,需控制请求频率。
对于实时数据,efinance提供的是基础数据,不包含五档盘口。
实战案例:获取股票数据并计算收益
下面展示一个完整流程:获取数据、计算日收益率、绘制走势图。
import efinance as ef
import pandas as pd
import matplotlib.pyplot as plt
# 获取数据
df = ef.stock.get_quote_history('600519', beg='20220101', end='20221231')
df['日期'] = pd.to_datetime(df['日期'])
df.set_index('日期', inplace=True)
# 计算日收益率
df['收益率'] = df['收盘'].pct_change()
# 绘制价格走势
plt.figure(figsize=(12, 6))
plt.plot(df.index, df['收盘'], label='收盘价')
plt.title('贵州茅台收盘价走势')
plt.xlabel('日期')
plt.ylabel('价格')
plt.legend()
plt.show()
常见问题解答
如何获取期货数据?
efinance支持期货数据,使用ef.futures.get_quote_history()函数,代码格式如'IF2101'。
如何处理停牌股票?
停牌股票的数据可能缺失,在清洗时需处理NaN值。
如何获取复权因子?
efinance提供前复权和后复权数据,在get_quote_history()中设置fqt=1(前复权)或fqt=2(后复权)。
拓展:与量化平台结合
efinance可配合backtrader、vnpy等量化框架使用,作为数据源。
# 在backtrader中自定义数据源
class EfinanceData(bt.feeds.PandasData):
params = (
('close', '收盘'),
('open', '开盘'),
('high', '最高'),
('low', '最低'),
('volume', '成交量'),
)
efinance库功能强大且使用简单,是获取中国股票数据的高效工具。通过结合数据处理和量化策略,可以快速搭建自己的交易系统。建议在实际使用中,多查阅官方文档和源代码,以充分利用其功能。