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

bug修复

parent 377754e8
......@@ -73,6 +73,13 @@ def search_rank(fund_rank, fund, metric):
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]
......@@ -325,6 +332,15 @@ def get_fund_name(fund):
cur = tamp_fund_session.execute(sql)
data = cur.fetchall()
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
......@@ -448,6 +464,10 @@ class PortfolioDiagnose(object):
prod.sort_index(inplace=True)
prod.ffill(inplace=True)
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)
return prod
......@@ -662,8 +682,8 @@ class PortfolioDiagnose(object):
z_score = fund_rank_data["z_score"].mean()
drawdown_rank = fund_rank_data["max_drawdown_rank"].mean()
return_rank_df = fund_rank_data["annual_return_rank"]
z_score_level = np.select([z_score >= 70,
50 <= z_score < 70,
z_score_level = np.select([z_score >= 80,
50 <= z_score < 80,
z_score < 50], [0, 1, 2]).item()
drawdown_level = np.select([drawdown_rank >= 0.8,
0.7 <= drawdown_rank < 0.8,
......@@ -726,6 +746,9 @@ class PortfolioDiagnose(object):
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]
drawdown_evaluate = evaluate_enum[1][drawdown_level]
if z_score_evaluate in ["优秀", "良好"]:
......@@ -776,14 +799,17 @@ class PortfolioDiagnose(object):
old_sharpe = group_result_data["sharpe"]
# 指数收益
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 = 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 = 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_return[index_return.index >= group_order_start_date]
start_index_return = index_return[" close"].values[0]
index_return["new_index_return"] = (index_return[" close"] - start_index_return) / (1 + start_index_return)
index_return["index"] = index_return["index"].astype('float')
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_year = annual_return(index_return["new_index_return"].values[-1],
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