Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
A
alpha-mind
Project
Project
Details
Activity
Releases
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
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Dr.李
alpha-mind
Commits
33f4135c
Commit
33f4135c
authored
Aug 21, 2017
by
Dr.李
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update quantile analysis example
parent
6b4563e7
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
37 additions
and
27 deletions
+37
-27
quantile_analysis_example.py
alphamind/examples/quantile_analysis_example.py
+37
-27
No files found.
alphamind/examples/quantile_analysis_example.py
View file @
33f4135c
...
...
@@ -7,14 +7,16 @@ Created on 2017-8-16
import
numpy
as
np
import
pandas
as
pd
from
matplotlib
import
pyplot
as
plt
from
PyFin.api
import
*
from
alphamind.api
import
*
from
alphamind.data.dbmodel.models
import
Uqer
from
alphamind.data.dbmodel.models
import
Tiny
from
alphamind.data.dbmodel.models
import
LegacyFactor
engine
=
SqlEngine
(
"mssql+pymssql://licheng:A12345678!@10.63.6.220/alpha"
)
engine
=
SqlEngine
(
'postgresql+psycopg2://postgres:we083826@localhost/alpha'
)
universe
=
Universe
(
'custom'
,
[
'zz500'
])
neutralize_risk
=
[
'SIZE'
]
+
industry_styles
n_bins
=
5
n_bins
=
24
factor_weights
=
np
.
array
([
1.
])
...
...
@@ -35,30 +37,40 @@ dates = makeSchedule(start_date,
tenor
=
freq
,
calendar
=
'china.sse'
)
prod_factors
=
[
'EARNYILD'
,
'ROAEBIT'
,
'CHV'
,
'CFinc1'
]
col_names
=
set
()
all_data
=
engine
.
fetch_data_range
(
universe
,
prod_factors
,
dates
=
dates
,
benchmark
=
905
)
factor_all_data
=
all_data
[
'factor'
]
factor_tables
=
[
LegacyFactor
]
for
factor
in
prod_factors
:
for
t
in
factor_tables
:
for
c
in
t
.
__table__
.
columns
:
col_names
.
add
(
c
.
name
)
factors
=
[
factor
]
final_res
=
np
.
zeros
((
len
(
dates
),
n_bins
))
col_names
=
col_names
.
difference
(
set
([
'Date'
,
'Code'
]))
factor_groups
=
factor_all_data
.
groupby
(
'Date'
)
for
i
,
value
in
enumerate
(
factor_groups
):
date
=
value
[
0
]
data
=
value
[
1
]
codes
=
data
.
Code
.
tolist
()
ref_date
=
value
[
0
]
.
strftime
(
'
%
Y-
%
m-
%
d'
)
returns
=
engine
.
fetch_dx_return
(
date
,
codes
,
horizon
=
horizon
)
prod_factors
=
list
(
col_names
)
all_data
=
engine
.
fetch_data_range
(
universe
,
prod_factors
,
dates
=
dates
,
benchmark
=
905
)
return_all_data
=
engine
.
fetch_dx_return_range
(
universe
,
dates
=
dates
,
horizon
=
horizon
)
factor_all_data
=
all_data
[
'factor'
]
total_data
=
pd
.
merge
(
data
,
returns
,
on
=
[
'Code'
])
.
dropna
()
print
(
date
,
': '
,
len
(
total_data
))
total_df
=
pd
.
DataFrame
()
factor_groups
=
factor_all_data
.
groupby
(
'Date'
)
return_groups
=
return_all_data
.
groupby
(
'Date'
)
for
date
,
factor_data
in
factor_groups
:
ref_date
=
date
.
strftime
(
'
%
Y-
%
m-
%
d'
)
returns
=
return_groups
.
get_group
(
date
)
final_res
=
np
.
zeros
((
len
(
prod_factors
),
n_bins
))
this_date_data
=
factor_data
[[
'Code'
,
'isOpen'
,
'weight'
]
+
prod_factors
+
neutralize_risk
]
this_date_data
=
pd
.
merge
(
this_date_data
,
returns
,
on
=
[
'Code'
])
codes
=
this_date_data
.
Code
.
tolist
()
for
i
,
factor
in
enumerate
(
prod_factors
):
factors
=
[
factor
]
total_data
=
this_date_data
[[
'Code'
,
'isOpen'
,
'weight'
,
'dx'
]
+
factors
+
neutralize_risk
]
.
dropna
()
risk_exp
=
total_data
[
neutralize_risk
]
.
values
.
astype
(
float
)
dx_return
=
total_data
.
dx
.
values
benchmark
=
total_data
.
weight
.
values
f_data
=
total_data
[
factors
]
try
:
res
=
quantile_analysis
(
f_data
,
...
...
@@ -73,13 +85,11 @@ for factor in prod_factors:
final_res
[
i
]
=
res
/
benchmark
.
sum
()
df
=
pd
.
DataFrame
(
final_res
,
index
=
dates
)
start_date
=
advanceDateByCalendar
(
'china.sse'
,
dates
[
0
],
'-1m'
)
df
.
loc
[
start_date
]
=
0.
df
=
pd
.
DataFrame
(
final_res
,
index
=
prod_factors
)
df
.
sort_index
(
inplace
=
True
)
df
.
cumsum
()
.
plot
(
figsize
=
(
12
,
6
))
plt
.
title
(
'{0} weekly re-balance'
.
format
(
factors
[
0
]))
plt
.
savefig
(
'{0}_big_universe_20170814.png'
.
format
(
factors
[
0
]))
df
[
'Date'
]
=
date
total_df
=
total_df
.
append
(
df
)
print
(
'{0} is finished'
.
format
(
date
))
plt
.
show
()
\ No newline at end of file
total_df
.
to_csv
(
'd:/factor_eval_pm500_mirror.csv'
)
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