diff --git a/app/service/result_service_v2.py b/app/service/result_service_v2.py index 911a8de8ebbf979fd5dc238edc01113aade159e1..cd8f0dd8599b5ced7e2ee9a5fb50ade872eaafe0 100644 --- a/app/service/result_service_v2.py +++ b/app/service/result_service_v2.py @@ -11,7 +11,7 @@ import numpy as np import datetime from decimal import Decimal from app.service.data_service_v2 import UserCustomerDataAdaptor -from app.service.portfolio_diagnose import cal_correlation, get_fund_name +from app.service.portfolio_diagnose import cal_correlation, get_fund_name, get_frequency from app.utils.week_evaluation import * @@ -30,7 +30,11 @@ class UserCustomerResultAdaptor(UserCustomerDataAdaptor): cur_folio_result_cnav_data = self.group_data[folio]["result_cnav_data"] cur_folio_order_data = self.group_data[folio]["order_df"] - freq_max = cur_folio_order_data["freq"].max() + # freq_max = cur_folio_order_data["freq"].max() + freq_list = [get_frequency(cur_folio_result_cnav_data[[p_nav]]) for p_nav in + cur_folio_result_cnav_data.columns] + freq_dict = {250: 1, 52: 2, 24: 4, 12: 3, 4: 5} + freq_max = freq_dict[min(freq_list)] first_trade_date = cur_folio_order_data["confirm_share_date"].min() fund_id_list = list(cur_folio_order_data["fund_id"].unique()) @@ -43,6 +47,11 @@ class UserCustomerResultAdaptor(UserCustomerDataAdaptor): # return_ratio_df, contribution_decomposition= self.combination_yield(cur_folio_result_cnav_data, fund_id_list) # resample_df = resample(return_ratio_df, self.trade_cal_date, freq_max) resample_cur_folio_result_cnav_data = resample(cur_folio_result_cnav_data, self.trade_cal_date, freq_max) + if resample_cur_folio_result_cnav_data.index.values[-1] > self.end_date: + last = resample_cur_folio_result_cnav_data.index.values[-1] + resample_cur_folio_result_cnav_data["index_date"] = resample_cur_folio_result_cnav_data.index + resample_cur_folio_result_cnav_data.loc[last, "index_date"] = self.end_date + resample_cur_folio_result_cnav_data.set_index("index_date", inplace=True) resample_cur_folio_result_cnav_data = resample_cur_folio_result_cnav_data[resample_cur_folio_result_cnav_data.index <= self.end_date] return_ratio_df, month_return_ratio_df, contribution_decomposition = self.combination_yield(resample_cur_folio_result_cnav_data, fund_id_list) @@ -190,7 +199,11 @@ class UserCustomerResultAdaptor(UserCustomerDataAdaptor): cur_folio_result_cnav_data = self.total_customer_order_cnav_df.copy() cur_folio_order_data = self.user_customer_order_df - freq_max = cur_folio_order_data["freq"].max() + # freq_max = cur_folio_order_data["freq"].max() + freq_list = [get_frequency(cur_folio_result_cnav_data[[p_nav]]) for p_nav in + cur_folio_result_cnav_data.columns] + freq_dict = {250: 1, 52: 2, 24: 4, 12: 3, 4: 5} + freq_max = freq_dict[min(freq_list)] # fund_id_list = list(cur_folio_order_data["fund_id"].unique()) fund_id_list_earn = [i + "_earn" for i in fund_id_list] @@ -208,6 +221,11 @@ class UserCustomerResultAdaptor(UserCustomerDataAdaptor): # resample_df = resample(return_ratio_df, self.trade_cal_date, freq_max) resample_cur_folio_result_cnav_data = resample(cur_folio_result_cnav_data, self.trade_cal_date, freq_max) + if resample_cur_folio_result_cnav_data.index.values[-1] > self.end_date: + last = resample_cur_folio_result_cnav_data.index.values[-1] + resample_cur_folio_result_cnav_data["index_date"] = resample_cur_folio_result_cnav_data.index + resample_cur_folio_result_cnav_data.loc[last, "index_date"] = self.end_date + resample_cur_folio_result_cnav_data.set_index("index_date", inplace=True) resample_cur_folio_result_cnav_data = resample_cur_folio_result_cnav_data[resample_cur_folio_result_cnav_data.index <=self.end_date] return_ratio_df, month_return_ratio_df, contribution_decomposition = self.combination_yield(resample_cur_folio_result_cnav_data, fund_id_list) resample_df = resample(return_ratio_df, self.trade_cal_date, freq_max)