diff --git a/app/service/fund_service.py b/app/service/fund_service.py index c7b11005805aba6e769098bb52b60dc5b2cf5896..e2fd8f6807bb3620604422e295033ac78d9b2d34 100644 --- a/app/service/fund_service.py +++ b/app/service/fund_service.py @@ -77,8 +77,11 @@ def single_evaluation(fund_id, invest_type=2, index_id='000905.SH'): end_date = datetime.datetime(datetime.date.today().year, datetime.date.today().month, 1) - datetime.timedelta(1) start_date = cal_date(end_date, 'Y', 1) - - z_score = search_rank(fund_rank, fund_id, metric='z_score') + if invest_type == 0: + rank_df = tx_fund_rank + else: + rank_df = fund_rank + z_score = search_rank(rank_df, fund_id, metric='z_score') total_level = np.select([z_score >= 80, 70 <= z_score < 80, z_score < 70], [0, 1, 2]).item() @@ -93,7 +96,7 @@ def single_evaluation(fund_id, invest_type=2, index_id='000905.SH'): compare = pd.merge(index_return_monthly, fund_return_monthly, how='inner', left_index=True, right_index=True) fund_win_rate = ((compare[fund_id] - compare['pct_chg']) > 0).sum() / compare[fund_id].count() - return_rank = search_rank(fund_rank, fund_id, metric='annual_return_rank') + return_rank = search_rank(rank_df, fund_id, metric='annual_return_rank') return_level = np.select([return_rank >= 0.8, 0.7 <= return_rank < 0.8, 0.6 <= return_rank < 0.7, @@ -101,8 +104,8 @@ def single_evaluation(fund_id, invest_type=2, index_id='000905.SH'): return_bool = 1 if return_level > 2 else 0 return_triple = return_level - 1 if return_level >= 2 else return_level - drawdown_rank = search_rank(fund_rank, fund_id, metric='max_drawdown_rank') - drawdown_value = search_rank(fund_rank, fund_id, metric='max_drawdown') + drawdown_rank = search_rank(rank_df, fund_id, metric='max_drawdown_rank') + drawdown_value = search_rank(rank_df, fund_id, metric='max_drawdown') drawdown_level = np.select([drawdown_rank >= 0.8, 0.7 <= drawdown_rank < 0.8, 0.6 <= drawdown_rank < 0.7, @@ -110,7 +113,7 @@ def single_evaluation(fund_id, invest_type=2, index_id='000905.SH'): drawdown_bool = 1 if drawdown_level > 2 else 0 drawdown_triple = drawdown_level - 1 if drawdown_level >= 2 else drawdown_level - sharp_rank = search_rank(fund_rank, fund_id, metric='sharp_ratio_rank') + sharp_rank = search_rank(rank_df, fund_id, metric='sharp_ratio_rank') sharp_level = np.select([sharp_rank >= 0.8, 0.6 <= sharp_rank < 0.8, sharp_rank < 0.6], [0, 1, 2]).item()