def FundReturnQuarter(report_date): """ 计算在给定时间点前后一个月 一个基金收益 利用基金复权净值计算 """ T = 20 beg_date = Date().get_trade_date_offset(report_date, -T) end_date = Date().get_trade_date_offset(report_date, T) date_series = Date().get_trade_date_series(beg_date, end_date) fund_code_list = Fund().get_fund_pool_code(date=report_date, name="基金持仓基准基金池") fund_code_list3 = Fund().get_fund_pool_code(date=report_date, name="量化基金") fund_code_list2 = Fund().get_fund_pool_code(date="20180630", name="东方红基金") fund_code_list.extend(fund_code_list2) fund_code_list.extend(fund_code_list3) fund_code_list = list(set(fund_code_list)) fund_code_list.sort() fund_pct = Fund().get_fund_factor("Repair_Nav_Pct", date_series, fund_code_list) print(" Calculting fund Return At date %s " % report_date) fund_pct[fund_pct == 0] = np.nan fund_pct_period = pd.DataFrame(fund_pct.sum(skipna=True).values, index=fund_pct.columns, columns=[report_date]) fund_pct_period[fund_pct_period == 0] = np.nan return fund_pct_period
def GetAllFundAlphaOnFactorFile(stock_alpha, fund_holding_date, factor_name, report_date): """ 计算所有基金 在某个日期 在 Factor 上的alpha """ # params ################################################################################### # report_date = '20171231' # path = 'E:\\3_Data\\4_fund_data\\7_fund_select_stock\\StockAlpha\\' # factor_name = "TotalMarketValue" # # stock_alpha = GetStockAlphaAtFactorFile(path, factor_name) # fund_holding_all = Fund().get_fund_holding_all() # fund_holding_date = fund_holding_all[fund_holding_all['Date'] == report_date] # read data ################################################################################### fund_code_list = Fund().get_fund_pool_code(date=report_date, name="基金持仓基准基金池") fund_code_list3 = Fund().get_fund_pool_code(date=report_date, name="量化基金") fund_code_list2 = Fund().get_fund_pool_code(date="20180630", name="东方红基金") fund_code_list.extend(fund_code_list2) fund_code_list.extend(fund_code_list3) result = pd.DataFrame([], index=fund_code_list, columns=[report_date]) # cal fund alpha on style #################################################################################### for i in range(0, len(fund_code_list)): fund_code = fund_code_list[i] fund_holding = fund_holding_date[fund_holding_date['FundCode'] == fund_code] fund_holding.index = fund_holding['StockCode'] fund_holding = fund_holding.ix[~fund_holding.index.duplicated(), :] fund_holding = fund_holding.dropna(subset=['Weight']) alpha = GetFundAlphaAtFactorFile(stock_alpha, fund_holding, report_date) result.ix[fund_code, report_date] = alpha if fund_code == "229002.OF": print(fund_holding) print(" Alpha Fund %s At Date %s On Factor %s is %s" % (fund_code, report_date, factor_name, str(alpha))) #################################################################################### return result
def AllFundBarraDecomposeReturnQuarter(fund_holding_all, path, report_date): """ 计算一个季报时间点 前后一个月 所有基金 拆分的 特异收益 风格收益 行业收益 和 市场收益 """ # 参数 ###################################################################################################### # report_date = '20171231' # path = 'E:\\3_Data\\4_fund_data\\7_fund_select_stock\\' # fund_holding_all = Fund().get_fund_holding_all() # 持仓信息 ###################################################################################################### fund_holding_date = fund_holding_all[fund_holding_all['Date'] == report_date] # 基金池信息 ###################################################################################################### fund_code_list = Fund().get_fund_pool_code(date=report_date, name="基金持仓基准基金池") fund_code_list3 = Fund().get_fund_pool_code(date=report_date, name="量化基金") fund_code_list2 = Fund().get_fund_pool_code(date="20180630", name="东方红基金") fund_code_list.extend(fund_code_list2) fund_code_list.extend(fund_code_list3) fund_code_list = list(set(fund_code_list)) fund_code_list.sort() # cal fund alpha on style ###################################################################################################### for i in range(0, len(fund_code_list)): fund_code = fund_code_list[i] if i == 0: result = FundBarraDecomposeReturnQuarter(fund_holding_date, report_date, path, fund_code) else: res = FundBarraDecomposeReturnQuarter(fund_holding_date, report_date, path, fund_code) result = pd.concat([result, res], axis=0) ###################################################################################################### file = "FundBarraDecomposeReturnQuarter" + report_date + '.csv' file = os.path.join(path, "FundBarraDecomposeReturnQuarter", file) result.to_csv(file)
def GetAllFundAllDateFactorAlphaFile(in_path, out_path, factor_name_list, date_series): # params #################################################################################### # in_path = 'E:\\3_Data\\4_fund_data\\7_fund_select_stock\\StockAlpha\\' # out_path = 'E:\\3_Data\\4_fund_data\\7_fund_select_stock\\FundSelectStockAlpha\\' # # factor_name_list = ["TotalMarketValue", "BP", "IncomeYOYDaily", "ROETTMDaily", "Industry"] # # beg_date = "20170530" # end_date = "20180630" # date_series = Date().get_normal_date_series(beg_date, end_date, "S") if not os.path.exists(out_path): os.makedirs(out_path) # read data ################################################################################### fund_code_list = Fund().get_fund_pool_code(date=report_date, name="基金持仓基准基金池") fund_code_list3 = Fund().get_fund_pool_code(date=report_date, name="量化基金") fund_code_list2 = Fund().get_fund_pool_code(date="20180630", name="东方红基金") fund_code_list.extend(fund_code_list2) fund_code_list.extend(fund_code_list3) result = pd.DataFrame([], index=fund_code_list, columns=[report_date]) # cal fund alpha on style #################################################################################### for i in range(0, len(fund_code_list)): fund_code = fund_code_list[i] # read data #################################################################################### fund_holding_all = Fund().get_fund_holding_all() # cal alpha #################################################################################### for i_factor in range(len(factor_name_list)): factor_name = factor_name_list[i_factor] stock_alpha = GetStockAlphaAtFactorFile(in_path, factor_name) for i_date in range(len(date_series)): report_date = date_series[i_date] fund_holding_date = fund_holding_all[fund_holding_all['Date'] == report_date] alpha_date = GetAllFundAlphaOnFactorFile(stock_alpha, fund_holding_date, factor_name, report_date) if i_date == 0: new_data = alpha_date else: new_data = pd.concat([new_data, alpha_date], axis=1) new_data = new_data.T.dropna(how="all") filename = os.path.join(out_path, 'FundSelectStockAlpha_' + factor_name + '.csv') if os.path.exists(filename): old_data = pd.read_csv(filename, index_col=[0], encoding='gbk') old_data.index = old_data.index.map(str) result = pandas_add_row(old_data, new_data) else: result = new_data result.to_csv(filename)