Commit 07e9eb74 authored by 赵杰's avatar 赵杰

bug修复

parent 377754e8
...@@ -73,6 +73,13 @@ def search_rank(fund_rank, fund, metric): ...@@ -73,6 +73,13 @@ def search_rank(fund_rank, fund, metric):
Returns: 基金指标的值 Returns: 基金指标的值
""" """
if len(fund_rank[fund_rank['fund_id'] == fund]) == 0:
now_fund = {'index': np.nan, 'fund_id': fund, 'range_return': 0.5, 'annual_return': 0.5,
'max_drawdown': 0.5, 'sharp_ratio': 1, 'volatility': 0.4, 'sortino_ratio': 0,
'downside_risk': 0, 'substrategy': 1010, 'manager': ['PL000000F5'], 'annual_return_rank': 0.5,
'downside_risk_rank': 0.5, 'max_drawdown_rank': 0.5, 'sharp_ratio_rank': 0.5, 'z_score': 50}
fund_rank = fund_rank.append(now_fund, ignore_index=True)
return fund_rank[fund_rank['fund_id'] == fund][metric].values[0] return fund_rank[fund_rank['fund_id'] == fund][metric].values[0]
...@@ -325,6 +332,15 @@ def get_fund_name(fund): ...@@ -325,6 +332,15 @@ def get_fund_name(fund):
cur = tamp_fund_session.execute(sql) cur = tamp_fund_session.execute(sql)
data = cur.fetchall() data = cur.fetchall()
df = pd.DataFrame(list(data), columns=['fund_short_name']) df = pd.DataFrame(list(data), columns=['fund_short_name'])
if len(df) == 0:
with TAMP_SQL(tamp_product_engine) as tamp_product:
tamp_product_session = tamp_product.session
sql = "SELECT fund_short_name FROM fund_info WHERE id='{}'".format(fund)
# df = pd.read_sql(sql, con)
cur = tamp_product_session.execute(sql)
data = cur.fetchall()
df = pd.DataFrame(list(data), columns=['fund_short_name'])
return df
return df return df
...@@ -448,6 +464,10 @@ class PortfolioDiagnose(object): ...@@ -448,6 +464,10 @@ class PortfolioDiagnose(object):
prod.sort_index(inplace=True) prod.sort_index(inplace=True)
prod.ffill(inplace=True) prod.ffill(inplace=True)
prod = resample(prod, get_trade_cal(), min(self.freq_list)) prod = resample(prod, get_trade_cal(), min(self.freq_list))
if 'cal_date' in prod.columns:
prod.drop(labels='cal_date', inplace=True, axis=1)
if 'end_date' in prod.columns:
prod.drop(labels='end_date', inplace=True, axis=1)
prod.dropna(how='any', inplace=True) prod.dropna(how='any', inplace=True)
return prod return prod
...@@ -662,8 +682,8 @@ class PortfolioDiagnose(object): ...@@ -662,8 +682,8 @@ class PortfolioDiagnose(object):
z_score = fund_rank_data["z_score"].mean() z_score = fund_rank_data["z_score"].mean()
drawdown_rank = fund_rank_data["max_drawdown_rank"].mean() drawdown_rank = fund_rank_data["max_drawdown_rank"].mean()
return_rank_df = fund_rank_data["annual_return_rank"] return_rank_df = fund_rank_data["annual_return_rank"]
z_score_level = np.select([z_score >= 70, z_score_level = np.select([z_score >= 80,
50 <= z_score < 70, 50 <= z_score < 80,
z_score < 50], [0, 1, 2]).item() z_score < 50], [0, 1, 2]).item()
drawdown_level = np.select([drawdown_rank >= 0.8, drawdown_level = np.select([drawdown_rank >= 0.8,
0.7 <= drawdown_rank < 0.8, 0.7 <= drawdown_rank < 0.8,
...@@ -726,6 +746,9 @@ class PortfolioDiagnose(object): ...@@ -726,6 +746,9 @@ class PortfolioDiagnose(object):
evaluate_enum = [["优秀", "良好", "一般"], evaluate_enum = [["优秀", "良好", "一般"],
["优秀", "良好", "合格", "较差"]] ["优秀", "良好", "合格", "较差"]]
if data_adaptor.group_result_data["cumulative_profit"] < 0 and z_score_level == 0:
z_score_level = 1
z_score_evaluate = evaluate_enum[0][z_score_level] z_score_evaluate = evaluate_enum[0][z_score_level]
drawdown_evaluate = evaluate_enum[1][drawdown_level] drawdown_evaluate = evaluate_enum[1][drawdown_level]
if z_score_evaluate in ["优秀", "良好"]: if z_score_evaluate in ["优秀", "良好"]:
...@@ -776,14 +799,17 @@ class PortfolioDiagnose(object): ...@@ -776,14 +799,17 @@ class PortfolioDiagnose(object):
old_sharpe = group_result_data["sharpe"] old_sharpe = group_result_data["sharpe"]
# 指数收益 # 指数收益
index_data = get_index_daily(self.index_id, self.start_date) # index_data = get_index_daily(self.index_id, self.start_date)
index_data = pd.merge(index_data, self.propose_portfolio, how='inner', left_index=True, right_index=True) # index_data = pd.merge(index_data, self.propose_portfolio, how='inner', left_index=True, right_index=True)
index_data = data_adaptor.fund_cnav_total[["index"]]
index_data = index_data[index_data.index >= pd.to_datetime(data_adaptor.start_date)]
index_return = index_data.iloc[:, :] / index_data.iloc[0, :] - 1 index_return = index_data.iloc[:, :] / index_data.iloc[0, :] - 1
# 指数收益 # 指数收益
index_return = index_return[index_return.index >= group_order_start_date] index_return = index_return[index_return.index >= group_order_start_date]
start_index_return = index_return[" close"].values[0] index_return["index"] = index_return["index"].astype('float')
index_return["new_index_return"] = (index_return[" close"] - start_index_return) / (1 + start_index_return) start_index_return = index_return["index"].values[0]
index_return["new_index_return"] = (index_return["index"] - start_index_return) / (1 + start_index_return)
index_return_ratio = index_return["new_index_return"].values[-1] index_return_ratio = index_return["new_index_return"].values[-1]
index_return_ratio_year = annual_return(index_return["new_index_return"].values[-1], index_return_ratio_year = annual_return(index_return["new_index_return"].values[-1],
index_return["new_index_return"], n_freq) index_return["new_index_return"], n_freq)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment