
时间:2022-08-18 10:01:25来源:网络整理
玩资金的朋友应该有深刻的理解。2018年是比较惨淡的一年中国基金网每日净值表,尤其是下半年,能够保本还是不错的。2019年迎来了良好的开端。2月11日至14日,连续四个交易日转红。
“天天基金”网站可查询该基金的历史净值信息。这里利用网站提供的数据接口查询基金净值,做一些简单的分析。数据是否准确,分析是否到位,不管,做一个简单的Python实现即可。Python获取基金数据
以下链接提供对基金数据的访问:
提供合适的参数,即可获取指定基金在指定日期期间的净值数据,例如:
以上提供代码为110022的基金(易方达消费行业)2019年1月1日至2月13日的基金NAV数据。如下图:
链接中各个参数的含义简单说明:
如上图,底部有pages和curpage参数,分别表示总页数和当前页数。取数据时需要特殊处理,否则只能获取当前页数据。代码很简单,过程也很容易理解。我就不多介绍了,附上完整的代码。
基金单位净值、累计净值
基金一般在每个工作日公布前一个工作日的净值,单位净值=总净资产/基金份额,可以简单理解为基金的价格。所以,净值越高,在一定程度上,基金越“贵”,但也可能意味着基金经理管理得好。在交易日买入基金时,若在当日15:00前买入,则按当日基金净值确认份额,申购份额=申购金额/净值当天的基金价值。若当日15:00后申购,则在下一个工作日按基金净值确认份额。
累积净值是基金的净值加上过去的股息,反映了基金过去的整体回报。每单位资产净值提供了基金实时交易价格的参考,但从基金业绩来看,累计资产净值是一个更重要的指标。
例子
采集招商中证白酒指数(161725))2018年基金数据进行分析。基金份额净值、累计净值和日增长率绘制如下:
可以看出,去年是比较惨淡的一年,尤其是下半年,整体呈下降趋势。这段时间关注过基金的人应该有很深的体会,半年的“绿化”已经很好了。日增整理了整体波动分布中国基金网每日净值表,下半年波动幅度较大,尤其是11月前后的交易日,涨跌幅度较大。全年245个交易日中,除两个缺失值外,日增长率为正的有106天,负或为零的有137天。下跌的日子多于上涨的日子。
我们来看看“累计净值-单位净值”的变化。一般来说,当股息发生时,差额会发生变化。图纸如下:
可以看出,2018年差值发生了两次变化,一次是7月初,一次是12月中旬。进一步确认,这两个试点分别是2018/07/05和2018/12/17.查询天天基金网站。该基金2018年无具体分红信息,但于2018/12/17发生基金份额转股,2018/07/05未查询具体事项。作为一个只能投资基金的小白瓜,我这里明白了。
代码:
# 导入需要的模块
import requests
from bs4 import BeautifulSoup
import re
import numpy as np
import pandas as pd

import matplotlib.pyplot as plt
import matplotlib
#指定默认字体
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['font.family']='sans-serif'
#解决负号'-'显示为方块的问题
matplotlib.rcParams['axes.unicode_minus'] = False
# 抓取网页
def get_url(url, params=None, proxies=None):
    rsp = requests.get(url, params=params, proxies=proxies)
    rsp.raise_for_status()
    return rsp.text
# 从网页抓取数据
def get_fund_data(code,per=10,sdate='',edate='',proxies=None):
    url = 'http://fund.eastmoney.com/f10/F10DataApi.aspx'
    params = {'type': 'lsjz', 'code': code, 'page':1,'per': per, 'sdate': sdate, 'edate': edate}
    html = get_url(url, params, proxies)
    soup = BeautifulSoup(html, 'html.parser')
    # 获取总页数

    pattern=re.compile(r'pages:(.*),')
    result=re.search(pattern,html).group(1)
    pages=int(result)
    # 获取表头
    heads = []
    for head in soup.findAll("th"):
        heads.append(head.contents[0])
    # 数据存取列表
    records = []
    # 从第1页开始抓取所有页面数据
    page=1
    while page<=pages:
        params = {'type': 'lsjz', 'code': code, 'page':page,'per': per, 'sdate': sdate, 'edate': edate}
        html = get_url(url, params, proxies)
        soup = BeautifulSoup(html, 'html.parser')
        # 获取数据
        for row in soup.findAll("tbody")[0].findAll("tr"):
            row_records = []
            for record in row.findAll('td'):

                val = record.contents
                # 处理空值
                if val == []:
                    row_records.append(np.nan)
                else:
                    row_records.append(val[0])
            # 记录数据
            records.append(row_records)
        # 下一页
        page=page+1
    # 数据整理到dataframe
    np_records = np.array(records)
    data= pd.DataFrame()
    for col,col_name in enumerate(heads):
        data[col_name] = np_records[:,col]
    return data
# 主程序
if __name__ == "__main__":
    data=get_fund_data('161725',per=49,sdate='2018-01-01',edate='2018-12-31')
    # 修改数据类型
    data['净值日期']=pd.to_datetime(data['净值日期'],format='%Y/%m/%d')
    data['单位净值']= data['单位净值'].astype(float)
    data['累计净值']=data['累计净值'].astype(float)
    data['日增长率']=data['日增长率'].str.strip('%').astype(float)
    # 按照日期升序排序并重建索引
    data=data.sort_values(by='净值日期',axis=0,ascending=True).reset_index(drop=True)
    print(data)
    # 获取净值日期、单位净值、累计净值、日增长率等数据并
    net_value_date = data['净值日期']
    net_asset_value = data['单位净值']
    accumulative_net_value=data['累计净值']
    daily_growth_rate = data['日增长率']
    # 作基金净值图
    fig = plt.figure()
    #坐标轴1
    ax1 = fig.add_subplot(111)
    ax1.plot(net_value_date,net_asset_value)
    ax1.plot(net_value_date,accumulative_net_value)
    ax1.set_ylabel('净值数据')
    ax1.set_xlabel('日期')
    plt.legend(loc='upper left')
    #坐标轴2
    ax2 = ax1.twinx()
    ax2.plot(net_value_date,daily_growth_rate,'r')
    ax2.set_ylabel('日增长率(%)')
    plt.legend(loc='upper right')
    plt.title('基金净值数据')
    plt.show()
    # 绘制分红配送信息图
    bonus = accumulative_net_value-net_asset_value
    plt.figure()
    plt.plot(net_value_date,bonus)
    plt.xlabel('日期')
    plt.ylabel('累计净值-单位净值')
    plt.title('基金“分红”信息')
    plt.show()
    # 日增长率分析
    print('日增长率缺失:',sum(np.isnan(daily_growth_rate)))
    print('日增长率为正的天数:',sum(daily_growth_rate>0))
    print('日增长率为负(包含0)的天数:',sum(daily_growth_rate<=0))声明:文章仅代表原作者观点,不代表本站立场;如有侵权、违规,可直接反馈本站,我们将会作修改或删除处理。
图文推荐
 
				2022-08-18 09:10:03
 
				2022-08-18 08:11:02
 
				2022-08-18 08:10:25
 
				2022-08-17 17:10:04
 
				2022-08-17 14:10:02
 
				2022-08-17 13:10:04
热点排行
精彩文章
 
				2022-08-18 08:11:15
 
				2022-08-17 13:10:31
 
				2022-08-17 13:01:30
 
				2022-08-17 12:10:28
 
				2022-08-17 08:10:27
 
				2022-08-16 13:10:22
热门推荐
