来源:Python数据之道 (ID:PyDataLab)
作者:阳哥
01写在前面
大家好,我是阳哥。
大家知道,在财经领域,Python是有着广泛的用途的。2021年,量化基金开始成为弄潮儿。有不少消息称,量化基金贡献了相当比例的成交量,量化基金对成交量的贡献到底有多大,咱也不知道。
我们所知道的是,在金融量化领域,Python 是主力编程语言之一。
在2021年9月,阳哥曾分享过 用 Python 快速获取基金持仓增值与减持情况 这个内容,由于使用的工具 akshare 获取数据的接口发生变化,有不少同学在运行代码时遇到问题,本次将更新下文章内容,以及代码文件。
在财经领域,之前阳哥分享过部分Python实践应用的主题,包括:
大家知道,近几年,不少同学都是经由基金进入到股市中的。2020年就很流行“买股不如买基”的说话,至于股票和基金到底谁更好,这个仁者见仁智者见智,恐怕一时半会儿也说不清楚。
本文中,阳哥给大家分享的主题是 用 Python 来追踪和更新基金的持仓结构以及基金的股票增持和减持情况,涉及到的Python库主要是 pandas
和 akshare
。
最终实现的效果包括两个方面:
单支基金的不同季度持仓变化情况
多支基金的十大持仓的历史信息
效果如下:
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
结果如下: