作者:量化小白Literacy
题图:量化小白Literacy微信公众号
在前期我们曾经发文告诉大家如何批量从朝阳永续数据库获取私募基金的净值用于研究使用,详见如何获取并整理可用的私募基金净值数据?其中我们也介绍了如何在Excel中的每一个sheet中放入一个产品的日期和对应的净值数据,方便每只产品循环计算指标。
在日常研究和交流的过程中有朋友咨询,数据中净值披露频率不一致的问题,比如某一只产品在2020年前是日净值,在2020年后按照周净值披露,导致有些指标无法计算或者计算出的指标明显有异常,该如何处理?这样的问题非常多,对于这样的情况,最好解决方案是将数据全部统一为周净值。
解决步骤如下:
1、首先提取数据,注意这一步,选项中勾选日历日,和缺失值用前值替代。为什么?有时候我们会碰到假期,比如2021年9月30日是周四,当周的周五是10月1日,因为统一按照每周五披露净值的逻辑,我们需要填充缺失值为前一个有净值的数据。
若使用客户端的设置如下:

若使用excel函数,代码如下:
=FF_FDH2("产品代码","复权累计净值(优选)","2014-01-01","2021-09-30","data_fill=0","date_interval=1","date_type=0","order=ASC","display_mode=1","layout=1","ROW=2830:COL=2")
2、数据提取后,按照如何获取并整理可用的私募基金净值数据?的方法对数据进行初步清洗,最后在一个EXCEL中每个产品一个sheet。
3、此时的数据中的净值日期均为连续的日历日,接下来是关键,思路是对每一个产品,我们生成一个时间序列,包括了产品的运作起始日,净值的最后一天,以及两者之间每周五的日期,随后以这个日期作为索引,提取我们需要的每周五的净值,这样就解决了净值序列中周净值和日净值同时存在时给数据的计算带来的干扰。
日期序列的示范如下:

完整代码如下:
#读取朝阳永续数据库导出的全部待选基金净值数据,含有大量的缺失值和净值不全的产品数据#date_filter用于在筛选每一个基金的开始日期,必须小于'2020-01-01',保证一定的样本数量date_filter='2020-01-01'date_filter=datetime.datetime.strptime(date_filter,'%Y-%m-%d')raw_data = pd.read_excel('') #数据文件路径raw_data['日期']=pd.to_datetime(raw_data['日期'])raw_data.set_index('日期',inplace=True)#净值截止日期,为当前日期往前推21天,设定为筛选条件,这一点目的是将大量的净值未更新的数据剔除deadline=datetime.datetime.now().date()- datetime.timedelta(days=21)writer=pd.ExcelWriter('处置完毕后净值.xls')fund_num=0for i in raw_data.columns:df = raw_data[[i]]df1 = df.copy()df1.dropna(inplace=True) #删除运作起始日前的缺失值start_date =df1.index[0] #运作起始日end_date = df1.index[-1] #净值的最新日d1 = pd.date_range(start_date, end_date, freq='W-FRI') #每周五的日期d2 = pd.to_datetime([start_date, end_date])datesample=d1.union(d2) #日期索引df1=df1.loc[datesample,:]df1.index.name='日期'if len(df1)>10:if (df1.index[-1].date()>deadline) and (df1.index[0]<date_filter):df1.to_excel(writer, sheet_name=i)fund_num=fund_num+1writer.save()writer.close()print('一共处理完成%s只产品数据'%(fund_num))#数据处理完毕,将原一个sheet的文件分割成一个excel中按照基金名字分开的多个sheet的文件#处理完毕后的数据均为周净值数据
版权声明:文章版权归原作者所有,部分文章由作者授权本平台发布,若有其他不妥之处的可与小编联系。
