Python批量获取基金季报

大家好,我是小一

最近研究基金的时候,突然对今年来收益最高的基金有点好奇,于是去翻了翻该基金的业绩报告。

好家伙,今年来收益接近30%了,这还是最近一段时间回调了,如果在9月初那会,净值最高冲到了2.64,也就是累计涨幅达到了164%

说出来你可能不信,这个基金2020年才成立的。我直呼好家伙

先看一下历史业绩数据:

41260121466d754f5c29eb01266f2e79.png

再来看一下今年来的业绩情况:

b25e4f2781458457580df80c75d76c09.png

大幅跑赢沪深300指数,且相对于沪深300,回撤也降低了很多。

其中最让我亮眼的一个点,竟然是今年来的季度胜率为100%。也就是说在已经过去的三个季度里面,每个季度都跑赢沪深300指数

这个让我有点好奇,于是我把时间维度拉长到近三年

19429db50dd5dd43dabf4103185d651f.png

最近的10个季度,除了20Q2和21Q4不及沪深300指数,其余8个季度都跑赢沪深300指数,胜率80%。当然如果要从20年Q3季度算起,胜率更是高达88.88%

周期性行业的恐怖如斯,这可能只是一个小小的缩影。

对了,这个指数基金是国泰中证煤炭ETF,上面截图的是它的场外基金连接C,代码是008280。简介如下:

3b9e0f78206d3737a070186e985fcb75.png

这里有必要给大家提个醒:

基金的季度报告里可以查看基金的各种信息,你可以看到,上面那个报告长达60页,满满的都是基金经理对于该行业的投资理念和个人理解,远不是我们这种小散可以比的。

所以,如果想购买一个基金,最好的办法可能是先看看他过去几年的报告,了解一下投资风格。

但是,如何快速获取一个基金的所有报告,理解其投资风格呢?

今天教大家用 Python 批量搞定,先给一个使用说明,源码和逻辑见后文

1、核心代码

首先是需要自定义一些参数,分别是:

# 自定义参数
fund_code = '008279' #基金代码
start_date = '2021-01-01' #起始时间,默认20210101
end_date = datetime.now().strftime('%Y-%m-%d')

其次是获取从起始时间到截止时间之间的所有报告清单,起始时间默认是2021年1月1日,截止时间为当前日期

# 获取内部定义ID
fund_code_Id = get_inner_Id(fund_code)
# 获取报告的清单信息
df_report_info = get_detail_info(fund_code, fund_code_Id, start_date, end_date)

最后是对清单中的PDF文件进行下载

# 下载报告清单
download_file(fund_code, df_report_info)

程序运行图如下:

1f3537239d4c411d6b0f957c292eaaf1.png

最终爬取的报告结果如下:

e782f37341fd43a33c473917955c0aa0.png

2、爬虫思路

获取源码文件请直接在原文链接中回复 基金季报

原文链接👉:Python批量获取基金季报

后续我将主要围绕基金、指数等展开量化策略研究分析,相关的源代码和数据肯定是不会一直公开的,目前仅针对公众号粉丝免费,先到先得吧,后面大概率会收费。

这里我是从巨潮资讯上爬取的,选择它是因为它的数据比较全,使用起来比较舒服,所以后续的其他文章大概率也会是从这拿数据了

打开切到基金这一栏

462b6247b552445d603d9467163fefc6.png

在右边的框里,选择开始时间和结束时间,基金代码输入对应的6位数字【或者简称也行,会有提示】,分类可以选择年报、中报、季报等

选择完成后,点击查询按钮,左边部分会出现该基金的查询结果 【向下】

可以看到,对应日期的基金报告都已经列了出来

8a48f4d7edc354732a1a27bef56df397.png

随便点开一个就是我们需要的pdf了

df190ce6b3663f71dd2a770807d567a8.png

流程走通之后,接下来按F12打开开发者工具,切换到NetWork栏,并重复上述的步骤

可以看到,点击查询按钮就会出现一个请求,该请求的响应内容就是我们上面看到的报告清单

086e8d6620c16ce72bfee941fb82d5e2.png

根据该请求的内容和参数,我们发现Form Data里是需要传入参数的

seDate是起止时间,stock是传入的代码,其中008279是我们刚刚传入的,jjjl0000034是它自动生成的

69db5a47a0b79a211b2635be3c477707.png

而后者只要能找到每个基金代码对应的自动生成的代码,就可以得到stock的参数。

而这个对应的关系,在前一个页面里就可以拿到

0c21c2b4c7be89d81f12e366bd5a53df.png

把这个数据获取下来就可以了。

获取详细报告清单的核心代码如下:

# 获取详细报告清单
url = 'http://www.cninfo.com.cn/new/hisAnnouncement/query'
response = requests.post(url, params=params, headers={'User-Agent': get_ua()})
report_json = json.loads(response.text)
# 将JSON转换为DF
df_report_info = pd.json_normalize(report_json['announcements'])

批量下载PDF文件就很容易了,刚刚获取到的数据里有网址,直接用request.get获取,用open函数保存就可以了

批量下载的核心代码如下:

# 下载报告清单
for index, row in df_data.iterrows():
 print('[ 提示 ]: 正在爬取第{0}/共{1}份报告...'.format(index+1, df_data.shape[0]))
    pdf_url = 'http://static.cninfo.com.cn/{0}'.format(row['adjunctUrl'])
    savepath = os.path.join(dirpath, row['announcementTitle'] + '.pdf')
    res = requests.get(url=pdf_url, stream=True)
    with open(f'{savepath}', 'wb') as f:
     f.write(res.content)
     print('======>> 下载完成')
    time.sleep(2)

以上是核心源码,这里省去了非核心部分,需要请查看源码文件。

后续我将主要围绕基金、指数等展开量化策略研究分析,相关的源代码和数据肯定是不会一直公开的,目前仅针对公众号粉丝免费,先到先得吧,后面大概率会收费。

兄弟们,早,就是优势啊!


OK,今天就到这,文章的最后,需要再做一个免责声明:上面所有的内容也只是我的个人推测,提到的所有基金/股票代码只是为了演示,仅供参考,不构成投资建议,投资有风险,入市需谨慎。

 获取源码文件请直接在原文链接中回复 基金季报

原文链接👉:Python批量获取基金季报

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值