module fundit::task_monthlyPerformance use fundit::dataPuller; use fundit::dataSaver; use fundit::bfiMatcher; use fundit::rankingCalculator; /* * [定时任务] 计算基金一、二级分类排名并存入数据库 * * @param entity_type : 'MF', 'HF' * @param end_date : * @param isFromMySQL : false 时读取dolphin本地的收益及指标表,用于初始化数据 * * * Example: CalEntityRankingTask('MF', 2024.09M, true); */ def CalEntityRankingTask(entity_type, end_date, isFromMySQL=true) { if(!(entity_type in ['MF', 'HF'])) return NULL; entity_info = get_entity_info(entity_type, NULL); v_ranking_tables = cal_indicator_ranking('strategy', entity_type, entity_info, end_date, isFromMySQL); save_ranking_tables(entity_type, v_ranking_tables); } /* * [定时任务] 计算基金BFI排名并存入数据库 * * @param entity_type : 'MF', 'HF' * @param end_date : * @param isFromMySQL : false 时读取dolphin本地的收益及指标表,用于初始化数据 * * * Example: CalEntityBfiRankingTask('MF', 2024.09M, true); */ def CalEntityBfiRankingTask(entity_type, end_date, isFromMySQL=true) { if(!(entity_type in ['MF', 'HF'])) return NULL; entity_info = get_entity_info(entity_type, NULL); v_ranking_tables = cal_indicator_ranking('bfi', entity_type, entity_info, end_date, isFromMySQL); save_ranking_tables(entity_type, v_ranking_tables); } /* * Private Method: 计算相对排名并存入数据库 * * */ def cal_and_save_relative_ranking(entity_type, benchmark_ranking, entity_ranking, ranking_by, isFromMySQL=true) { t_entity_ranking = entity_ranking; cal_relative_ranking(benchmark_ranking, t_entity_ranking, isFromMySQL); t_entity_ranking.rename!('category_id', ranking_by); save_relative_ranking_table(entity_type, t_entity_ranking, ranking_by); } /* * * 以公募基金为评级参考,计算组合、私有基金收益及指标排名 * * * Example: CalRelativeRanking('PF', 2024.09M, true); */ def CalRelativeRanking(entity_type, end_date, isFromMySQL=true) { entity_info = get_entity_info(entity_type, NULL); if(entity_type == 'PF') entity_info = SELECT * FROM entity_info WHERE portfolio_type IN (1, 2) // 1: 用户组合、2:客户真实组合,忽略客户推荐组合、总览综合等虚拟组合 v_ranking_by = ['strategy', 'substrategy'/*, 'factor_id'*/]; // 暂时以公募混合基金为排名参考 for(ranking_by in v_ranking_by) { if(ranking_by == 'strategy') { v_category = EXEC DISTINCT strategy FROM entity_info WHERE strategy IS NOT NULL; tb_fund_ranking = get_fund_indicator_ranking(NULL, end_date, v_category, true) } else if(ranking_by == 'substrategy') { v_category = EXEC DISTINCT substrategy FROM entity_info WHERE substrategy IS NOT NULL; tb_fund_ranking = get_fund_indicator_substrategy_ranking(NULL, end_date, v_category, true) } else if(ranking_by == 'bfi') { tb_fund_ranking = null; } if(tb_fund_ranking.isVoid() || tb_fund_ranking.size() == 0) return; tb_fund_ranking.rename!(ranking_by, 'category_id'); // 收益 v_indicator_id = [1]; benchmark_ranking = SELECT * FROM tb_fund_ranking WHERE indicator_id IN v_indicator_id; entity_ranking = transform_return_for_ranking(entity_type, entity_info, end_date, ranking_by, isFromMySQL).rename!(ranking_by, 'category_id'); cal_and_save_relative_ranking(entity_type, benchmark_ranking, entity_ranking, ranking_by, isFromMySQL); // 风险指标 v_indicator_id = [2, 6, 9, 10, 11, 12, 21, 50, 52, 59]; benchmark_ranking = SELECT * FROM tb_fund_ranking WHERE indicator_id IN v_indicator_id; entity_ranking = transform_risk_stats_for_ranking(entity_type, entity_info, end_date, ranking_by, isFromMySQL).rename!(ranking_by, 'category_id'); cal_and_save_relative_ranking(entity_type, benchmark_ranking, entity_ranking, ranking_by, isFromMySQL); // 风险调整收益指标 v_indicator_id = [14, 15, 16, 17, 18, 19, 40, 58]; benchmark_ranking = SELECT * FROM tb_fund_ranking WHERE indicator_id IN v_indicator_id; entity_ranking = transform_risk_adj_ret_stats_for_ranking(entity_type, entity_info, end_date, ranking_by, isFromMySQL).rename!(ranking_by, 'category_id'); cal_and_save_relative_ranking(entity_type, benchmark_ranking, entity_ranking, ranking_by, isFromMySQL); // 其它风险指标 v_indicator_id = [37, 38, 41, 42, 43, 44, 45, 46, 47, 48, 49]; benchmark_ranking = SELECT * FROM tb_fund_ranking WHERE indicator_id IN v_indicator_id; entity_ranking = transform_other_indicator_for_ranking(entity_type, entity_info, end_date, ranking_by, isFromMySQL).rename!(ranking_by, 'category_id'); cal_and_save_relative_ranking(entity_type, benchmark_ranking, entity_ranking, ranking_by, isFromMySQL); // 上下行捕获指标 v_indicator_id = [33, 34, 35, 36]; benchmark_ranking = SELECT * FROM tb_fund_ranking WHERE indicator_id IN v_indicator_id; entity_ranking = transform_capture_style_for_ranking(entity_type, entity_info, end_date, ranking_by, isFromMySQL).rename!(ranking_by, 'category_id'); cal_and_save_relative_ranking(entity_type, benchmark_ranking, entity_ranking, ranking_by, isFromMySQL); } // SELECT * FROM entity_ranking WHERE entity_id = 143109 }