Commit 87cb32ea authored by pengxiong@wealthgrow.cn's avatar pengxiong@wealthgrow.cn

Merge remote-tracking branch 'origin/dev' into dev

# Conflicts:
#	app/service/portfolio_diagnose.py
parents d08762ef cb36347c
...@@ -3,6 +3,7 @@ from app.utils.risk_parity import * ...@@ -3,6 +3,7 @@ from app.utils.risk_parity import *
from app.pypfopt import risk_models from app.pypfopt import risk_models
from app.pypfopt import expected_returns from app.pypfopt import expected_returns
from app.pypfopt import EfficientFrontier from app.pypfopt import EfficientFrontier
from app.api.engine import tamp_user_engine, tamp_product_engine, TAMP_SQL
def cal_correlation(prod): def cal_correlation(prod):
...@@ -573,14 +574,14 @@ class PortfolioDiagnose(object): ...@@ -573,14 +574,14 @@ class PortfolioDiagnose(object):
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 ["优秀", "良好"]:
z_score_evaluate = """<span class="comment_tag_red">{}</span>""".format(z_score_evaluate) z_score_evaluate = """<span class="self_description_red">{}</span>""".format(z_score_evaluate)
else: else:
z_score_evaluate = """<span class="comment_tag_green">{}</span>""".format(z_score_evaluate) z_score_evaluate = """<span class="self_description_green">{}</span>""".format(z_score_evaluate)
if drawdown_evaluate in ["优秀", "良好"]: if drawdown_evaluate in ["优秀", "良好"]:
drawdown_evaluate = """<span class="comment_tag_red">{}</span>""".format(drawdown_evaluate) drawdown_evaluate = """<span class="self_description_red">{}</span>""".format(drawdown_evaluate)
else: else:
drawdown_evaluate = """<span class="comment_tag_green">{}</span>""".format(drawdown_evaluate) drawdown_evaluate = """<span class="self_description_green">{}</span>""".format(drawdown_evaluate)
sentence = { sentence = {
1: "1、组合构建于{}年{}月,至今已运行{}个月。投入成本为{}万元,截止{}年{}月{}日,整体盈利{}万元,整体表现{},回撤控制能力{};\n", 1: "1、组合构建于{}年{}月,至今已运行{}个月。投入成本为{}万元,截止{}年{}月{}日,整体盈利{}万元,整体表现{},回撤控制能力{};\n",
...@@ -598,12 +599,40 @@ class PortfolioDiagnose(object): ...@@ -598,12 +599,40 @@ class PortfolioDiagnose(object):
ret.append(sentence[k].format(*data[k]).replace(",;", ";")) ret.append(sentence[k].format(*data[k]).replace(",;", ";"))
return ret return ret
def new_evaluation(self): def new_evaluation(self, group_name, group_result, data_adaptor):
hold_fund = set(self.portfolio) - set(self.abandon_fund)
abandon_fund = self.abandon_fund group_result_data = group_result[group_name]
proposal_fund = self.proposal_fund hold_info = group_result_data["group_hoding_info"]
data = [hold_fund, abandon_fund, proposal_fund]
return data # 原组合总市值, 区间收益, 年化收益, 波动率, 最大回撤, 夏普比率
total_asset = round(pd.DataFrame(hold_info)["market_values"].sum(),2)
old_return = group_result_data["cumulative_return"]
old_return_ratio_year = group_result_data["return_ratio_year"]
old_volatility = group_result_data["volatility"]
old_max_drawdown = group_result_data["max_drawdown"]
old_sharpe = group_result_data["sharpe"]
# 建议基金数据
index_return, propose_fund_return = self.return_compare()
propose_fund_id_list = list(propose_fund_return.columns)
propose_fund_id_list.remove("return")
with TAMP_SQL(tamp_product_engine) as tamp_product:
tamp_product_session = tamp_product.session
sql_product = "select distinct `id`, `fund_short_name`, `nav_frequency`, `substrategy` from `fund_info`"
cur = tamp_product_session.execute(sql_product)
data = cur.fetchall()
product_df = pd.DataFrame(list(data), columns=['fund_id', 'fund_name', 'freq', 'substrategy'])
propose_fund_df = product_df[product_df["fund_id"].isin(propose_fund_id_list)]
propose_fund_id_list_name = [] # 基金名称,策略分级
# hold_fund = set(self.portfolio) - set(self.abandon_fund)
# abandon_fund = self.abandon_fund
# proposal_fund = self.proposal_fund
# data = [hold_fund, abandon_fund, proposal_fund]
# return data
def single_evaluation(self, fund_id): def single_evaluation(self, fund_id):
""" """
...@@ -745,16 +774,11 @@ class PortfolioDiagnose(object): ...@@ -745,16 +774,11 @@ class PortfolioDiagnose(object):
portfolio = ['HF00002JJ2', 'HF00005DBQ', 'HF0000681Q', 'HF00006693', 'HF00006AZF', 'HF00006BGS'] portfolio = ['HF00002JJ2', 'HF00005DBQ', 'HF0000681Q', 'HF00006693', 'HF00006AZF', 'HF00006BGS']
portfolio_diagnose = PortfolioDiagnose(client_type=1, portfolio=portfolio, invest_amount=10000000) portfolio_diagnose = PortfolioDiagnose(client_type=1, portfolio=portfolio, invest_amount=10000000)
portfolio_diagnose.optimize() portfolio_diagnose.optimize()
if __name__ == '__main__': # if __name__ == '__main__':
# print(portfolio_diagnose.single_fund_radar()) # print(portfolio_diagnose.single_fund_radar())
# print(portfolio_diagnose.propose_fund_radar()) # print(portfolio_diagnose.propose_fund_radar())
# print(portfolio_diagnose.old_portfolio_evaluation()) # print(portfolio_diagnose.old_portfolio_evaluation())
old_correlation = portfolio_diagnose.old_correlation # print('旧组合相关性:', portfolio_diagnose.old_correlation)
old_correlation_columns = old_correlation.columns.tolist()
old_correlation_values = old_correlation.values.tolist()
old_correlation = zip(range(1, len(old_correlation_columns) + 1), old_correlation.columns.tolist(),
old_correlation.values.tolist())
print('旧组合相关性:', list(old_correlation))
# print('新组合相关性:', portfolio_diagnose.new_correlation) # print('新组合相关性:', portfolio_diagnose.new_correlation)
# print('旧组合个基评价:', portfolio_diagnose.old_portfolio_evaluation()) # print('旧组合个基评价:', portfolio_diagnose.old_portfolio_evaluation())
# print('新组合个基评价:', portfolio_diagnose.propose_fund_evaluation()) # print('新组合个基评价:', portfolio_diagnose.propose_fund_evaluation())
...@@ -1945,32 +1945,32 @@ ...@@ -1945,32 +1945,32 @@
font-weight: bold; font-weight: bold;
} }
.level_color1 { .have_sub_tb .level_color1 {
background: #993612; background: #993612;
color: #993612; color: #993612;
} }
.level_color2 { .have_sub_tb .level_color2 {
background: #C58E7B; background: #C58E7B;
color: #C58E7B; color: #C58E7B;
} }
.level_color3 { .have_sub_tb .level_color3 {
background: #E9D4CD; background: #E9D4CD;
color: #E9D4CD; color: #E9D4CD;
} }
.level_color4 { .have_sub_tb .level_color4 {
background: #C4E4E6; background: #C4E4E6;
color: #C4E4E6; color: #C4E4E6;
} }
.level_color5 { .have_sub_tb .level_color5 {
background: #87C8CB; background: #87C8CB;
color: #87C8CB; color: #87C8CB;
} }
.level_color6 { .have_sub_tb .level_color6 {
background: #129298; background: #129298;
color: #129298; color: #129298;
} }
......
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