用 Python 快速获取基金持仓增减情况 | 更新版

本文介绍如何使用Python的akshare库获取和分析基金持仓变化,特别是单支基金和多支基金的增减持情况。通过对比不同季度数据,展示了如何封装函数以便捷地获取和展示基金的持仓结构变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来源:Python数据之道 (ID:PyDataLab)

作者:阳哥

01写在前面

大家好,我是阳哥。

大家知道,在财经领域,Python是有着广泛的用途的。2021年,量化基金开始成为弄潮儿。有不少消息称,量化基金贡献了相当比例的成交量,量化基金对成交量的贡献到底有多大,咱也不知道。

我们所知道的是,在金融量化领域,Python 是主力编程语言之一。

在2021年9月,阳哥曾分享过 用 Python 快速获取基金持仓增值与减持情况 这个内容,由于使用的工具 akshare 获取数据的接口发生变化,有不少同学在运行代码时遇到问题,本次将更新下文章内容,以及代码文件。

在财经领域,之前阳哥分享过部分Python实践应用的主题,包括:

  1. 用Python来做一个投资计划

  2. 用Python快速追踪基金的收益情况

  3. 视频:Plotly 和 Dash 在投资领域的应用

  4. 视频:Plotly中绘制股票交易图表

  5. Plotly中绘制三种经典的股票交易图表

  6. 神器Tushare,财经数据必备工具!

  7. 用 Python 读取巴菲特近期持仓数据

大家知道,近几年,不少同学都是经由基金进入到股市中的。2020年就很流行“买股不如买基”的说话,至于股票和基金到底谁更好,这个仁者见仁智者见智,恐怕一时半会儿也说不清楚。

本文中,阳哥给大家分享的主题是 用 Python 来追踪和更新基金的持仓结构以及基金的股票增持和减持情况,涉及到的Python库主要是 pandasakshare

最终实现的效果包括两个方面:

  • 单支基金的不同季度持仓变化情况

  • 多支基金的十大持仓的历史信息

效果如下:

0047b76a9bdb5edf7ea173e03f9a2972.png
单支基金
6527d06b651f22ef0fac67b5df6fe598.png
多支基金

02akshare 介绍

Tushare 类似, akshare 是国内比较的优秀的财经数据工具。

AKShare 是基于 Python 的财经数据接口库, 目的是实现对股票、期货、期权、基金、外汇、债券、指数、加密货币等金融产品的基本面数据、实时和历史行情数据、衍生数据从数据采集、数据清洗到数据落地的一套工具。

在使用 akshare 之前,需要进行安装,使用命令如下:

pip install akshare

在安装好 akshare 后,导入相关 Python库,如下:

import akshare as ak
import pandas as pd
import numpy as np

print(f'pandas version: {pd.__version__}')
print(f'akshare version: {ak.__version__}')

# pandas version: 1.3.2
# akshare version: 1.3.41

2022.1.12 更新内容:

本文中, akshare 使用的版本为 1.3.41

03单支基金

对于单支基金的持仓情况变化,主要是通过对比临近的两个季度,来观察基金持仓的股票增持与减持情况,从而来跟踪基金的趋势变化。

由于基金季度报告中,1季度和3季度只披露前十大股票的持仓情况,而半年度(Q2)和年度(Q4)报告会披露全部持仓的情况,因此,也可以通过对更详细信息的对比来挖掘有些趋势信息。

下面,将详细的介绍获取并对比两个季度的持仓数据。

分步骤介绍

首先,咱们通过 akshare 来获取基金的季度持仓数据,以 易方达蓝筹精选基金(基金代码:005827)为例,获取2019-2021年的持仓数据情况,代码如下:

# 易方达蓝筹精选,005827
# 前海开源公共事业股票,005669
years = ['2019','2020','2021']

data = pd.DataFrame()
for yr in years:
    # df_tmp = ak.fund_em_portfolio_hold(code="005827",year=yr) # akshare version: 1.0.91
    df_tmp = ak.fund_portfolio_hold_em(code="005827",year=yr) # akshare version: 1.3.41
    data = data.append(df_tmp)

data['季度']=data['季度'].apply(lambda x:x[:6])
data['季度'] = data['季度'].str.replace('年','Q')
data['占净值比例'] = pd.to_numeric(data['占净值比例'])
data

2022.1.12 更新内容:

基金持仓数据获取的接口,在 akshare 1.3.41 版本中,更新为 fund_portfolio_hold_em

结果如下:

9d3e581bf3fc0e2cb25394d084545acf.png
基金持仓历史数据

假设咱们需要对比2021年1季度和2021年2季度的持仓变化情况,则只需要在上面的数据上选择 2021Q12021Q2 即可。

数据选取如下:

s1 = '2021Q1'
s2 = '2021Q2'
s1_share = s1+'持股数'
s2_share = s2+'持股数'
s1_value = s1+'持仓市值'
s2_value = s2+'持仓市值'
s1_ratio = s1+'持仓比例'
s2_ratio = s2+'持仓比例'

df1 =data[data['季度']==s1]
df1 = df1[['股票代码', '股票名称','持股数','持仓市值','占净值比例']]
df1 = df1.rename(columns={'持股数':s1_share,'持仓市值':s1_value,'占净值比例':s1_ratio})
df2 =data[data['季度']==s2]
df2 = df2[['股票代码', '股票
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值