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
b4804c14
Commit
b4804c14
authored
Aug 04, 2017
by
Dr.李
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added mean variance optimizer
parent
b03929b9
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
20 additions
and
32 deletions
+20
-32
factoranalysis.py
alphamind/analysis/factoranalysis.py
+3
-0
meanvariancebuilder.py
alphamind/portfolio/meanvariancebuilder.py
+17
-32
No files found.
alphamind/analysis/factoranalysis.py
View file @
b4804c14
...
...
@@ -228,6 +228,9 @@ def factor_analysis(factors: pd.DataFrame,
elif
method
==
'ls'
or
method
==
'long_short'
:
weights
=
build_portfolio
(
er
,
builder
=
method
)
elif
method
==
'mv'
or
method
==
'mean_variance'
:
weights
=
build_portfolio
(
er
,
builder
=
method
)
if
detail_analysis
:
analysis
=
data_pack
.
settle
(
weights
,
d1returns
)
...
...
alphamind/portfolio/meanvariancebuilder.py
View file @
b4804c14
...
...
@@ -8,10 +8,7 @@ Created on 2017-6-27
import
numpy
as
np
from
typing
import
Union
from
typing
import
Tuple
from
cvxopt
import
matrix
from
cvxopt
import
solvers
solvers
.
options
[
'show_progress'
]
=
False
from
alphamind.cython.optimizers
import
QPOptimizer
def
mean_variance_builder
(
er
:
np
.
ndarray
,
...
...
@@ -25,39 +22,27 @@ def mean_variance_builder(er: np.ndarray,
lbound
=
lbound
-
bm
ubound
=
ubound
-
bm
transposed_risk_exposure
=
risk_exposure
.
T
risk_target
=
risk_target
-
transposed_risk_exposure
@
bm
# set up problem for net position
n
=
len
(
er
)
P
=
lam
*
matrix
(
cov
)
q
=
-
matrix
(
er
)
G1
=
np
.
zeros
((
2
*
n
,
n
))
h1
=
np
.
zeros
(
2
*
n
)
for
i
in
range
(
n
):
G1
[
i
,
i
]
=
1.
h1
[
i
]
=
ubound
[
i
]
G1
[
i
+
n
,
i
]
=
-
1.
h1
[
i
+
n
]
=
-
lbound
[
i
]
m
=
len
(
transposed_risk_exposure
)
G2
=
np
.
concatenate
([
transposed_risk_exposure
,
-
transposed_risk_exposure
])
h2
=
np
.
zeros
(
2
*
m
)
bm_risk
=
risk_exposure
.
T
@
bm
for
i
in
range
(
m
):
h2
[
i
]
=
risk_target
[
1
][
i
]
h2
[
i
+
m
]
=
-
risk_target
[
0
][
i
]
clbound
=
risk_target
[
0
]
-
bm_risk
cubound
=
risk_target
[
1
]
-
bm_risk
G
=
matrix
(
np
.
concatenate
([
G1
,
G2
]))
h
=
matrix
(
np
.
concatenate
([
h1
,
h2
]))
optimizer
=
QPOptimizer
(
er
,
cov
,
lbound
,
ubound
,
risk_exposure
.
T
,
clbound
,
cubound
,
lam
)
sol
=
solvers
.
qp
(
P
,
q
,
G
,
h
)
if
optimizer
.
status
()
==
0
:
status
=
'optimal'
else
:
status
=
optimizer
.
status
()
return
s
ol
[
'status'
],
sol
[
'dual objective'
],
np
.
array
(
sol
[
'x'
])
.
flatten
()
+
bm
return
s
tatus
,
optimizer
.
feval
(),
optimizer
.
x_value
()
+
bm
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