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
c53b8804
Commit
c53b8804
authored
May 08, 2017
by
Dr.李
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
modified risk analysis implementation
parent
9391fbd1
Changes
4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
2754 additions
and
798 deletions
+2754
-798
riskanalysis.py
alphamind/analysis/riskanalysis.py
+20
-18
__init__.py
alphamind/tests/analysis/__init__.py
+6
-0
test_riskanalysis.py
alphamind/tests/analysis/test_riskanalysis.py
+10
-0
factor analysis.ipynb
notebooks/factor analysis.ipynb
+2718
-780
No files found.
alphamind/analysis/riskanalysis.py
View file @
c53b8804
...
@@ -11,16 +11,16 @@ import pandas as pd
...
@@ -11,16 +11,16 @@ import pandas as pd
from
alphamind.data.neutralize
import
neutralize
from
alphamind.data.neutralize
import
neutralize
def
risk_analysis
(
return_series
:
pd
.
Series
,
def
risk_analysis
(
net_weight_series
:
pd
.
Series
,
risk_return_table
:
pd
.
DataFrame
)
->
Tuple
[
pd
.
DataFrame
,
pd
.
DataFrame
]:
next_bar_return_series
:
pd
.
Series
,
risk_table
:
pd
.
DataFrame
)
->
Tuple
[
pd
.
DataFrame
,
pd
.
DataFrame
]:
group_idx
=
return_series
.
index
.
values
.
astype
(
int
)
group_idx
=
net_weight_series
.
index
.
values
.
astype
(
int
)
return_values
=
return_series
.
values
net_pos
=
net_weight_series
.
values
.
reshape
((
-
1
,
1
))
risk_return_values
=
risk_return_table
.
values
risk_factor_cols
=
risk_table
.
columns
risk_factor_cols
=
risk_return_table
.
columns
idiosyncratic
,
other_stats
=
neutralize
(
risk_
return_
values
,
idiosyncratic
,
other_stats
=
neutralize
(
risk_
table
.
values
,
return_
values
,
next_bar_return_series
.
values
,
group_idx
,
group_idx
,
output_exposure
=
True
,
output_exposure
=
True
,
output_explained
=
True
)
output_explained
=
True
)
...
@@ -32,25 +32,27 @@ def risk_analysis(return_series: pd.Series,
...
@@ -32,25 +32,27 @@ def risk_analysis(return_series: pd.Series,
cols
=
[
'idiosyncratic'
]
cols
=
[
'idiosyncratic'
]
cols
.
extend
(
risk_factor_cols
)
cols
.
extend
(
risk_factor_cols
)
explained_table
=
pd
.
DataFrame
(
explained_table
,
columns
=
cols
,
index
=
return
_series
.
index
)
explained_table
=
pd
.
DataFrame
(
explained_table
*
net_pos
,
columns
=
cols
,
index
=
net_weight
_series
.
index
)
exposure_table
=
pd
.
DataFrame
(
exposure
[:,
:,
0
]
,
columns
=
risk_factor_cols
,
index
=
return
_series
.
index
)
exposure_table
=
pd
.
DataFrame
(
exposure
[:,
:,
0
]
*
net_pos
,
columns
=
risk_factor_cols
,
index
=
net_weight
_series
.
index
)
return
explained_table
,
exposure_table
.
groupby
(
level
=
0
)
.
first
()
return
explained_table
,
exposure_table
.
groupby
(
level
=
0
)
.
first
()
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
from
matplotlib
import
pyplot
as
plt
from
matplotlib
import
pyplot
as
plt
n_samples
=
36000
0
n_samples
=
36000
n_dates
=
20
0
n_dates
=
20
n_risk_factors
=
35
n_risk_factors
=
35
dates
=
np
.
sort
(
np
.
random
.
randint
(
n_dates
,
size
=
n_samples
))
dates
=
np
.
sort
(
np
.
random
.
randint
(
n_dates
,
size
=
n_samples
))
return_series
=
pd
.
Series
(
data
=
np
.
random
.
randn
(
n_samples
),
index
=
dates
)
weights_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
),
bm_series
=
pd
.
Series
(
data
=
np
.
random
.
randn
(
n_samples
),
index
=
dates
)
columns
=
list
(
range
(
n_risk_factors
)),
next_bar_return_series
=
pd
.
Series
(
data
=
np
.
random
.
randn
(
n_samples
),
index
=
dates
)
index
=
dates
)
risk_table
=
pd
.
DataFrame
(
data
=
np
.
random
.
randn
(
n_samples
,
n_risk_factors
),
columns
=
list
(
range
(
n_risk_factors
)),
explained_table
,
exposure_table
=
risk_analysis
(
return_series
,
risk_return_table
)
index
=
dates
)
explained_table
,
exposure_table
=
risk_analysis
(
weights_series
-
bm_series
,
next_bar_return_series
,
risk_table
)
aggregated_bars
=
explained_table
.
groupby
(
level
=
0
)
.
sum
()
aggregated_bars
=
explained_table
.
groupby
(
level
=
0
)
.
sum
()
top_sources
=
aggregated_bars
.
sum
()
.
abs
()
.
sort_values
(
ascending
=
False
)
.
index
[:
10
]
top_sources
=
aggregated_bars
.
sum
()
.
abs
()
.
sort_values
(
ascending
=
False
)
.
index
[:
10
]
...
...
alphamind/tests/analysis/__init__.py
0 → 100644
View file @
c53b8804
# -*- coding: utf-8 -*-
"""
Created on 2017-5-8
@author: cheng.li
"""
alphamind/tests/analysis/test_riskanalysis.py
0 → 100644
View file @
c53b8804
# -*- coding: utf-8 -*-
"""
Created on 2017-5-8
@author: cheng.li
"""
from
alphamind.analysis.riskanalysis
import
risk_analysis
notebooks/factor analysis.ipynb
View file @
c53b8804
This diff is collapsed.
Click to expand it.
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