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
72357017
Commit
72357017
authored
Mar 12, 2021
by
赵杰
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新版本
parent
b587313d
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
43 additions
and
32 deletions
+43
-32
evaluation.csv
app/service/evaluation.csv
+19
-17
fund_service.py
app/service/fund_service.py
+2
-2
portfolio_diagnose.py
app/service/portfolio_diagnose.py
+22
-13
No files found.
app/service/evaluation.csv
View file @
72357017
This diff is collapsed.
Click to expand it.
app/service/fund_service.py
View file @
72357017
...
@@ -172,7 +172,7 @@ def single_evaluation(fund_id, invest_type=2, index_id='000905.SH'):
...
@@ -172,7 +172,7 @@ def single_evaluation(fund_id, invest_type=2, index_id='000905.SH'):
return
evaluation_dict
return
evaluation_dict
def
fund_index_compare
(
fund_id
,
invest_type
=
2
,
index_id
=
'
000905.SH
'
):
def
fund_index_compare
(
fund_id
,
invest_type
=
2
,
index_id
=
'
4000233
'
):
start_date
=
datetime
.
datetime
(
2000
,
1
,
1
)
start_date
=
datetime
.
datetime
(
2000
,
1
,
1
)
index_daily
=
get_index_daily
(
index_id
,
start_date
)
index_daily
=
get_index_daily
(
index_id
,
start_date
)
fund_nav
=
get_tamp_nav
(
fund_id
,
start_date
,
invest_type
=
invest_type
)
fund_nav
=
get_tamp_nav
(
fund_id
,
start_date
,
invest_type
=
invest_type
)
...
...
app/service/portfolio_diagnose.py
View file @
72357017
...
@@ -203,14 +203,12 @@ def get_index_daily(index_id, start_date):
...
@@ -203,14 +203,12 @@ def get_index_daily(index_id, start_date):
Returns:与组合净值形式相同的表
Returns:与组合净值形式相同的表
"""
"""
with
TAMP_SQL
(
tamp_fund_engine
)
as
tamp_product
:
with
TAMP_SQL
(
tamp_fund_engine
)
as
tamp_fund
:
tamp_product_session
=
tamp_product
.
session
tamp_fund_session
=
tamp_fund
.
session
sql
=
"SELECT ts_code, trade_date, close FROM index_daily "
\
sql
=
"select DISTINCT `index_id`, `price_date`, `close` from tx_fund_market_indexes where index_id='{}' order by price_date ASC"
.
format
(
"WHERE ts_code='{}' AND trade_date>'{}'"
.
format
(
index_id
,
start_date
)
index_id
)
# df = pd.read_sql(sql, con).dropna(how='any')
cur
=
tamp_fund_session
.
execute
(
sql
)
cur
=
tamp_product_session
.
execute
(
sql
)
data
=
cur
.
fetchall
()
data
=
cur
.
fetchall
()
df
=
pd
.
DataFrame
(
list
(
data
),
columns
=
[
'ts_code'
,
'trade_date'
,
'close'
])
df
=
pd
.
DataFrame
(
list
(
data
),
columns
=
[
'ts_code'
,
'trade_date'
,
'close'
])
df
.
rename
({
'ts_code'
:
'fund_id'
,
'trade_date'
:
'end_date'
,
'close'
:
'adj_nav'
},
axis
=
1
,
inplace
=
True
)
df
.
rename
({
'ts_code'
:
'fund_id'
,
'trade_date'
:
'end_date'
,
'close'
:
'adj_nav'
},
axis
=
1
,
inplace
=
True
)
df
[
'end_date'
]
=
pd
.
to_datetime
(
df
[
'end_date'
])
df
[
'end_date'
]
=
pd
.
to_datetime
(
df
[
'end_date'
])
...
@@ -490,7 +488,7 @@ tamp_fund = get_tamp_fund()
...
@@ -490,7 +488,7 @@ tamp_fund = get_tamp_fund()
class
PortfolioDiagnose
(
object
):
class
PortfolioDiagnose
(
object
):
def
__init__
(
self
,
client_type
,
portfolio
,
invest_amount
,
expect_return
=
0.1
,
def
__init__
(
self
,
client_type
,
portfolio
,
invest_amount
,
expect_return
=
0.1
,
expect_drawdown
=
0.15
,
index_id
=
'
000905.SH
'
,
invest_type
=
'private'
,
start_date
=
None
,
end_date
=
None
):
expect_drawdown
=
0.15
,
index_id
=
'
4000233
'
,
invest_type
=
'private'
,
start_date
=
None
,
end_date
=
None
):
"""基金诊断
"""基金诊断
Args:
Args:
...
@@ -519,7 +517,8 @@ class PortfolioDiagnose(object):
...
@@ -519,7 +517,8 @@ class PortfolioDiagnose(object):
if
self
.
end_date
is
None
:
if
self
.
end_date
is
None
:
self
.
end_date
=
datetime
.
datetime
(
datetime
.
date
.
today
()
.
year
,
self
.
end_date
=
datetime
.
datetime
(
datetime
.
date
.
today
()
.
year
,
datetime
.
date
.
today
()
.
month
,
1
)
-
datetime
.
timedelta
(
1
)
datetime
.
date
.
today
()
.
month
,
datetime
.
date
.
today
()
.
day
)
if
self
.
start_date
is
None
:
if
self
.
start_date
is
None
:
self
.
start_date
=
cal_date
(
self
.
end_date
,
'Y'
,
1
)
self
.
start_date
=
cal_date
(
self
.
end_date
,
'Y'
,
1
)
else
:
else
:
...
@@ -536,6 +535,7 @@ class PortfolioDiagnose(object):
...
@@ -536,6 +535,7 @@ class PortfolioDiagnose(object):
self
.
origin_portfolio
=
None
self
.
origin_portfolio
=
None
self
.
abandoned_portfolio
=
None
self
.
abandoned_portfolio
=
None
self
.
propose_portfolio
=
None
self
.
propose_portfolio
=
None
self
.
ori_prod
=
None
def
get_portfolio
(
self
,
):
def
get_portfolio
(
self
,
):
"""获取组合净值表
"""获取组合净值表
...
@@ -734,8 +734,7 @@ class PortfolioDiagnose(object):
...
@@ -734,8 +734,7 @@ class PortfolioDiagnose(object):
prod
[
proposal
]
=
proposal_nav
[
proposal
]
prod
[
proposal
]
=
proposal_nav
[
proposal
]
self
.
proposal_fund
.
append
(
proposal
)
self
.
proposal_fund
.
append
(
proposal
)
prod
.
ffill
(
inplace
=
True
)
prod
=
prod
[(
prod
.
index
>=
self
.
start_date
)
&
(
prod
.
index
<=
self
.
end_date
)]
prod
=
prod
[
prod
.
index
>=
self
.
start_date
]
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
:
if
'cal_date'
in
prod
.
columns
:
prod
.
drop
(
labels
=
'cal_date'
,
inplace
=
True
,
axis
=
1
)
prod
.
drop
(
labels
=
'cal_date'
,
inplace
=
True
,
axis
=
1
)
...
@@ -744,6 +743,8 @@ class PortfolioDiagnose(object):
...
@@ -744,6 +743,8 @@ class PortfolioDiagnose(object):
self
.
new_correlation
=
cal_correlation
(
prod
)
self
.
new_correlation
=
cal_correlation
(
prod
)
prod
.
dropna
(
how
=
'all'
,
inplace
=
True
)
prod
.
dropna
(
how
=
'all'
,
inplace
=
True
)
prod
.
ffill
(
inplace
=
True
)
self
.
ori_prod
=
prod
.
copy
()
prod
.
fillna
(
method
=
"bfill"
,
inplace
=
True
)
prod
.
fillna
(
method
=
"bfill"
,
inplace
=
True
)
self
.
new_correlation
=
self
.
new_correlation
.
fillna
(
1
)
.
round
(
2
)
self
.
new_correlation
=
self
.
new_correlation
.
fillna
(
1
)
.
round
(
2
)
self
.
new_correlation
.
columns
=
self
.
new_correlation
.
columns
.
map
(
lambda
x
:
get_fund_name
(
x
,
suggest_fund_type
[
x
])
.
values
[
0
][
0
])
self
.
new_correlation
.
columns
=
self
.
new_correlation
.
columns
.
map
(
lambda
x
:
get_fund_name
(
x
,
suggest_fund_type
[
x
])
.
values
[
0
][
0
])
...
@@ -863,12 +864,20 @@ class PortfolioDiagnose(object):
...
@@ -863,12 +864,20 @@ class PortfolioDiagnose(object):
print
(
"模型计算一次时间:"
,
end4
-
start
)
print
(
"模型计算一次时间:"
,
end4
-
start
)
def
return_compare
(
self
):
def
return_compare
(
self
):
weight_prod
=
self
.
ori_prod
.
copy
()
for
col
in
weight_prod
.
columns
:
weight_prod
[
col
]
=
weight_prod
[
col
]
.
apply
(
lambda
x
:
0
if
math
.
isnan
(
x
)
else
1
)
weight_prod
=
weight_prod
*
self
.
new_weights
weight_prod
=
weight_prod
.
apply
(
lambda
x
:
x
/
x
.
sum
(),
axis
=
1
)
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_return
=
index_data
.
iloc
[:,
:]
/
index_data
.
iloc
[
0
,
:]
-
1
index_return
=
index_data
.
iloc
[:,
:]
/
index_data
.
iloc
[
0
,
:]
-
1
# origin_fund_return = origin_portfolio.iloc[:, :] / origin_portfolio.iloc[0, :] - 1
# origin_fund_return = origin_portfolio.iloc[:, :] / origin_portfolio.iloc[0, :] - 1
propose_fund_return
=
self
.
propose_portfolio
.
iloc
[:,
:]
/
self
.
propose_portfolio
.
iloc
[
0
,
:]
-
1
propose_fund_return
=
self
.
propose_portfolio
.
iloc
[:,
:]
/
self
.
propose_portfolio
.
iloc
[
0
,
:]
-
1
propose_fund_return
[
'return'
]
=
propose_fund_return
.
T
.
iloc
[:,
:]
.
apply
(
lambda
x
:
np
.
dot
(
self
.
new_weights
,
x
))
pct_change
=
self
.
propose_portfolio
.
pct_change
()
.
fillna
(
0
)
*
weight_prod
propose_fund_return
[
'return'
]
=
(
pct_change
.
sum
(
axis
=
1
)
+
1
)
.
cumprod
()
-
1
# propose_fund_return['return'] = propose_fund_return.T.iloc[:, :].apply(lambda x: np.dot(self.new_weights, x))
return
index_return
,
propose_fund_return
return
index_return
,
propose_fund_return
def
old_evaluation
(
self
,
group_name
,
group_result
,
data_adaptor
):
def
old_evaluation
(
self
,
group_name
,
group_result
,
data_adaptor
):
...
...
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