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
4faceefc
Commit
4faceefc
authored
May 10, 2017
by
Dr.李
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
reformat codes
parent
39930004
Changes
13
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
143 additions
and
188 deletions
+143
-188
benchmarks.py
alphamind/benchmarks/benchmarks.py
+2
-2
linearbuilder.py
alphamind/portfolio/linearbuilder.py
+3
-16
percentbuilder.py
alphamind/portfolio/percentbuilder.py
+1
-1
rankbuilder.py
alphamind/portfolio/rankbuilder.py
+1
-1
test_riskanalysis.py
alphamind/tests/analysis/test_riskanalysis.py
+3
-2
test_neutralize.py
alphamind/tests/data/test_neutralize.py
+34
-45
test_standardize.py
alphamind/tests/data/test_standardize.py
+10
-10
test_winsorize.py
alphamind/tests/data/test_winsorize.py
+15
-18
test_linearbuild.py
alphamind/tests/portfolio/test_linearbuild.py
+9
-8
test_longshortbuild.py
alphamind/tests/portfolio/test_longshortbuild.py
+12
-18
test_percentbuild.py
alphamind/tests/portfolio/test_percentbuild.py
+15
-19
test_rankbuild.py
alphamind/tests/portfolio/test_rankbuild.py
+14
-19
test_simplesettle.py
alphamind/tests/settlement/test_simplesettle.py
+24
-29
No files found.
alphamind/benchmarks/benchmarks.py
View file @
4faceefc
...
@@ -52,8 +52,8 @@ if __name__ == '__main__':
...
@@ -52,8 +52,8 @@ if __name__ == '__main__':
benchmark_build_percent_with_group
(
30
,
50000
,
0.1
,
3
)
benchmark_build_percent_with_group
(
30
,
50000
,
0.1
,
3
)
benchmark_build_percent
(
50000
,
20
,
0.1
)
benchmark_build_percent
(
50000
,
20
,
0.1
)
benchmark_build_percent_with_group
(
50000
,
20
,
0.1
,
300
)
benchmark_build_percent_with_group
(
50000
,
20
,
0.1
,
300
)
benchmark_build_linear
(
100
,
3
,
3
,
100
)
benchmark_build_linear
(
100
,
3
,
100
)
benchmark_build_linear
(
1000
,
30
,
30
,
10
)
benchmark_build_linear
(
1000
,
30
,
10
)
benchmark_simple_settle
(
3000
,
10
,
1000
)
benchmark_simple_settle
(
3000
,
10
,
1000
)
benchmark_simple_settle_with_group
(
3000
,
10
,
1000
,
30
)
benchmark_simple_settle_with_group
(
3000
,
10
,
1000
,
30
)
benchmark_simple_settle
(
30
,
10
,
50000
)
benchmark_simple_settle
(
30
,
10
,
50000
)
...
...
alphamind/portfolio/linearbuilder.py
View file @
4faceefc
...
@@ -7,6 +7,7 @@ Created on 2017-5-5
...
@@ -7,6 +7,7 @@ Created on 2017-5-5
import
numpy
as
np
import
numpy
as
np
from
typing
import
Tuple
from
typing
import
Tuple
from
typing
import
Union
import
cvxpy
import
cvxpy
from
cvxopt
import
solvers
from
cvxopt
import
solvers
...
@@ -15,8 +16,8 @@ solvers.options['glpk'] = {'msg_lev': 'GLP_MSG_OFF'}
...
@@ -15,8 +16,8 @@ solvers.options['glpk'] = {'msg_lev': 'GLP_MSG_OFF'}
def
linear_build
(
er
:
np
.
ndarray
,
def
linear_build
(
er
:
np
.
ndarray
,
lbound
:
np
.
ndarray
,
lbound
:
Union
[
np
.
ndarray
,
float
]
,
ubound
:
np
.
ndarray
,
ubound
:
Union
[
np
.
ndarray
,
float
]
,
risk_exposure
:
np
.
ndarray
,
risk_exposure
:
np
.
ndarray
,
bm
:
np
.
ndarray
,
bm
:
np
.
ndarray
,
risk_target
:
Tuple
[
np
.
ndarray
,
np
.
ndarray
]
=
None
,
risk_target
:
Tuple
[
np
.
ndarray
,
np
.
ndarray
]
=
None
,
...
@@ -43,17 +44,3 @@ def linear_build(er: np.ndarray,
...
@@ -43,17 +44,3 @@ def linear_build(er: np.ndarray,
prob
=
cvxpy
.
Problem
(
objective
,
constraints
)
prob
=
cvxpy
.
Problem
(
objective
,
constraints
)
prob
.
solve
(
solver
=
solver
)
prob
.
solve
(
solver
=
solver
)
return
prob
.
status
,
prob
.
value
,
np
.
array
(
w
.
value
)
.
flatten
()
return
prob
.
status
,
prob
.
value
,
np
.
array
(
w
.
value
)
.
flatten
()
if
__name__
==
'__main__'
:
er
=
np
.
arange
(
300
)
bm
=
np
.
ones
(
300
)
*
0.00333333333
risk_exposure
=
np
.
random
.
randn
(
300
,
10
)
s
,
v
,
x
=
linear_build
(
er
,
0.
,
0.01
,
risk_exposure
,
bm
,
(
-
0.01
*
np
.
ones
(
10
),
0.01
*
np
.
ones
(
10
)))
print
(
s
)
print
(
x
.
sum
())
print
(
x
.
min
(),
','
,
x
.
max
())
print
((
x
-
bm
)
@
risk_exposure
)
alphamind/portfolio/percentbuilder.py
View file @
4faceefc
...
@@ -15,7 +15,7 @@ from alphamind.utilities import set_value
...
@@ -15,7 +15,7 @@ from alphamind.utilities import set_value
def
percent_build
(
er
:
np
.
ndarray
,
percent
:
float
,
groups
:
np
.
ndarray
=
None
)
->
np
.
ndarray
:
def
percent_build
(
er
:
np
.
ndarray
,
percent
:
float
,
groups
:
np
.
ndarray
=
None
)
->
np
.
ndarray
:
if
er
.
ndim
==
1
or
(
er
.
shape
[
0
]
==
1
or
er
.
shape
[
1
]
==
1
):
if
er
.
ndim
==
1
or
(
er
.
shape
[
0
]
==
1
or
er
.
shape
[
1
]
==
1
):
""" fast path methods for single column er"""
# fast path methods for single column er
neg_er
=
-
er
.
flatten
()
neg_er
=
-
er
.
flatten
()
length
=
len
(
neg_er
)
length
=
len
(
neg_er
)
weights
=
zeros
((
length
,
1
))
weights
=
zeros
((
length
,
1
))
...
...
alphamind/portfolio/rankbuilder.py
View file @
4faceefc
...
@@ -15,7 +15,7 @@ from alphamind.utilities import set_value
...
@@ -15,7 +15,7 @@ from alphamind.utilities import set_value
def
rank_build
(
er
:
np
.
ndarray
,
use_rank
:
int
,
groups
:
np
.
ndarray
=
None
)
->
np
.
ndarray
:
def
rank_build
(
er
:
np
.
ndarray
,
use_rank
:
int
,
groups
:
np
.
ndarray
=
None
)
->
np
.
ndarray
:
if
er
.
ndim
==
1
or
(
er
.
shape
[
0
]
==
1
or
er
.
shape
[
1
]
==
1
):
if
er
.
ndim
==
1
or
(
er
.
shape
[
0
]
==
1
or
er
.
shape
[
1
]
==
1
):
""" fast path methods for single column er"""
# fast path methods for single column er
neg_er
=
-
er
.
flatten
()
neg_er
=
-
er
.
flatten
()
length
=
len
(
neg_er
)
length
=
len
(
neg_er
)
weights
=
zeros
((
length
,
1
))
weights
=
zeros
((
length
,
1
))
...
...
alphamind/tests/analysis/test_riskanalysis.py
View file @
4faceefc
...
@@ -13,7 +13,8 @@ from alphamind.analysis.riskanalysis import risk_analysis
...
@@ -13,7 +13,8 @@ from alphamind.analysis.riskanalysis import risk_analysis
class
TestRiskAnalysis
(
unittest
.
TestCase
):
class
TestRiskAnalysis
(
unittest
.
TestCase
):
def
test_risk_analysis
(
self
):
@
classmethod
def
test_risk_analysis
(
cls
):
n_samples
=
36000
n_samples
=
36000
n_dates
=
20
n_dates
=
20
n_risk_factors
=
35
n_risk_factors
=
35
...
@@ -26,7 +27,7 @@ class TestRiskAnalysis(unittest.TestCase):
...
@@ -26,7 +27,7 @@ class TestRiskAnalysis(unittest.TestCase):
columns
=
list
(
range
(
n_risk_factors
)),
columns
=
list
(
range
(
n_risk_factors
)),
index
=
dates
)
index
=
dates
)
explained_table
,
exposure_table
=
risk_analysis
(
weights_series
-
bm_series
,
explained_table
,
_
=
risk_analysis
(
weights_series
-
bm_series
,
next_bar_return_series
,
next_bar_return_series
,
risk_table
)
risk_table
)
...
...
alphamind/tests/data/test_neutralize.py
View file @
4faceefc
...
@@ -13,98 +13,87 @@ from alphamind.data.neutralize import neutralize
...
@@ -13,98 +13,87 @@ from alphamind.data.neutralize import neutralize
class
TestNeutralize
(
unittest
.
TestCase
):
class
TestNeutralize
(
unittest
.
TestCase
):
def
test_neutralize
(
self
):
def
setUp
(
self
):
self
.
y
=
np
.
random
.
randn
(
3000
,
4
)
y
=
np
.
random
.
randn
(
3000
,
4
)
self
.
x
=
np
.
random
.
randn
(
3000
,
10
)
x
=
np
.
random
.
randn
(
3000
,
1
0
)
self
.
groups
=
np
.
random
.
randint
(
30
,
size
=
300
0
)
calc_res
=
neutralize
(
x
,
y
)
def
test_neutralize
(
self
):
calc_res
=
neutralize
(
self
.
x
,
self
.
y
)
model
=
LinearRegression
(
fit_intercept
=
False
)
model
=
LinearRegression
(
fit_intercept
=
False
)
model
.
fit
(
x
,
y
)
model
.
fit
(
self
.
x
,
self
.
y
)
exp_res
=
y
-
x
@
model
.
coef_
.
T
exp_res
=
self
.
y
-
self
.
x
@
model
.
coef_
.
T
np
.
testing
.
assert_array_almost_equal
(
calc_res
,
exp_res
)
np
.
testing
.
assert_array_almost_equal
(
calc_res
,
exp_res
)
def
test_neutralize_with_group
(
self
):
def
test_neutralize_with_group
(
self
):
y
=
np
.
random
.
randn
(
3000
,
4
)
x
=
np
.
random
.
randn
(
3000
,
10
)
groups
=
np
.
random
.
randint
(
30
,
size
=
3000
)
calc_res
=
neutralize
(
x
,
y
,
groups
)
calc_res
=
neutralize
(
self
.
x
,
self
.
y
,
self
.
groups
)
model
=
LinearRegression
(
fit_intercept
=
False
)
model
=
LinearRegression
(
fit_intercept
=
False
)
for
i
in
range
(
30
):
for
i
in
range
(
30
):
curr_x
=
x
[
groups
==
i
]
curr_x
=
self
.
x
[
self
.
groups
==
i
]
curr_y
=
y
[
groups
==
i
]
curr_y
=
self
.
y
[
self
.
groups
==
i
]
model
.
fit
(
curr_x
,
curr_y
)
model
.
fit
(
curr_x
,
curr_y
)
exp_res
=
curr_y
-
curr_x
@
model
.
coef_
.
T
exp_res
=
curr_y
-
curr_x
@
model
.
coef_
.
T
np
.
testing
.
assert_array_almost_equal
(
calc_res
[
groups
==
i
],
exp_res
)
np
.
testing
.
assert_array_almost_equal
(
calc_res
[
self
.
groups
==
i
],
exp_res
)
def
test_neutralize_explain_output
(
self
):
def
test_neutralize_explain_output
(
self
):
y
=
np
.
random
.
randn
(
3000
)
y
=
self
.
y
[:,
0
]
.
flatten
()
x
=
np
.
random
.
randn
(
3000
,
10
)
calc_res
,
other_stats
=
neutralize
(
x
,
y
,
output_explained
=
True
)
calc_res
,
other_stats
=
neutralize
(
self
.
x
,
y
,
output_explained
=
True
)
model
=
LinearRegression
(
fit_intercept
=
False
)
model
=
LinearRegression
(
fit_intercept
=
False
)
model
.
fit
(
x
,
y
)
model
.
fit
(
self
.
x
,
y
)
exp_res
=
y
-
x
@
model
.
coef_
.
T
exp_res
=
y
-
self
.
x
@
model
.
coef_
.
T
exp_explained
=
x
*
model
.
coef_
.
T
exp_explained
=
self
.
x
*
model
.
coef_
.
T
np
.
testing
.
assert_array_almost_equal
(
calc_res
,
exp_res
.
reshape
(
-
1
,
1
))
np
.
testing
.
assert_array_almost_equal
(
calc_res
,
exp_res
.
reshape
(
-
1
,
1
))
np
.
testing
.
assert_array_almost_equal
(
other_stats
[
'explained'
][:,
:,
0
],
exp_explained
)
np
.
testing
.
assert_array_almost_equal
(
other_stats
[
'explained'
][:,
:,
0
],
exp_explained
)
y
=
np
.
random
.
randn
(
3000
,
4
)
calc_res
,
other_stats
=
neutralize
(
self
.
x
,
self
.
y
,
output_explained
=
True
)
x
=
np
.
random
.
randn
(
3000
,
10
)
calc_res
,
other_stats
=
neutralize
(
x
,
y
,
output_explained
=
True
)
model
=
LinearRegression
(
fit_intercept
=
False
)
model
=
LinearRegression
(
fit_intercept
=
False
)
model
.
fit
(
x
,
y
)
model
.
fit
(
self
.
x
,
self
.
y
)
exp_res
=
y
-
x
@
model
.
coef_
.
T
exp_res
=
self
.
y
-
self
.
x
@
model
.
coef_
.
T
np
.
testing
.
assert_array_almost_equal
(
calc_res
,
exp_res
)
np
.
testing
.
assert_array_almost_equal
(
calc_res
,
exp_res
)
for
i
in
range
(
y
.
shape
[
1
]):
for
i
in
range
(
self
.
y
.
shape
[
1
]):
exp_explained
=
x
*
model
.
coef_
.
T
[:,
i
]
exp_explained
=
self
.
x
*
model
.
coef_
.
T
[:,
i
]
np
.
testing
.
assert_array_almost_equal
(
other_stats
[
'explained'
][:,
:,
i
],
exp_explained
)
np
.
testing
.
assert_array_almost_equal
(
other_stats
[
'explained'
][:,
:,
i
],
exp_explained
)
def
test_neutralize_explain_output_with_group
(
self
):
def
test_neutralize_explain_output_with_group
(
self
):
y
=
np
.
random
.
randn
(
3000
)
y
=
self
.
y
[:,
0
]
.
flatten
()
x
=
np
.
random
.
randn
(
3000
,
10
)
groups
=
np
.
random
.
randint
(
30
,
size
=
3000
)
calc_res
,
other_stats
=
neutralize
(
x
,
y
,
groups
,
output_explained
=
True
)
calc_res
,
other_stats
=
neutralize
(
self
.
x
,
y
,
self
.
groups
,
output_explained
=
True
)
model
=
LinearRegression
(
fit_intercept
=
False
)
model
=
LinearRegression
(
fit_intercept
=
False
)
for
i
in
range
(
30
):
for
i
in
range
(
30
):
curr_x
=
x
[
groups
==
i
]
curr_x
=
self
.
x
[
self
.
groups
==
i
]
curr_y
=
y
[
groups
==
i
]
curr_y
=
y
[
self
.
groups
==
i
]
model
.
fit
(
curr_x
,
curr_y
)
model
.
fit
(
curr_x
,
curr_y
)
exp_res
=
curr_y
-
curr_x
@
model
.
coef_
.
T
exp_res
=
curr_y
-
curr_x
@
model
.
coef_
.
T
exp_explained
=
curr_x
*
model
.
coef_
.
T
exp_explained
=
curr_x
*
model
.
coef_
.
T
np
.
testing
.
assert_array_almost_equal
(
calc_res
[
groups
==
i
],
exp_res
.
reshape
(
-
1
,
1
))
np
.
testing
.
assert_array_almost_equal
(
calc_res
[
self
.
groups
==
i
],
exp_res
.
reshape
(
-
1
,
1
))
np
.
testing
.
assert_array_almost_equal
(
other_stats
[
'explained'
][
groups
==
i
,
:,
0
],
exp_explained
)
np
.
testing
.
assert_array_almost_equal
(
other_stats
[
'explained'
][
self
.
groups
==
i
,
:,
0
],
exp_explained
)
y
=
np
.
random
.
randn
(
3000
,
4
)
x
=
np
.
random
.
randn
(
3000
,
10
)
calc_res
,
other_stats
=
neutralize
(
x
,
y
,
groups
,
output_explained
=
True
)
calc_res
,
other_stats
=
neutralize
(
self
.
x
,
self
.
y
,
self
.
groups
,
output_explained
=
True
)
model
=
LinearRegression
(
fit_intercept
=
False
)
model
=
LinearRegression
(
fit_intercept
=
False
)
for
i
in
range
(
30
):
for
i
in
range
(
30
):
curr_x
=
x
[
groups
==
i
]
curr_x
=
self
.
x
[
self
.
groups
==
i
]
curr_y
=
y
[
groups
==
i
]
curr_y
=
self
.
y
[
self
.
groups
==
i
]
model
.
fit
(
curr_x
,
curr_y
)
model
.
fit
(
curr_x
,
curr_y
)
exp_res
=
curr_y
-
curr_x
@
model
.
coef_
.
T
exp_res
=
curr_y
-
curr_x
@
model
.
coef_
.
T
np
.
testing
.
assert_array_almost_equal
(
calc_res
[
groups
==
i
],
exp_res
)
np
.
testing
.
assert_array_almost_equal
(
calc_res
[
self
.
groups
==
i
],
exp_res
)
for
j
in
range
(
y
.
shape
[
1
]):
for
j
in
range
(
self
.
y
.
shape
[
1
]):
exp_explained
=
curr_x
*
model
.
coef_
.
T
[:,
j
]
exp_explained
=
curr_x
*
model
.
coef_
.
T
[:,
j
]
np
.
testing
.
assert_array_almost_equal
(
other_stats
[
'explained'
][
groups
==
i
,
:,
j
],
exp_explained
)
np
.
testing
.
assert_array_almost_equal
(
other_stats
[
'explained'
][
self
.
groups
==
i
,
:,
j
],
exp_explained
)
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
...
...
alphamind/tests/data/test_standardize.py
View file @
4faceefc
...
@@ -14,21 +14,21 @@ from alphamind.data.standardize import standardize
...
@@ -14,21 +14,21 @@ from alphamind.data.standardize import standardize
class
TestStandardize
(
unittest
.
TestCase
):
class
TestStandardize
(
unittest
.
TestCase
):
def
test_standardize
(
self
):
def
setUp
(
self
):
self
.
x
=
np
.
random
.
randn
(
3000
,
10
)
x
=
np
.
random
.
randn
(
3000
,
1
0
)
self
.
groups
=
np
.
random
.
randint
(
10
,
30
,
size
=
300
0
)
calc_zscore
=
standardize
(
x
)
def
test_standardize
(
self
):
exp_zscore
=
zscore
(
x
,
ddof
=
1
)
calc_zscore
=
standardize
(
self
.
x
)
exp_zscore
=
zscore
(
self
.
x
,
ddof
=
1
)
np
.
testing
.
assert_array_almost_equal
(
calc_zscore
,
exp_zscore
)
np
.
testing
.
assert_array_almost_equal
(
calc_zscore
,
exp_zscore
)
def
test_standardize_with_group
(
self
):
def
test_standardize_with_group
(
self
):
x
=
np
.
random
.
randn
(
3000
,
10
)
calc_zscore
=
standardize
(
self
.
x
,
self
.
groups
)
groups
=
np
.
random
.
randint
(
10
,
30
,
size
=
3000
)
exp_zscore
=
pd
.
DataFrame
(
self
.
x
)
.
\
groupby
(
self
.
groups
)
.
\
calc_zscore
=
standardize
(
x
,
groups
)
transform
(
lambda
s
:
(
s
-
s
.
mean
(
axis
=
0
))
/
s
.
std
(
axis
=
0
,
ddof
=
1
))
exp_zscore
=
pd
.
DataFrame
(
x
)
.
groupby
(
groups
)
.
transform
(
lambda
s
:
(
s
-
s
.
mean
(
axis
=
0
))
/
s
.
std
(
axis
=
0
,
ddof
=
1
))
np
.
testing
.
assert_array_almost_equal
(
calc_zscore
,
exp_zscore
)
np
.
testing
.
assert_array_almost_equal
(
calc_zscore
,
exp_zscore
)
...
...
alphamind/tests/data/test_winsorize.py
View file @
4faceefc
...
@@ -13,21 +13,22 @@ from alphamind.data.winsorize import winsorize_normal
...
@@ -13,21 +13,22 @@ from alphamind.data.winsorize import winsorize_normal
class
TestWinsorize
(
unittest
.
TestCase
):
class
TestWinsorize
(
unittest
.
TestCase
):
def
test_winsorize_normal
(
self
):
def
setUp
(
self
):
num_stds
=
2
self
.
x
=
np
.
random
.
randn
(
3000
,
10
)
self
.
groups
=
np
.
random
.
randint
(
10
,
30
,
size
=
3000
)
x
=
np
.
random
.
randn
(
3000
,
10
)
self
.
num_stds
=
2
calc_winsorized
=
winsorize_normal
(
x
,
num_stds
)
def
test_winsorize_normal
(
self
):
calc_winsorized
=
winsorize_normal
(
self
.
x
,
self
.
num_stds
)
std_values
=
x
.
std
(
axis
=
0
,
ddof
=
1
)
std_values
=
self
.
x
.
std
(
axis
=
0
,
ddof
=
1
)
mean_value
=
x
.
mean
(
axis
=
0
)
mean_value
=
self
.
x
.
mean
(
axis
=
0
)
lower_bound
=
mean_value
-
num_stds
*
std_values
lower_bound
=
mean_value
-
self
.
num_stds
*
std_values
upper_bound
=
mean_value
+
num_stds
*
std_values
upper_bound
=
mean_value
+
self
.
num_stds
*
std_values
for
i
in
range
(
np
.
size
(
calc_winsorized
,
1
)):
for
i
in
range
(
np
.
size
(
calc_winsorized
,
1
)):
col_data
=
x
[:,
i
]
col_data
=
self
.
x
[:,
i
]
col_data
[
col_data
>
upper_bound
[
i
]]
=
upper_bound
[
i
]
col_data
[
col_data
>
upper_bound
[
i
]]
=
upper_bound
[
i
]
col_data
[
col_data
<
lower_bound
[
i
]]
=
lower_bound
[
i
]
col_data
[
col_data
<
lower_bound
[
i
]]
=
lower_bound
[
i
]
...
@@ -35,24 +36,20 @@ class TestWinsorize(unittest.TestCase):
...
@@ -35,24 +36,20 @@ class TestWinsorize(unittest.TestCase):
np
.
testing
.
assert_array_almost_equal
(
col_data
,
calculated_col
)
np
.
testing
.
assert_array_almost_equal
(
col_data
,
calculated_col
)
def
test_winsorize_normal_with_group
(
self
):
def
test_winsorize_normal_with_group
(
self
):
num_stds
=
2
cal_winsorized
=
winsorize_normal
(
self
.
x
,
self
.
num_stds
,
self
.
groups
)
x
=
np
.
random
.
randn
(
3000
,
10
)
groups
=
np
.
random
.
randint
(
10
,
30
,
size
=
3000
)
cal_winsorized
=
winsorize_normal
(
x
,
num_stds
,
groups
)
def
impl
(
x
):
def
impl
(
x
):
std_values
=
x
.
std
(
axis
=
0
,
ddof
=
1
)
std_values
=
x
.
std
(
axis
=
0
,
ddof
=
1
)
mean_value
=
x
.
mean
(
axis
=
0
)
mean_value
=
x
.
mean
(
axis
=
0
)
lower_bound
=
mean_value
-
num_stds
*
std_values
lower_bound
=
mean_value
-
self
.
num_stds
*
std_values
upper_bound
=
mean_value
+
num_stds
*
std_values
upper_bound
=
mean_value
+
self
.
num_stds
*
std_values
res
=
np
.
where
(
x
>
upper_bound
,
upper_bound
,
x
)
res
=
np
.
where
(
x
>
upper_bound
,
upper_bound
,
x
)
res
=
np
.
where
(
res
<
lower_bound
,
lower_bound
,
res
)
res
=
np
.
where
(
res
<
lower_bound
,
lower_bound
,
res
)
return
res
return
res
exp_winsorized
=
pd
.
DataFrame
(
x
)
.
groupby
(
groups
)
.
transform
(
impl
)
.
values
exp_winsorized
=
pd
.
DataFrame
(
self
.
x
)
.
groupby
(
self
.
groups
)
.
transform
(
impl
)
.
values
np
.
testing
.
assert_array_almost_equal
(
cal_winsorized
,
exp_winsorized
)
np
.
testing
.
assert_array_almost_equal
(
cal_winsorized
,
exp_winsorized
)
...
...
alphamind/tests/portfolio/test_linearbuild.py
View file @
4faceefc
...
@@ -12,22 +12,23 @@ from alphamind.portfolio.linearbuilder import linear_build
...
@@ -12,22 +12,23 @@ from alphamind.portfolio.linearbuilder import linear_build
class
TestLinearBuild
(
unittest
.
TestCase
):
class
TestLinearBuild
(
unittest
.
TestCase
):
def
test_linear_build
(
self
):
def
setUp
(
self
):
self
.
er
=
np
.
random
.
randn
(
3000
)
self
.
risk_exp
=
np
.
random
.
randn
(
3000
,
30
)
self
.
bm
=
np
.
random
.
randint
(
100
,
size
=
3000
)
.
astype
(
float
)
er
=
np
.
random
.
randn
(
3000
)
def
test_linear_build
(
self
):
risk_exp
=
np
.
random
.
randn
(
3000
,
30
)
bm
=
self
.
bm
/
self
.
bm
.
sum
()
bm
=
np
.
random
.
randint
(
100
,
size
=
3000
)
.
astype
(
float
)
bm
/=
bm
.
sum
()
eplson
=
1e-6
eplson
=
1e-6
status
,
value
,
w
=
linear_build
(
er
,
0.
,
0.01
,
risk_exp
,
bm
)
status
,
value
,
w
=
linear_build
(
self
.
er
,
0.
,
0.01
,
self
.
risk_exp
,
bm
)
self
.
assertEqual
(
status
,
'optimal'
)
self
.
assertEqual
(
status
,
'optimal'
)
self
.
assertAlmostEqual
(
np
.
sum
(
w
),
1.
)
self
.
assertAlmostEqual
(
np
.
sum
(
w
),
1.
)
self
.
assertTrue
(
np
.
all
(
w
<=
0.01
+
eplson
))
self
.
assertTrue
(
np
.
all
(
w
<=
0.01
+
eplson
))
self
.
assertTrue
(
np
.
all
(
w
>=
-
eplson
))
self
.
assertTrue
(
np
.
all
(
w
>=
-
eplson
))
calc_risk
=
(
w
-
bm
)
@
risk_exp
calc_risk
=
(
w
-
bm
)
@
self
.
risk_exp
expected_risk
=
np
.
zeros
(
risk_exp
.
shape
[
1
])
expected_risk
=
np
.
zeros
(
self
.
risk_exp
.
shape
[
1
])
np
.
testing
.
assert_array_almost_equal
(
calc_risk
,
expected_risk
)
np
.
testing
.
assert_array_almost_equal
(
calc_risk
,
expected_risk
)
...
...
alphamind/tests/portfolio/test_longshortbuild.py
View file @
4faceefc
...
@@ -13,34 +13,28 @@ from alphamind.portfolio.longshortbulder import long_short_build
...
@@ -13,34 +13,28 @@ from alphamind.portfolio.longshortbulder import long_short_build
class
TestLongShortBuild
(
unittest
.
TestCase
):
class
TestLongShortBuild
(
unittest
.
TestCase
):
def
test_long_short_build
(
self
):
def
setUp
(
self
):
self
.
x
=
np
.
random
.
randn
(
3000
,
10
)
self
.
groups
=
np
.
random
.
randint
(
10
,
40
,
size
=
3000
)
x
=
np
.
random
.
randn
(
3000
)
def
test_long_short_build
(
self
):
x
=
self
.
x
[:,
0
]
.
flatten
()
calc_weights
=
long_short_build
(
x
)
.
flatten
()
calc_weights
=
long_short_build
(
x
)
.
flatten
()
expected_weights
=
x
/
np
.
abs
(
x
)
.
sum
()
expected_weights
=
x
/
np
.
abs
(
x
)
.
sum
()
np
.
testing
.
assert_array_almost_equal
(
calc_weights
,
expected_weights
)
np
.
testing
.
assert_array_almost_equal
(
calc_weights
,
expected_weights
)
x
=
np
.
random
.
randn
(
3000
,
10
)
calc_weights
=
long_short_build
(
self
.
x
,
leverage
=
2
)
calc_weights
=
long_short_build
(
x
,
leverage
=
2
)
expected_weights
=
self
.
x
/
np
.
abs
(
self
.
x
)
.
sum
(
axis
=
0
)
*
2
expected_weights
=
x
/
np
.
abs
(
x
)
.
sum
(
axis
=
0
)
*
2
np
.
testing
.
assert_array_almost_equal
(
calc_weights
,
expected_weights
)
np
.
testing
.
assert_array_almost_equal
(
calc_weights
,
expected_weights
)
def
test_long_short_build_with_group
(
self
):
def
test_long_short_build_with_group
(
self
):
x
=
self
.
x
[:,
0
]
.
flatten
()
x
=
np
.
random
.
randn
(
3000
)
calc_weights
=
long_short_build
(
x
,
groups
=
self
.
groups
)
.
flatten
()
groups
=
np
.
random
.
randint
(
10
,
40
,
size
=
3000
)
expected_weights
=
pd
.
Series
(
x
)
.
groupby
(
self
.
groups
)
.
apply
(
lambda
s
:
s
/
np
.
abs
(
s
)
.
sum
())
calc_weights
=
long_short_build
(
x
,
groups
=
groups
)
.
flatten
()
expected_weights
=
pd
.
Series
(
x
)
.
groupby
(
groups
)
.
apply
(
lambda
s
:
s
/
np
.
abs
(
s
)
.
sum
())
np
.
testing
.
assert_array_almost_equal
(
calc_weights
,
expected_weights
)
np
.
testing
.
assert_array_almost_equal
(
calc_weights
,
expected_weights
)
x
=
np
.
random
.
randn
(
3000
,
10
)
calc_weights
=
long_short_build
(
self
.
x
,
groups
=
self
.
groups
)
groups
=
np
.
random
.
randint
(
10
,
40
,
size
=
3000
)
expected_weights
=
pd
.
DataFrame
(
self
.
x
)
.
groupby
(
self
.
groups
)
.
apply
(
lambda
s
:
s
/
np
.
abs
(
s
)
.
sum
(
axis
=
0
))
calc_weights
=
long_short_build
(
x
,
groups
=
groups
)
expected_weights
=
pd
.
DataFrame
(
x
)
.
groupby
(
groups
)
.
apply
(
lambda
s
:
s
/
np
.
abs
(
s
)
.
sum
(
axis
=
0
))
np
.
testing
.
assert_array_almost_equal
(
calc_weights
,
expected_weights
)
np
.
testing
.
assert_array_almost_equal
(
calc_weights
,
expected_weights
)
...
...
alphamind/tests/portfolio/test_percentbuild.py
View file @
4faceefc
...
@@ -13,17 +13,19 @@ from alphamind.portfolio.percentbuilder import percent_build
...
@@ -13,17 +13,19 @@ from alphamind.portfolio.percentbuilder import percent_build
class
TestPercentBuild
(
unittest
.
TestCase
):
class
TestPercentBuild
(
unittest
.
TestCase
):
def
test_percent_build
(
self
):
def
setUp
(
self
):
n_samples
=
3000
self
.
n_samples
=
3000
p_included
=
0.1
self
.
p_included
=
0.1
self
.
n_groups
=
30
self
.
n_portfolios
=
range
(
1
,
10
)
n_portfolios
=
range
(
1
,
10
)
def
test_percent_build
(
self
):
n_include
=
int
(
n_samples
*
p_included
)
n_include
=
int
(
self
.
n_samples
*
self
.
p_included
)
for
n_portfolio
in
n_portfolios
:
for
n_portfolio
in
self
.
n_portfolios
:
x
=
np
.
random
.
randn
(
n_samples
,
n_portfolio
)
x
=
np
.
random
.
randn
(
self
.
n_samples
,
n_portfolio
)
calc_weights
=
percent_build
(
x
,
p_included
)
calc_weights
=
percent_build
(
x
,
self
.
p_included
)
expected_weights
=
np
.
zeros
((
len
(
x
),
n_portfolio
))
expected_weights
=
np
.
zeros
((
len
(
x
),
n_portfolio
))
...
@@ -35,24 +37,18 @@ class TestPercentBuild(unittest.TestCase):
...
@@ -35,24 +37,18 @@ class TestPercentBuild(unittest.TestCase):
np
.
testing
.
assert_array_almost_equal
(
calc_weights
,
expected_weights
)
np
.
testing
.
assert_array_almost_equal
(
calc_weights
,
expected_weights
)
def
test_percent_build_with_group
(
self
):
def
test_percent_build_with_group
(
self
):
n_samples
=
3000
for
n_portfolio
in
self
.
n_portfolios
:
p_included
=
0.1
n_groups
=
30
n_portfolios
=
range
(
1
,
10
)
for
n_portfolio
in
n_portfolios
:
x
=
np
.
random
.
randn
(
n_samples
,
n_portfolio
)
x
=
np
.
random
.
randn
(
self
.
n_samples
,
n_portfolio
)
groups
=
np
.
random
.
randint
(
n_groups
,
size
=
n_samples
)
groups
=
np
.
random
.
randint
(
self
.
n_groups
,
size
=
self
.
n_samples
)
calc_weights
=
percent_build
(
x
,
p_included
,
groups
)
calc_weights
=
percent_build
(
x
,
self
.
p_included
,
groups
)
grouped_ordering
=
pd
.
DataFrame
(
-
x
)
.
groupby
(
groups
)
.
rank
()
grouped_ordering
=
pd
.
DataFrame
(
-
x
)
.
groupby
(
groups
)
.
rank
()
grouped_count
=
pd
.
DataFrame
(
-
x
)
.
groupby
(
groups
)
.
transform
(
lambda
x
:
x
.
count
())
grouped_count
=
pd
.
DataFrame
(
-
x
)
.
groupby
(
groups
)
.
transform
(
lambda
x
:
x
.
count
())
expected_weights
=
np
.
zeros
((
len
(
x
),
n_portfolio
))
expected_weights
=
np
.
zeros
((
len
(
x
),
n_portfolio
))
n_include
=
(
grouped_count
*
p_included
)
.
astype
(
int
)
n_include
=
(
grouped_count
*
self
.
p_included
)
.
astype
(
int
)
masks
=
(
grouped_ordering
<=
n_include
)
.
values
masks
=
(
grouped_ordering
<=
n_include
)
.
values
for
j
in
range
(
x
.
shape
[
1
]):
for
j
in
range
(
x
.
shape
[
1
]):
expected_weights
[
masks
[:,
j
],
j
]
=
1.
expected_weights
[
masks
[:,
j
],
j
]
=
1.
...
...
alphamind/tests/portfolio/test_rankbuild.py
View file @
4faceefc
...
@@ -13,20 +13,20 @@ from alphamind.portfolio.rankbuilder import rank_build
...
@@ -13,20 +13,20 @@ from alphamind.portfolio.rankbuilder import rank_build
class
TestRankBuild
(
unittest
.
TestCase
):
class
TestRankBuild
(
unittest
.
TestCase
):
def
test_rank_build
(
self
):
def
setUp
(
self
):
self
.
n_samples
=
3000
n_samples
=
3000
self
.
n_included
=
300
n_included
=
300
self
.
n_groups
=
30
self
.
n_portfolio
=
range
(
1
,
10
)
n_portfolios
=
range
(
1
,
10
)
for
n_portfolio
in
n_portfolios
:
def
test_rank_build
(
self
):
x
=
np
.
random
.
randn
(
n_samples
,
n_portfolio
)
for
n_portfolio
in
self
.
n_portfolio
:
x
=
np
.
random
.
randn
(
self
.
n_samples
,
n_portfolio
)
calc_weights
=
rank_build
(
x
,
n_included
)
calc_weights
=
rank_build
(
x
,
self
.
n_included
)
expected_weights
=
np
.
zeros
((
len
(
x
),
n_portfolio
))
expected_weights
=
np
.
zeros
((
len
(
x
),
n_portfolio
))
masks
=
(
-
x
)
.
argsort
(
axis
=
0
)
.
argsort
(
axis
=
0
)
<
n_included
masks
=
(
-
x
)
.
argsort
(
axis
=
0
)
.
argsort
(
axis
=
0
)
<
self
.
n_included
for
j
in
range
(
x
.
shape
[
1
]):
for
j
in
range
(
x
.
shape
[
1
]):
expected_weights
[
masks
[:,
j
],
j
]
=
1.
expected_weights
[
masks
[:,
j
],
j
]
=
1.
...
@@ -34,17 +34,12 @@ class TestRankBuild(unittest.TestCase):
...
@@ -34,17 +34,12 @@ class TestRankBuild(unittest.TestCase):
np
.
testing
.
assert_array_almost_equal
(
calc_weights
,
expected_weights
)
np
.
testing
.
assert_array_almost_equal
(
calc_weights
,
expected_weights
)
def
test_rank_build_with_group
(
self
):
def
test_rank_build_with_group
(
self
):
n_include
=
int
(
self
.
n_included
/
self
.
n_groups
)
n_samples
=
3000
for
n_portfolio
in
self
.
n_portfolio
:
n_include
=
10
n_groups
=
30
n_portfolios
=
range
(
1
,
10
)
for
n_portfolio
in
n_portfolios
:
x
=
np
.
random
.
randn
(
n_samples
,
n_portfolio
)
x
=
np
.
random
.
randn
(
self
.
n_samples
,
n_portfolio
)
groups
=
np
.
random
.
randint
(
n_groups
,
size
=
n_samples
)
groups
=
np
.
random
.
randint
(
self
.
n_groups
,
size
=
self
.
n_samples
)
calc_weights
=
rank_build
(
x
,
n_include
,
groups
)
calc_weights
=
rank_build
(
x
,
n_include
,
groups
)
...
...
alphamind/tests/settlement/test_simplesettle.py
View file @
4faceefc
...
@@ -14,50 +14,45 @@ from alphamind.settlement.simplesettle import simple_settle
...
@@ -14,50 +14,45 @@ from alphamind.settlement.simplesettle import simple_settle
class
TestSimpleSettle
(
unittest
.
TestCase
):
class
TestSimpleSettle
(
unittest
.
TestCase
):
def
test_simples_settle
(
self
):
def
setUp
(
self
):
n_samples
=
3000
self
.
n_samples
=
3000
n_portfolio
=
3
self
.
n_portfolio
=
3
self
.
n_groups
=
30
weights
=
np
.
random
.
randn
(
n_samples
,
n_portfolio
)
self
.
weights
=
np
.
random
.
randn
(
self
.
n_samples
,
ret_series
=
np
.
random
.
randn
(
n_samples
)
self
.
n_portfolio
)
self
.
ret_series
=
np
.
random
.
randn
(
self
.
n_samples
)
self
.
groups
=
np
.
random
.
randint
(
self
.
n_groups
,
size
=
self
.
n_samples
)
calc_ret
=
simple_settle
(
weights
,
ret_series
)
def
test_simples_settle
(
self
):
calc_ret
=
simple_settle
(
self
.
weights
,
self
.
ret_series
)
ret_series
.
shape
=
-
1
,
1
ret_series
=
self
.
ret_series
.
reshape
((
-
1
,
1
))
expected_ret
=
(
weights
*
ret_series
)
.
sum
(
axis
=
0
)
expected_ret
=
(
self
.
weights
*
ret_series
)
.
sum
(
axis
=
0
)
np
.
testing
.
assert_array_almost_equal
(
calc_ret
,
expected_ret
)
np
.
testing
.
assert_array_almost_equal
(
calc_ret
,
expected_ret
)
ret_series
=
np
.
random
.
randn
(
n_samples
,
1
)
ret_series
=
np
.
random
.
randn
(
self
.
n_samples
,
1
)
calc_ret
=
simple_settle
(
weights
,
ret_series
)
calc_ret
=
simple_settle
(
self
.
weights
,
ret_series
)
expected_ret
=
(
weights
*
ret_series
)
.
sum
(
axis
=
0
)
expected_ret
=
(
self
.
weights
*
ret_series
)
.
sum
(
axis
=
0
)
np
.
testing
.
assert_array_almost_equal
(
calc_ret
,
expected_ret
)
np
.
testing
.
assert_array_almost_equal
(
calc_ret
,
expected_ret
)
def
test_simple_settle_with_group
(
self
):
def
test_simple_settle_with_group
(
self
):
n_samples
=
3000
calc_ret
=
simple_settle
(
self
.
weights
,
self
.
ret_series
,
self
.
groups
)
n_portfolio
=
3
n_groups
=
30
weights
=
np
.
random
.
randn
(
n_samples
,
n_portfolio
)
ret_series
=
np
.
random
.
randn
(
n_samples
)
groups
=
np
.
random
.
randint
(
n_groups
,
size
=
n_samples
)
calc_ret
=
simple_settle
(
weights
,
ret_series
,
groups
)
ret_series
.
shape
=
-
1
,
1
ret_series
=
self
.
ret_series
.
reshape
((
-
1
,
1
))
ret_mat
=
weights
*
ret_series
ret_mat
=
self
.
weights
*
ret_series
expected_ret
=
pd
.
DataFrame
(
ret_mat
)
.
groupby
(
groups
)
.
sum
()
.
values
expected_ret
=
pd
.
DataFrame
(
ret_mat
)
.
groupby
(
self
.
groups
)
.
sum
()
.
values
np
.
testing
.
assert_array_almost_equal
(
calc_ret
,
expected_ret
)
np
.
testing
.
assert_array_almost_equal
(
calc_ret
,
expected_ret
)
ret_series
=
np
.
random
.
randn
(
n_samples
,
1
)
ret_series
=
np
.
random
.
randn
(
self
.
n_samples
,
1
)
calc_ret
=
simple_settle
(
weights
,
ret_series
,
groups
)
calc_ret
=
simple_settle
(
self
.
weights
,
ret_series
,
self
.
groups
)
ret_mat
=
weights
*
ret_series
ret_mat
=
self
.
weights
*
ret_series
expected_ret
=
pd
.
DataFrame
(
ret_mat
)
.
groupby
(
groups
)
.
sum
()
.
values
expected_ret
=
pd
.
DataFrame
(
ret_mat
)
.
groupby
(
self
.
groups
)
.
sum
()
.
values
np
.
testing
.
assert_array_almost_equal
(
calc_ret
,
expected_ret
)
np
.
testing
.
assert_array_almost_equal
(
calc_ret
,
expected_ret
)
...
...
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