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
455f5e96
Commit
455f5e96
authored
May 06, 2017
by
Dr.李
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added risk analysis stuff
parent
1ed27984
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
68 additions
and
0 deletions
+68
-0
__init__.py
alphamind/analysis/__init__.py
+6
-0
riskanalysis.py
alphamind/analysis/riskanalysis.py
+62
-0
No files found.
alphamind/analysis/__init__.py
0 → 100644
View file @
455f5e96
# -*- coding: utf-8 -*-
"""
Created on 2017-5-6
@author: cheng.li
"""
alphamind/analysis/riskanalysis.py
0 → 100644
View file @
455f5e96
# -*- coding: utf-8 -*-
"""
Created on 2017-5-6
@author: cheng.li
"""
from
typing
import
Tuple
import
numpy
as
np
import
pandas
as
pd
from
alphamind.data.neutralize
import
neutralize
def
risk_analysis
(
return_series
:
pd
.
Series
,
risk_return_table
:
pd
.
DataFrame
)
->
Tuple
[
pd
.
DataFrame
,
pd
.
DataFrame
]:
group_idx
=
return_series
.
index
.
values
.
astype
(
int
)
return_values
=
return_series
.
values
risk_return_values
=
risk_return_table
.
values
risk_factor_cols
=
risk_return_table
.
columns
idiosyncratic
,
other_stats
=
neutralize
(
risk_return_values
,
return_values
,
group_idx
,
output_exposure
=
True
,
output_explained
=
True
)
systemetic
=
other_stats
[
'explained'
]
exposure
=
other_stats
[
'exposure'
]
explained_table
=
np
.
hstack
((
idiosyncratic
,
systemetic
[:,
:,
0
]))
cols
=
[
'idiosyncratic'
]
cols
.
extend
(
risk_factor_cols
)
explained_table
=
pd
.
DataFrame
(
explained_table
,
columns
=
cols
,
index
=
return_series
.
index
)
exposure_table
=
pd
.
DataFrame
(
exposure
[:,
:,
0
],
columns
=
risk_factor_cols
,
index
=
return_series
.
index
)
return
explained_table
,
exposure_table
.
groupby
(
level
=
0
)
.
first
()
if
__name__
==
'__main__'
:
from
matplotlib
import
pyplot
as
plt
n_samples
=
360000
n_dates
=
200
n_risk_factors
=
35
dates
=
np
.
sort
(
np
.
random
.
randint
(
n_dates
,
size
=
n_samples
))
return_series
=
pd
.
Series
(
data
=
np
.
random
.
randn
(
n_samples
),
index
=
dates
)
risk_return_table
=
pd
.
DataFrame
(
data
=
np
.
random
.
randn
(
n_samples
,
n_risk_factors
),
columns
=
list
(
range
(
n_risk_factors
)),
index
=
dates
)
explained_table
,
exposure_table
=
risk_analysis
(
return_series
,
risk_return_table
)
aggregated_bars
=
explained_table
.
groupby
(
level
=
0
)
.
sum
()
top_sources
=
aggregated_bars
.
sum
()
.
abs
()
.
sort_values
(
ascending
=
False
)
.
index
[:
10
]
aggregated_bars
.
sum
()
.
sort_values
(
ascending
=
False
)
.
plot
(
kind
=
'bar'
,
figsize
=
(
16
,
8
))
exposure_table
[
top_sources
.
difference
([
'idiosyncratic'
])]
.
plot
(
figsize
=
(
14
,
7
))
plt
.
show
()
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