Kevin Crotty
BUSI 448: Investments
Last time:
Today:
Many investors (like me!) cannot borrow at the same rate at which they can lend.
In this case, the capital allocation line is not a straight line.
For most investors:
\[r^{\text{borrow}}>r^{\text{saving}}\]
\[ E[r_p] = r_f^{\text{saving}} + \bigg[ \frac{E[r_{\text{risky}}]-r_f^{\text{saving}}}{\text{sd}[r_{\text{risky}}] }\bigg]\cdot \text{sd}[r_p]\,.\]
\[ E[r_p] = r_f^{\text{borrow}} + \bigg[ \frac{E[r_{\text{risky}}]-r_f^{\text{borrow}}}{\text{sd}[r_{\text{risky}}] }\bigg]\cdot \text{sd}[r_p]\,.\]
Where do investors with different risk aversions choose to invest when faced with this investment opportunity set?
The answer depends on the investor’s risk aversion and the reward-risk ratios of the efficient low risk and high mean portfolios.
High risk aversion investors invest in the efficient low risk portfolio and save:
\[ w^*_{\text{low}} = \frac{E[r_{\text{low}}-r_f^{\text{saving}}]}{A \cdot \text{var}_{\text{low}}}.\]
Low risk aversion investors invest in the efficient high mean portfolio and borrow:
\[ w^*_{\text{high}} = \frac{E[r_{\text{high}}-r_f^{\text{borrow}}]}{A \cdot \text{var}_{\text{high}}}.\]
Intermediate risk aversion investors invest in risky assets only.
Can express as a two-asset portfolio of the efficient low and high risk portfolios.
The optimal weight \(a^*\) in the low-risk portfolio is: \[ a^* = \frac{E[r_{\text{low}} - r_{\text{high}}] - A (\text{cov}[r_{\text{low}}, r_{\text{high}}]-\text{var}[r_{\text{high}}])}{A (\text{var}[r_{\text{low}}]+\text{var}[r_{\text{high}}]-2\text{cov}[r_{\text{low}}, r_{\text{high}}])}\,,\]
Note: \(\text{cov}[r_{\text{low}}, r_{\text{high}}] = w_{\text{low}}' V w_{\text{high}}\), where \(w_{\text{low}}\) and \(w_{\text{high}}\) are the weights in the underlying risky assets for the efficient low-risk and high-mean portfolios, respectively.
We can find the risk aversion thresholds for savings and borrowing by setting risky asset allocation \(w^* \le 1\) (savings) or \(w^* \ge 1\) (borrowing) in the capital allocation expressions and solving for risk aversion.
Upper risk aversion threshold: some savings if \[A \ge \frac{E[r_{\text{low}}-r_f]}{\text{var}(r_{\text{low}})}.\]
Lower risk aversion threshold: some borrowing if \[A \le \frac{E[r_{\text{high}}-r_f]}{\text{var}(r_{\text{high}})}.\]
The optimal portfolio for investor with risk aversion \(A\) solves:
\[ \underset{w_{\text{saving}},w_{\text{borrow}},w_1,w_2,\dots,w_N}{\text{max}} E[r_p] - 0.5 \cdot A \cdot \text{var}[r_p] \]
subject to the constraints \[w_{\text{saving}} + w_{\text{borrow}} + \sum_i w_i=1,\] \[w_{\text{saving}} \ge 0,\] \[w_{\text{borrow}} \le 0.\]
cvxopt.solvers.qp
Recall the cvxopt.solvers.qp
function’s general form: \[\begin{align*}
\underset{w}{\text{min }}& \frac{1}{2} w' Q w + p'w \\
\text{subject to } & Gw \le h \\
& Aw = b \\
\end{align*}\]
def opt_allocation2(means, cov, rf_save, rf_borrow, risk_aversion):
n=len(means)
Q = np.zeros((n + 2, n + 2))
Q[2:, 2:] = risk_aversion * cov
Q = matrix(Q, tc="d")
p = np.array([-rf_save, -rf_borrow] + list(-means))
p = matrix(p, (n + 2, 1), tc="d")
# Constraint: saving weight positive, borrowing weight negative
G = np.zeros((2, n + 2))
G[0, 0] = -1
G[1, 1] = 1
G = matrix(G, (2, n+2), tc="d")
h = matrix([0, 0], (2, 1), tc="d")
# Constraint: fully-invested portfolio
A = matrix(np.ones(n+2), (1, n+2), tc="d")
b = matrix([1], (1, 1), tc="d")
sol = Solver(Q, p, G, h, A, b)
if sol["status"] == "optimal":
wgts_optimal = np.array(sol["x"]).flatten()
else:
wgts_optimal = None
return wgts_optimal
BUSI 448