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
07e9eb74
Commit
07e9eb74
authored
Dec 11, 2020
by
赵杰
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bug修复
parent
377754e8
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
32 additions
and
6 deletions
+32
-6
portfolio_diagnose.py
app/service/portfolio_diagnose.py
+32
-6
No files found.
app/service/portfolio_diagnose.py
View file @
07e9eb74
...
...
@@ -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
>=
7
0
,
50
<=
z_score
<
7
0
,
z_score_level
=
np
.
select
([
z_score
>=
8
0
,
50
<=
z_score
<
8
0
,
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
)
...
...
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