Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in
Toggle navigation
F
fund_report
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
彭熊
fund_report
Commits
87cb32ea
Commit
87cb32ea
authored
Dec 03, 2020
by
pengxiong@wealthgrow.cn
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/dev' into dev
# Conflicts: # app/service/portfolio_diagnose.py
parents
d08762ef
cb36347c
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
48 additions
and
24 deletions
+48
-24
portfolio_diagnose.py
app/service/portfolio_diagnose.py
+42
-18
monthReport.html
app/templates/monthReport.html
+6
-6
No files found.
app/service/portfolio_diagnose.py
View file @
87cb32ea
...
@@ -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())
app/templates/monthReport.html
View file @
87cb32ea
...
@@ -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
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment