Skip to content

Commit 0207fa7

Browse files
author
Avery Levin
committed
added assume_PSD
1 parent 30ab571 commit 0207fa7

File tree

2 files changed

+5
-5
lines changed

2 files changed

+5
-5
lines changed

pypfopt/efficient_frontier/efficient_frontier.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ def max_sharpe(self, risk_free_rate=0.02):
250250

251251
# max_sharpe requires us to make a variable transformation.
252252
# Here we treat w as the transformed variable.
253-
self._objective = cp.quad_form(self._w, self.cov_matrix)
253+
self._objective = cp.quad_form(self._w, self.cov_matrix, assume_PSD=True)
254254
k = cp.Variable()
255255

256256
# Note: objectives are not scaled by k. Hence there are subtle differences

pypfopt/objective_functions.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ def portfolio_variance(w, cov_matrix):
6767
:return: value of the objective function OR objective function expression
6868
:rtype: float OR cp.Expression
6969
"""
70-
variance = cp.quad_form(w, cov_matrix)
70+
variance = cp.quad_form(w, cov_matrix, assume_PSD=True)
7171
return _objective_value(w, variance)
7272

7373

@@ -109,7 +109,7 @@ def sharpe_ratio(w, expected_returns, cov_matrix, risk_free_rate=0.02, negative=
109109
:rtype: float
110110
"""
111111
mu = w @ expected_returns
112-
sigma = cp.sqrt(cp.quad_form(w, cov_matrix))
112+
sigma = cp.sqrt(cp.quad_form(w, cov_matrix, assume_PSD=True))
113113
sign = -1 if negative else 1
114114
sharpe = (mu - risk_free_rate) / sigma
115115
return _objective_value(w, sign * sharpe)
@@ -156,7 +156,7 @@ def quadratic_utility(w, expected_returns, cov_matrix, risk_aversion, negative=T
156156
"""
157157
sign = -1 if negative else 1
158158
mu = w @ expected_returns
159-
variance = cp.quad_form(w, cov_matrix)
159+
variance = cp.quad_form(w, cov_matrix, assume_PSD=True)
160160

161161
risk_aversion_par = cp.Parameter(
162162
value=risk_aversion, name="risk_aversion", nonneg=True
@@ -198,7 +198,7 @@ def ex_ante_tracking_error(w, cov_matrix, benchmark_weights):
198198
:rtype: float OR cp.Expression
199199
"""
200200
relative_weights = w - benchmark_weights
201-
tracking_error = cp.quad_form(relative_weights, cov_matrix)
201+
tracking_error = cp.quad_form(relative_weights, cov_matrix, assume_PSD=True)
202202
return _objective_value(w, tracking_error)
203203

204204

0 commit comments

Comments
 (0)