--- template: overrides/blogs.html tags: - python --- # 获取基金行情数据 !!! info 作者:Void,发布于2021-11-27,阅读时间:约6分钟,微信公众号文章链接:[:fontawesome-solid-link:](https://mp.weixin.qq.com/s/NHgnYaelpcDKYWnAqL6vSw) ## 1 前言 作为投资小韭菜,我们总有一个买基金、买股票,纵横股市,走向人生巅峰的梦想。 作为非专业投资者,我们往往只能通过支付宝、天天基金、蛋卷基金、券商App等金融机构提供的App获取金融产品的信息。虽然这些App的功能不断完善,但是总有无法满足我们需求的时候。 例如,我们可能想要获取投资的基金组合的净值或是我们想要计算所买基金的统计指标,相关性、波动率等。 如何获取这些金融产品的数据,成为了我们科学投资的第一个问题。本篇将介绍如何使用Python获取基金行情数据。选取基金主要有以下考量:基金及基金组合的数据获取较股票困难,投资基金的受众似乎更多一些。 ## 2 获取蛋卷基金数据 我主要通过蛋卷基金和天天基金购买一些基金组合。由于美观和使用方便,我更偏向于使用蛋卷基金(非广告)。但它的缺点是无法高效地导出组合的净值。而有了原始的数据,我就可以做一些分析,如比较多个组合,计算统计量等。 我们可以在手机App或者电脑端打开蛋卷基金,查询我们关心的组合,如[我要稳稳的幸福](https://danjuanapp.com/strategy/CSI1014?channel=1300100141)(仅作示例,非投资意见)。 如图是它的收益走势。
我们可以点击历史净值及业绩,跳转到[净值及业绩界面](https://danjuanapp.com/net-performance/CSI1014)。
虽然有了数据,但是我们无法很方便地将数据导出。这时候我们可以通过黑科技Python,获取我们心心念念的数据。 我们首先要做的是尝试找到数据的来源。我们在第一个页面打开开发者工具,点击Network,重新刷新网页。
我们在Name列表找到CSI1014?type=2&day=all,从右侧的Response,或是双击它。我们都可以看到想要的每日的净值数据。
此时的数据格式并不是十分友善,我们可以使用Python获取以上数据并处理成理想的格式。 ```python import pandas as pd header={"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0"} import requests url='https://danjuanapp.com/djapi/plan/v2/growth/CSI1014?type=2&day=all' response=requests.get(url,headers=header) f=pd.read_json(response.content) ff=f.loc['fund_nav_growth','data'] nav=pd.Series(index=[i['date'] for i in ff],data=[i['nav'] for i in ff],name='funds') nav=nav[nav.index>'2020-01-01'] nav=nav.astype(float) nav.plot(figsize=(20,10)) ``` 其中,url就是我们刚刚找到数据对应的url。我们已经把数据整理成DataFrame,接着我们可以很方便地将数据导出,也可以作图等进一步分析。
## 3 总结 我们成功地通过Python爬虫获取了基金组合的历史净值。有了原始数据,我们就可以为自己的投资组合做更多的科学分析。