如何利用efinance获取股票数据

企业微信

efinance库简介

efinance是一个用于获取中国金融市场数据的Python库,支持股票、基金、期货等品种。它基于东方财富网的数据接口,提供简洁的函数调用,适合个人投资者和量化交易者快速获取数据。

安装与导入

安装efinance非常简单,使用pip命令即可:


pip install efinance

导入库:


import efinance as ef

获取股票实时行情

获取单只股票实时数据

使用ef.stock.get_realtime_quotes()函数获取单只或多只股票的实时行情。

如何利用efinance获取股票数据


# 获取单只股票(例如:贵州茅台,代码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))

实时监控

结合scheduletime模块,定期获取数据并监控价格异动。

注意事项

  • 数据来源于网络接口,可能延迟或失效,建议自行验证。

  • 频繁请求可能被限流,需控制请求频率。

  • 对于实时数据,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库功能强大且使用简单,是获取中国股票数据的高效工具。通过结合数据处理和量化策略,可以快速搭建自己的交易系统。建议在实际使用中,多查阅官方文档和源代码,以充分利用其功能。

转载请注明出处:https://www.lianghuajiaoyi.top/wenzhang/efinance-170.html