@@ -67,7 +67,7 @@ def portfolio_variance(w, cov_matrix):
67
67
:return: value of the objective function OR objective function expression
68
68
:rtype: float OR cp.Expression
69
69
"""
70
- variance = cp .quad_form (w , cov_matrix )
70
+ variance = cp .quad_form (w , cov_matrix , assume_PSD = True )
71
71
return _objective_value (w , variance )
72
72
73
73
@@ -109,7 +109,7 @@ def sharpe_ratio(w, expected_returns, cov_matrix, risk_free_rate=0.02, negative=
109
109
:rtype: float
110
110
"""
111
111
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 ))
113
113
sign = - 1 if negative else 1
114
114
sharpe = (mu - risk_free_rate ) / sigma
115
115
return _objective_value (w , sign * sharpe )
@@ -156,7 +156,7 @@ def quadratic_utility(w, expected_returns, cov_matrix, risk_aversion, negative=T
156
156
"""
157
157
sign = - 1 if negative else 1
158
158
mu = w @ expected_returns
159
- variance = cp .quad_form (w , cov_matrix )
159
+ variance = cp .quad_form (w , cov_matrix , assume_PSD = True )
160
160
161
161
risk_aversion_par = cp .Parameter (
162
162
value = risk_aversion , name = "risk_aversion" , nonneg = True
@@ -198,7 +198,7 @@ def ex_ante_tracking_error(w, cov_matrix, benchmark_weights):
198
198
:rtype: float OR cp.Expression
199
199
"""
200
200
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 )
202
202
return _objective_value (w , tracking_error )
203
203
204
204
0 commit comments