ml-finance-python

python scripts for finance machine learning

git clone https://9o.is/git/ml-finance-python.git

lab_110.ipynb

(49016B)


      1 {
      2  "cells": [
      3   {
      4    "cell_type": "markdown",
      5    "metadata": {},
      6    "source": [
      7     "# Finding the Max Sharpe Ratio Portfolio\n",
      8     "\n",
      9     "We've already seen that given a set of expected returns and a covariance matrix, we can plot the efficient frontier. In this section, we'll extend the code to locate the point on the efficient frontier that we are most interested in, which is the tangency portfolio or the Max Sharpe Ratio portfolio.\n",
     10     "\n",
     11     "Let's start by the usual imports, and load in the data."
     12    ]
     13   },
     14   {
     15    "cell_type": "code",
     16    "execution_count": 1,
     17    "metadata": {},
     18    "outputs": [],
     19    "source": [
     20     "%load_ext autoreload\n",
     21     "%autoreload 2\n",
     22     "%matplotlib inline\n",
     23     "import edhec_risk_kit_110 as erk\n",
     24     "\n",
     25     "ind = erk.get_ind_returns()\n",
     26     "er = erk.annualize_rets(ind[\"1996\":\"2000\"], 12)\n",
     27     "cov = ind[\"1996\":\"2000\"].cov()"
     28    ]
     29   },
     30   {
     31    "cell_type": "markdown",
     32    "metadata": {},
     33    "source": [
     34     "We already know how to identify points on the curve if we are given a target rate of return. Instead of minimizing the vol based on a target return, we want to find that one point on the curve that maximizes the Sharpe Ratio, given the risk free rate.\n",
     35     "\n",
     36     "```python\n",
     37     "def msr(riskfree_rate, er, cov):\n",
     38     "    \"\"\"\n",
     39     "    Returns the weights of the portfolio that gives you the maximum sharpe ratio\n",
     40     "    given the riskfree rate and expected returns and a covariance matrix\n",
     41     "    \"\"\"\n",
     42     "    n = er.shape[0]\n",
     43     "    init_guess = np.repeat(1/n, n)\n",
     44     "    bounds = ((0.0, 1.0),) * n # an N-tuple of 2-tuples!\n",
     45     "    # construct the constraints\n",
     46     "    weights_sum_to_1 = {'type': 'eq',\n",
     47     "                        'fun': lambda weights: np.sum(weights) - 1\n",
     48     "    }\n",
     49     "    def neg_sharpe(weights, riskfree_rate, er, cov):\n",
     50     "        \"\"\"\n",
     51     "        Returns the negative of the sharpe ratio\n",
     52     "        of the given portfolio\n",
     53     "        \"\"\"\n",
     54     "        r = portfolio_return(weights, er)\n",
     55     "        vol = portfolio_vol(weights, cov)\n",
     56     "        return -(r - riskfree_rate)/vol\n",
     57     "    \n",
     58     "    weights = minimize(neg_sharpe, init_guess,\n",
     59     "                       args=(riskfree_rate, er, cov), method='SLSQP',\n",
     60     "                       options={'disp': False},\n",
     61     "                       constraints=(weights_sum_to_1,),\n",
     62     "                       bounds=bounds)\n",
     63     "    return weights.x\n",
     64     "```\n",
     65     "\n",
     66     "Let's guess where the point might be:"
     67    ]
     68   },
     69   {
     70    "cell_type": "code",
     71    "execution_count": 2,
     72    "metadata": {},
     73    "outputs": [
     74     {
     75      "data": {
     76       "text/plain": [
     77        "(0, 0.13653194556346115)"
     78       ]
     79      },
     80      "execution_count": 2,
     81      "metadata": {},
     82      "output_type": "execute_result"
     83     },
     84     {
     85      "data": {
     86       "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAEKCAYAAADpfBXhAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3Xl43NV97/H3V6PV2i1Zli1ZtuUFYxsb27IxhFDWAiEBSigYQlgC4WkLbSiXNGlDs3DT3iT0koYbKCFAlj4kBAgJJIGShC0BbLDkFe+yvEnyIslabW0zc+4fMx7LsowGbT/N6PN6Hj+a5czoeyzpo5/O73fOMeccIiISXxK8LkBERIaewl1EJA4p3EVE4pDCXUQkDincRUTikMJdRCQOKdxFROKQwl1EJA4p3EVE4lCiV584Pz/fTZs2zatPLyISkyoqKuqdcxP6a+dZuE+bNo3y8nKvPr2ISEwysz3RtNOwjIhIHFK4i4jEIYW7iEgcUriLiMQhhbuISBxSuIuIxCGFu4hIjKjY04gvI68wmraeXecuIiLRaev088Kaah74zWZ86blF0bxG4S4iMooc7fKzubaFDdXNbKxpZkN1E1X1R4hsd23RvY/CXUTEIx3dATbvb+GDmuZQmFc3s+NQK8FwkE/MSuGMohyuOrOItGQf//HqNnCRmP9QCncRkRHQ6Q+w7UBrJMQ31DSz/WArgXCS56Uns6A4m0vnF7KgKJszirOZmJV6wnssLsnlrO811Ubz+aIKdzO7DPge4AOecM596xTtrgWeA5Y657RwjIiMSd2BINsPtkZCfGN1M1sPtNAdCAV5zrgkzijK5sI5pZxRlMOC4mwmZadi9uFjLkum5hJoazgQTQ39hruZ+YBHgEuAamC1mb3knNvcq10m8A/Ae9F8YhGReOAPBKmsa2NjZIy8mc37W+jyBwHITE1kQXE2t59byoLibM4oyqY4N63fIB+saI7clwGVzrkqADN7BrgK2Nyr3f8GvgPcN6QVioiMEoGgY1d9GxuqmyMnPDfVNtPRHQry9GQf84uyueXsqZxRnMOComxKxo8jIWF4g7wv0YR7EbCvx/1q4KyeDcxsETDFOfdbMztluJvZncCdACUlJR+9WhGRERIMOvYcPsqG6qbI8MqmmmaOdAUASEvyMb8oixuWlYSPyHMozU/3JMj7Ek2491Vp5GytmSUA3wVu7e+NnHOPA48DlJWVRXXGV0RkuDnn2He4nQ01TWwMj5FvrGmmtcMPQEpiAnMnZ3HtkuLQEXlxNjMmZOAbJUHel2jCvRqY0uN+MdDzbG0mMB94MzyGVAi8ZGZX6qSqiIw2zjlqmzvYWN3U41ryZprbuwFI8hmnT8riyoWTI0fksyZmkOSLrQn90YT7amCWmU0HaoAVwI3HnnTONQP5x+6b2ZvAfQp2ERkN/rj5IL/buJ/EBKhr62JjdTMNR7oASEwwTivM5PL5hZxRnM2CohxmF2aQkujzuOrB6zfcnXN+M7sbeJXQpZBPOec2mdkDQLlz7qXhLlJEJBqd/gAf1LSwdm8ja/c28V5VA/XhIAeYOn4cF84pCB2RF+cwpzCT1KTYD/K+RHWdu3PuZeDlXo999RRtzx98WSIiH+7Y8MravY2s2dPEmr2NbK5toSsQunKlKCeN/MwUGo504QCfwXVLp3DXBTO9LXyEaIaqiMSEju4AG2uaI2G+dl8jB1s6gdAJzwXF2dz2sWksKslhUUkuE7NSqdjTyGeeWEW3P0hSYgLLS/M87sXIUbiLyKjjnKO6sZ014eGVtXsb2VTbgj88VX/K+DSWl+axuCSXRSU5nD4pq88Tnkum5vL0HctZVdXA8tI8lkzNHemueEbhLiKeO9rlZ2N1M2vCQb5mbxP1baGj8rQkHwuKs/n8eaUsmhI6Kp+QmRL1ey+ZmjumQv0YhbuIjCjnHHsajrJ23/HhlS37jy+gNS1vHOfNyo8Mr8wpzCQxxi5DHA0U7iIyrI50+llf3RQZXlm7tylyKWJ6so+FU3L427+YEQnz8enJHlccHxTuIjJknHPsqj/Cmr1NkfHybQdaIuuTl05I54I5BSwqyWFxSS6zJ2aO6lmesUzhLiID1trRzfp9zeEgb2TtviaajoZmemamJHJmSQ6XXDCTRVNzWTQlh5xxOiofKQp3EelXxZ5GVu6sp2T8ODq6g5Hx8u2HWiPbv80qyODSuYWho/KpuaN+7ZV4p3AXkT75A0E+qG3hufJ9/Pz9vZGhFYCs1EQWleRy+RmFLC7JZeGUHLLTkrwrVk6icBcRILTE7baDrby7s4GVO+t5r+owrZ3+E9oYcNu507n/E6ePmqVtpW8Kd5ExyjlHVf2RSJiv3NlAY3i8fFreOD65cDLnzMhjXLKPu362JjLL84ozJinYY4DCXWQM2Xf4KCt3NrCyqoF3d9ZHpu9Pyk7lgjkFnDMjn7Nn5FGUk3bC68bqLM9YpnAXiWOHWjpCQV7ZwLtV9ew73A5AXnoyZ8/I45wZ+ZwzI4+peeM+dE/PsTrLM5Yp3EXiSOORLlZVNfDuztCR+c66I0DoBOjy0jxu/9h0zp6Rz+yJGcO+QbN4S+EuEsNaO7pZvftw6Mh8ZwNbDrTgHIxL9rF02niuK5vCOTPymTs5S5cljjEKd5EY0t4VoGJPI+/urOfdnQ1srGkmEHQkJyawpCSXey+ezTkz81hQnBNz28LJ0FK4i4xiXf4g6/Y1RcJ83d4mugJBfAnGmeE1Wc6Zkcfiqblxu6OQDIzCXcRjFXsaI1eiLCzOZlNtS2TMvHx3I+3dAcxg3uQsbv3YNM6ekcfSaePJSNGPr5yavjtEPFSx+zA3PvEeXf4gZpCa5ONoVwCA2RMzuH7pFJaX5rG8dLzWZZGPROEuMsI6ugOs3NnA61sP8eK6Gjr9oT0/nYOZBRnc8fFSlpeOpyAz1eNKJZYp3EVGQE1TO29sPcTrWw/x7s56OrqDpCX5mDc5i/XVTZGTol/71DxdTy5DQuEuMgz8gSBr9zXx+tZDvLH1EFsPtAKhvT+vL5vCBXMKWF6aR2qS74QxdwW7DBWFu8gQaTzSxVvb63h96yHe2l5Hc3s3vgRj6bRc/uUTc7hwTgEzJpw8eUizP2U4KNxFBsg5x9YDrbweHm5Zu7eRoAtN7b/o9AIunFPAx2dN0FK44gmFu8hH0N4V4J3Kel7fFhpu2d/cAcD8oizuvmAmF8wpYGFxjlZNFM8p3EX6se/w0cjR+cqqBrr8QdKTfZw7K597Lp7F+acVMDFLV7bI6KJwF+mlOxCkYk9j5OqWHYfagNAa5zedNZUL5xSwdHouKYmaESqjl8JdBGho6+TNbXW8vu0Qf9peR2uHnySfsWz6eK5fOoUL5xRQOiHD6zJFoqZwlzGpYvdhXlxfS5c/yNYDrayvbsI5mJCZwuXzC7lwTgEfm5lPZqpOhkpsUrjLmLLtQCuPvlnJi+tqI4/NLMjgnotmc+GcAuZNztLJUIkLCneJe/Vtnby4rpYX1lSzqbaFntntM/irRUXcdcFM7woUGQYKd4lLHd0BXttyiBfWVPPm9joCQceC4my+/qm5TM0bx98+fXzD5+WleV6XKzLkFO4SN5xzrNnbyC/X1PDb9bW0dPgpzErl8x8v5ZrFRcyemBlpqw2fJd5FFe5mdhnwPcAHPOGc+1av5/8GuAsIAG3Anc65zUNcq0if9h0+ygtranhhbTV7Go6SluTjsvmFXLO4iHNm5Pe5vZym/Eu86zfczcwHPAJcAlQDq83spV7h/TPn3GPh9lcCDwGXDUO9IkBo79CXN+7nl2tqeH/XYczg7NI8/v7CWVw2v1AbWciYF81PwDKg0jlXBWBmzwBXAZFwd8619GifDrihLFIEQistvl1Zzwtranh10wE6/UFK89P54qWncfWiIopy0rwuUWTUiCbci4B9Pe5XA2f1bmRmdwH3AsnAhUNSnQiw9UALv6yo5tfraqlr7SQ7LYnryqZwzeIizpySc9IqiyISXbj39ZNz0pG5c+4R4BEzuxG4H7jlpDcyuxO4E6CkpOSjVSpjSl1rJy+uq+GFNTVs3t9CYoJx4ZwCrllczAVzJmjqv0g/ogn3amBKj/vFQO0p2gI8A/xXX0845x4HHgcoKyvT0I0AxzeIXlySQ8ORLl5YU8Nb4csXFxZn840r5/GphZMZn649REWiFU24rwZmmdl0oAZYAdzYs4GZzXLO7QjfvQLYgUgUKvY0cuMPV0X2EQUozErlzvNKuWZREbN6XL4oItHrN9ydc34zuxt4ldClkE855zaZ2QNAuXPuJeBuM7sY6AYa6WNIRqS3hrZOvvm7zScE+3Vlxfyfaxb0efmiiEQvquvFnHMvAy/3euyrPW5/YYjrkjjW0R3gR+/s5tE3KjnS5Q8FuXMkJSZw/dISBbvIENDFwDJigkHHS+trefDVbdQ0tXPx6QV8+fI5NLf7NVtUZIgp3GVErKpq4N9f3sKG6mbmF2Xx4F8v4JwZ+ZHnFeoiQ0vhLsNqZ10b33plK3/YfJBJ2ak8dN1Crj6zSMvqigwzhbsMi4a2Tr732g6efm8vaUk+vnjpadx+7nRSk3R9ushIULjLkOp5svRod4Ablk3hnotnk5+R4nVpImOKwl2GxKlOls4s0HXqIl5QuMugvVfVwL+FT5bOm5zFg9cu4JyZ+f2/UESGjcJdBuw362v43muVVB5q08lSkVFG4S4fWZc/yP2/3siz5dUAJCYYD123kLNn6GhdZLRI8LoAiS2bapu56pF3IsEOx7a3a/KwKhHpTeEuUenyB3noD9u56vvvUN/WyZcuO43UpAR8hjaZFhmFNCwj/fqgppn7nlvP1gOtXLOoiK9+ai4545JZNj1PywaIjFIKdzmlTn+A779eyaNv7iQvPZknbi7j4rkTI89rk2mR0UvhLn3aUN3EF5/bwLaDrXx6cTFf/eRcsscleV2WiERJ4S4n6PQHePi1HTz2VhX5Gck8dWsZF86Z2P8LRWRUUbhLxPp9TXzx+fVsP9jGtUuK+ddPziU7TUfrIrFI4S50dAf43ms7+MFbOynITOVHty3lgtMKvC5LRAZB4T6GVexp5Fdrqnljex01je1cV1bM/Z+cS1aqjtZFYp3CfYwq332YFY+vwh90ANx/xenc8fFSj6sSkaGiSUxjUHtXgH9+YWMk2H3GCZtUi0js05H7GHOopYM7flrOjkNtJCYYLrwxtWaYisQXhfsYsvVAC5/70Woaj3bzw5vLGJ+erBmmInFK4T5GvLntEHf/bC3pKT6e+5uzmV+UDWhjapF4pXAfA/575W6+9tImTivM4qlby5iUneZ1SSIyzBTucSwQdPzb77bw1Du7uGhOAQ/fsIj0FH3JRcYC/aTHqSOdfr7wzFr+uOUQt31sGvdfMRefdkgSGTMU7nHoQHMHt/9kNVv2t/DAVfO4+expXpckIiNM4R5HKvY08uK6Gn6zvpYuf5Anb1nKBXO0jIDIWKRwjxMVexpZ8fhKugOhiUkPXbdQwS4yhmmGapz47YbaSLD7DPY3d3hckYh4SeEeBwJBx9s76gG0p6mIABqWiQs/XbmbHYfa+MJFs0gOB7smJ4mMbQr3GFfdeJQHX93G+adN4J6LZ2Gmyx1FJMphGTO7zMy2mVmlmX25j+fvNbPNZrbBzF4zs6lDX6r05pzjX371AQDfvHq+gl1EIvoNdzPzAY8AlwNzgRvMbG6vZmuBMufcAuB54DtDXaic7NfravjT9jr+6dLTKM4d53U5IjKKRHPkvgyodM5VOee6gGeAq3o2cM694Zw7Gr67Cige2jKlt4a2Th74zWYWleTwWU1SEpFeogn3ImBfj/vV4cdO5XbglcEUJf174Lebaev08+1PL9CyAiJykmhOqPaVHK7PhmY3AWXAX5zi+TuBOwFKSkqiLFF6e33rQV5cV8s9F89i9sRMr8sRkVEomiP3amBKj/vFQG3vRmZ2MfAV4ErnXGdfb+Sce9w5V+acK5swYcJA6h3z3q6s5ws/X0dxbhp/e/4Mr8sRkVEqmnBfDcwys+lmlgysAF7q2cDMFgE/IBTsh4a+TIHQEgO3PPU+rZ1+DrV28kFNi9clicgo1W+4O+f8wN3Aq8AW4Fnn3CYze8DMrgw3exDIAJ4zs3Vm9tIp3k4GYVVVA4HwptaBQJBVVQ0eVyQio1VUk5iccy8DL/d67Ks9bl88xHVJH86aPh4InQTREgMi8mE0QzWGFGSmAvCX8yZy53kztMSAiJySFg6LIdsPtgIo2EWkXwr3GLItHO6zJ2Z4XImIjHYK9xiy42Ark7NTyUxN8roUERnlFO4xZPvBNmYXatKSiPRP4R4jAkFHZV2bZqSKSFQU7jHi5Y2hTa+TfFpHRkT6p3CPARV7Grn32fUA/PDPu6jY0+hxRSIy2incY8Cqqgb8Ac1MFZHoKdxjwPLSvMiyvok+zUwVkf4p3GPAkqm53HrONAAeu2mxJjCJSL8U7jFian46APOLcjyuRERigcI9RhzbbMm5PvdJERE5gcI9RiRYKN0DCncRiYLCPUb4wuEeVLaLSBQU7jEinO0Ele4iEgWFe4xIiBy5K9xFpH8K9xix9/BRADbWNHtciYjEAoV7DKjY08ijb1YC8L+eXa/lB0SkXwr3GNBzY+xuLT8gIlFQuMeA5aV5JPlCXypfgmn5ARHpl8I9BiyZmsuTty4F4PqyEi0/ICL9UrjHiHNn5pOZmkii1nMXkSgo3GNIYVYq+5vbvS5DRGKAwj2GFGancqC5w+syRCQGKNxjyKTsVA60KNxFpH8K9xhSmJVKXWsn/kDQ61JEZJRTuMeQwuw0gg7+4/fbNJFJRD6Uwj2GHOn0A/D4n6r4zBOrFPAickoK9xhyqDU03h500O3XTFUROTWFewy5bF5h5HZSojbKFpFTU7jHkCXTxnPerHzSk308fftZmqkqIqekcI8xnzhjEke6AuSkJ3tdioiMYlGFu5ldZmbbzKzSzL7cx/PnmdkaM/Ob2bVDX6Ycc1Z4KEbj7SLyYfoNdzPzAY8AlwNzgRvMbG6vZnuBW4GfDXWBcqJpeeOYmJXCqqrDXpciIqNYYhRtlgGVzrkqADN7BrgK2HysgXNud/g5za4ZZmahJX9X7mzAOYeZFhITkZNFMyxTBOzrcb86/Jh4ZHlpHodaO9lVf8TrUkRklIom3Ps6NBzQLs1mdqeZlZtZeV1d3UDeQiByCeS3XtmqiUwi0qdowr0amNLjfjFQO5BP5px73DlX5pwrmzBhwkDeQoDDbZ0A/H7zQc1UFZE+RRPuq4FZZjbdzJKBFcBLw1uWfJhVu46fTNVMVRHpS7/h7pzzA3cDrwJbgGedc5vM7AEzuxLAzJaaWTXw18APzGzTcBY91i0vzSM5vCNTgvZUFZE+mHMDGj4ftLKyMldeXu7J544Hq3cf5vYfr2Z6fjov3n2u1+WIyAgxswrnXFl/7TRDNUYtnTae288tZX11M3sbjnpdjoiMMgr3GHbd0mISDH5RvtfrUkRklFG4x7BJ2WlccFoBz5ZX063dmUSkB4V7jLthWQl1rZ28vvWQ16WIyCiicI9x5582gcKsVH7+voZmROQ4hXuMS/QlcF1ZMW9tr6Omqd3rckRklFC4x4Hrlk7BObjvufWarSoigMI9Lhxs6STBYOXOBi1HICKAwj0u9Fx+oLNbyxGIiMI9LiwvzSM5MfSldMCcwkxvCxIRzync48CSqbk8fcdy7jh3Or4E+P2mg16XJCIei2YnJokBS6bmsmRqLgBPvrOLz549lflF2R5XJSJe0ZF7nPn7i2aROy6ZB367Ga8WhRMR7ync40x2WhL3XjKb93cd5pUPDnhdjoh4ROEeh1YsncKcwkz+/eUtdHQHvC5HRDygcI9Dib4E/vWTc6lubOfJt3d5XY6IeEAnVOPUx2bmc8nciTz82g6OdPq56PSJkROuIhL/dOQex64+czKd/iCPvrlTM1dFxhiFexzb3XAUC9/u0kbaImOKwj2OLS/NIyU8czXoYGZBhscVichIUbjHsSVTc3n688v5/Menk5bk4/E/VWnHJpExQuEe55ZMzeUrV8zl29cuoGJPI//399u9LklERoDCfYy4cuFkblhWwmNv7eTNbdqSTyTeKdzHkK99ai5zCjO599n1HGju8LocERlGCvcxJDXJx/dvXExHd4B/eGYtfo2/i8QthfsYM7Mgg29ePZ/3dx3m4dd2eF2OiAwThfsYdM3iYv56STH/741K3t5R73U5IjIMFO5j1DeumsfMCRnc9bM1fOd/tmr2qkicUbiPUeOSE7nrgpk0t3eHlif4oZYnEIknCvcxrKapPbI8QYc/yMqdGqIRiRcK9zFseWkeKUkJkYDfVNui3ZtE4oTCfQw7trH2fZeexpULJ/HKBwf4r7d2el2WiAwBrec+xh3bWDsYdJgZ3/mfbUzMTOXTS4q9Lk1EBkHhLgAkJBgPXruQ+rZOvvTLDeRlJHP+aQVelyUiAxTVsIyZXWZm28ys0sy+3MfzKWb2i/Dz75nZtKEuVIZfcmICj920hNkTM/m7p9ewobrJ65JEZID6DXcz8wGPAJcDc4EbzGxur2a3A43OuZnAd4FvD3WhMjIyU5P48W1LGZ+ezOd+vJo9DUe8LklEBiCaI/dlQKVzrso51wU8A1zVq81VwE/Ct58HLjIzQ2JSQVYqP/ncMgJBx81PvU99W6fXJYnIRxRNuBcB+3rcrw4/1mcb55wfaAbyer+Rmd1pZuVmVl5XVzewimVEzJiQwZO3LuVgSwcrfrCS//zDdk1yEokh0YR7X0fgvS+GjqYNzrnHnXNlzrmyCRMmRFOfeGhxSS73XDybyroj/OdrO7TJtkgMiSbcq4EpPe4XA7WnamNmiUA2cHgoChRvBYLu+CzW7iBv79BfXCKxIJpwXw3MMrPpZpYMrABe6tXmJeCW8O1rgdedpjrGhd6zWN/YVkdHd8DTmkSkf/2Ge3gM/W7gVWAL8KxzbpOZPWBmV4abPQnkmVklcC9w0uWSEpt6zmK96/wZrK9u4o6flNPepYAXGc3MqwPssrIyV15e7snnloF7vqKaLz6/nuXT83jy1jLGJWsenMhIMrMK51xZf+20tox8JNcuKeah6xby3q4Gbv3Rao50+r0uSUT6oHCXj+yvFhXznysWUbGnkVueep82BbzIqKNwlwG5cuFkHl6xiLX7mrj5yfdo6ej2uiQR6UHhLgN2xYJJPHLjIjZUN/PZJ9+nuV0BLzJaKNxlUC6bP4lHP7OYzbXN3PTEezQd7fK6JBFB4S5D4C/nFfLYTUvYdqCVqx95h6+9uIk/a7KTiKd0KaQMmR/+uYp/+92WyP20JB/FuWlMykmjKCeVSdlpTMpOZXJO6OOk7DTSkn0eViwSe6K9FFIXKcuQ6fIHSTAIutBiQ6dPyiQ/I4X9zR1srm2mvu3kIZvccUlMyk5j8rHwz0llco9fAhOzUklO1B+YIh+Vwl2GzPLSPJITE+j2B0lKTOArV8xlydTcyPMd3QEOtnRQ29TB/uZ29jd3UNsU+ljd2M7q3Y0nnZQ1g/yMFCZn9wr/8C+DyTmpFGSm4kvQCtMiPWlYRoZUxZ5GVlU1sLw074Rgj9aRTj/7m8Ph39RBbXN75BfAsY9Hey194EswJmamMCnn5GGfY38R5Gckoy0GJB5EOyyjcJeY4pyjpd1PbXM7+5vbj/8VEP5FEPrF0EGXP3jC65J9CeGj/ZOP/CdlpzE5O42stET9ApBRT2PuEpfMjOxxSWSPS+L0SVl9tnHO0XCk63jgHzvyb+5gf1M77+06zIGWDgLBEw9sxiX7Tnnkf+xjeop+ZCQ26DtV4o6ZkZ+RQn5GCmcUZ/fZJhB01LV2hsO/44S/AmqbO9h2oI66tk56/2GblZp4PPxz0k46F1CYnUpqkq4AEu8p3GVM8iUYhdmpFGanQknfbbr8wfAJ4GNH/if+Ili3r4nGoyfPys1LTz4+7BP+JXDsL4LJOWlMzEwh0acrgGR4KdxFTiE5MYEp48cxZfy4U7Zp7wqcdOXPsfDf03CEVTsbaO21sFqCQUFm6gmXfUb+Cgh/zM9IIUFXAMkgKNxFBiEt2UfphAxKJ2Scsk1rR/eJ4d8UGvrZ39zOlv0tvLb1IB3dJ54ATvIZE7P6Pvl77K+A3HFJrNnbNKirkyR+KdxFhllmahKZqUnMnpjZ5/POOZqOdlPT68j/2FVAFXsaOdiyn+7AiScAkn1Gd8BhFvor4+k7livgJULhLuIxMyM3PZnc9GTmF/V9AjgYdNS3dUau+Klt7uCVjfsp39OIc9DtD7KqqkHhLhEKd5EYkJBgFGSlUpCVyplTcgA4c0oOn3liVWRG8PLSPI+rlNFE4S4So45tXq4xd+mLwl0khi2ZmqtQlz7pYlsRkTikcBcRiUMKdxGROKRwFxGJQwp3EZE4pHAXEYlDnm3WYWatwDZPPvnQyQfqvS5ikNSH0UF9GB1ioQ9TnXMT+mvk5XXu26LZTWQ0M7Ny9cF76sPooD6MLhqWERGJQwp3EZE45GW4P+7h5x4q6sPooD6MDurDKOLZCVURERk+GpYREYlDwxLuZnaZmW0zs0oz+3Ifz6eY2S/Cz79nZtN6PPfP4ce3mdmlw1FfNAbaBzO7xMwqzGxj+OOFI117jxoH/HUIP19iZm1mdt9I1dzbIL+XFpjZSjPbFP56pI5k7T3qGOj3UpKZ/SRc+xYz++eRrr1Hjf314TwzW2NmfjO7ttdzt5jZjvC/W0au6pNqHFAfzOzMHt9HG8zs+pGtfICcc0P6D/ABO4FSIBlYD8zt1ebvgMfCt1cAvwjfnhtunwJMD7+Pb6hrHOY+LAImh2/PB2pGuv7B9qHH878EngPui7U+ELrMdwOwMHw/Lwa/l24EngnfHgfsBqaN0j5MAxYAPwWu7fH4eKAq/DE3fDs3xvowG5gVvj0Z2A/kjHQfPuq/4ThyXwZUOueqnHNdwDPAVb3aXAX8JHz7eeAiM7Pw48845zqdc7uAyvD7jbQB98E5t9Y5Vxt+fBOQamYpI1L1iQbzdcDMrib0g7hphOrty2D68JfABufcegDnXINzLjBCdfc0mD44IN3MEoHgksqlAAAE6UlEQVQ0oAtoGZmyT9BvH5xzu51zG4Bgr9deCvzBOXfYOdcI/AG4bCSK7mXAfXDObXfO7QjfrgUOAf1OIvLacIR7EbCvx/3q8GN9tnHO+YFmQkdW0bx2JAymDz19GljrnOscpjo/zID7YGbpwJeAb4xAnR9mMF+H2YAzs1fDf2r/0wjU25fB9OF54AihI8W9wH845w4Pd8F9GMzPZSz9TPfLzJYROvLfOUR1DZvhmKFqfTzW+5KcU7WJ5rUjYTB9CD1pNg/4NqEjSC8Mpg/fAL7rnGsLH8h7ZTB9SATOBZYCR4HXzKzCOffa0JbYr8H0YRkQIDQUkAv82cz+6JyrGtoS+zWYn8tY+pn+8DcwmwT8N3CLc673XyijznAcuVcDU3rcLwZqT9Um/CdnNnA4yteOhMH0ATMrBn4F3Oyc8+o3/GD6cBbwHTPbDdwD/IuZ3T3cBfdhsN9Lbznn6p1zR4GXgcXDXvHJBtOHG4H/cc51O+cOAe8AXkyNH8zPZSz9TJ+SmWUBvwPud86tGuLahscwnLhIJDRWO53jJy7m9WpzFyeeQHo2fHseJ55QrcKbk2CD6UNOuP2nR7ruoepDrzZfx7sTqoP5OuQCawidiEwE/ghcEWN9+BLwI0JHnenAZmDBaOxDj7Y/5uQTqrvCX4/c8O3xMdaHZOA14J6RrntQfR6m/8hPANsJjUt9JfzYA8CV4duphK7CqATeB0p7vPYr4ddtAy737D9mgH0A7ic0Trqux7+CWOpDr/f4Oh6F+xB8L91E6ITwB8B3Yq0PQEb48U2Egv2Lo7gPSwkdHR8BGoBNPV77uXDfKoHbYq0P4e+j7l4/02d61Y9o/2mGqohIHNIMVRGROKRwFxGJQwp3EZE4pHAXEYlDCncRkTikcJeYZWZv9l451MzuMbNHT9F+mpl90M97TjOzG3vcLzOzh8O3bzWz74dv/42Z3dzj8cmD7Y/IUFK4Syz7OaFJPz2tCD8+UNMIzQwFwDlX7pz7h96NnHOPOed+Gr57K6ElAkRGDYW7xLLngU8eW3UzvA76ZOBtM3vQzD4Ir4V+0vrb4SP0P4cXFVtjZueEn/oW8HEzW2dm/2hm55vZb/t4/dfN7L7wut9lwNPh11xhZr/q0e4SM3thyHsu0g+Fu8Qs51wDoRmdx5aQXQH8ArgGOBNYCFwMPBhe9KmnQ8AlzrnFwPXAw+HHvwz82Tl3pnPuu1HU8DxQDnzGOXcmoTVsTjezY0vC3kZoCQGREaVwl1jXc2jm2JDMucDPnXMB59xB4C1CU8t7SgJ+aGYbCU3xnzsUxbjQlO//Bm4ysxzgbOCVoXhvkY9iOJb8FRlJvwYeMrPFQJpzbs2xE539+EfgIKGj+wSgYwhr+hHwm/B7PudCa7SLjCgduUtMc861AW8CT3H8ROqfgOvNzBceHjmP0PBNT9nAfhdal/uzhLZhA2gFMj9iGSe8xoV266kltIjcjz/ie4kMCYW7xIOfEzoCfyZ8/1eE9k9dD7wO/JNz7kCv1zwK3GJmqwjt2nQk/PgGwG9m683sH6P8/D8GHgufUE0LP/Y0sM85t3kgHRIZLK0KKTIMwtfDr3XOPel1LTI2KdxFhpiZVRD6S+AS583+uSIKdxGReKQxdxGROKRwFxGJQwp3EZE4pHAXEYlDCncRkTikcBcRiUP/H97oDq8VYXYVAAAAAElFTkSuQmCC\n",
     87       "text/plain": [
     88        "<Figure size 432x288 with 1 Axes>"
     89       ]
     90      },
     91      "metadata": {
     92       "needs_background": "light"
     93      },
     94      "output_type": "display_data"
     95     }
     96    ],
     97    "source": [
     98     "ax = erk.plot_ef(20, er, cov)\n",
     99     "ax.set_xlim(left = 0)"
    100    ]
    101   },
    102   {
    103    "cell_type": "code",
    104    "execution_count": 3,
    105    "metadata": {},
    106    "outputs": [
    107     {
    108      "data": {
    109       "text/plain": [
    110        "[<matplotlib.lines.Line2D at 0x1a1ccfe198>]"
    111       ]
    112      },
    113      "execution_count": 3,
    114      "metadata": {},
    115      "output_type": "execute_result"
    116     },
    117     {
    118      "data": {
    119       "image/png": "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\n",
    120       "text/plain": [
    121        "<Figure size 432x288 with 1 Axes>"
    122       ]
    123      },
    124      "metadata": {
    125       "needs_background": "light"
    126      },
    127      "output_type": "display_data"
    128     }
    129    ],
    130    "source": [
    131     "# plot EF\n",
    132     "ax = erk.plot_ef(20, er, cov)\n",
    133     "ax.set_xlim(left = 0)\n",
    134     "# get MSR\n",
    135     "rf = 0.1\n",
    136     "w_msr = erk.msr(rf, er, cov)\n",
    137     "r_msr = erk.portfolio_return(w_msr, er)\n",
    138     "vol_msr = erk.portfolio_vol(w_msr, cov)\n",
    139     "# add CML\n",
    140     "cml_x = [0, vol_msr]\n",
    141     "cml_y = [rf, r_msr]\n",
    142     "ax.plot(cml_x, cml_y, color='green', marker='o', linestyle='dashed', linewidth=2, markersize=12)"
    143    ]
    144   },
    145   {
    146    "cell_type": "code",
    147    "execution_count": 4,
    148    "metadata": {},
    149    "outputs": [
    150     {
    151      "data": {
    152       "text/plain": [
    153        "(0.2647394820740856, 0.0457197320872661)"
    154       ]
    155      },
    156      "execution_count": 4,
    157      "metadata": {},
    158      "output_type": "execute_result"
    159     }
    160    ],
    161    "source": [
    162     "r_msr, vol_msr"
    163    ]
    164   },
    165   {
    166    "cell_type": "markdown",
    167    "metadata": {},
    168    "source": [
    169     "Let's put it all together by adding the CML to the `plot_ef` code.\n",
    170     "\n",
    171     "Add the following code:\n",
    172     "\n",
    173     "```python\n",
    174     "    if show_cml:\n",
    175     "        ax.set_xlim(left = 0)\n",
    176     "        # get MSR\n",
    177     "        w_msr = msr(riskfree_rate, er, cov)\n",
    178     "        r_msr = portfolio_return(w_msr, er)\n",
    179     "        vol_msr = portfolio_vol(w_msr, cov)\n",
    180     "        # add CML\n",
    181     "        cml_x = [0, vol_msr]\n",
    182     "        cml_y = [riskfree_rate, r_msr]\n",
    183     "        ax.plot(cml_x, cml_y, color='green', marker='o', linestyle='dashed', linewidth=2, markersize=12)\n",
    184     "```\n"
    185    ]
    186   },
    187   {
    188    "cell_type": "code",
    189    "execution_count": 6,
    190    "metadata": {},
    191    "outputs": [
    192     {
    193      "data": {
    194       "text/plain": [
    195        "<matplotlib.axes._subplots.AxesSubplot at 0x1079219b0>"
    196       ]
    197      },
    198      "execution_count": 6,
    199      "metadata": {},
    200      "output_type": "execute_result"
    201     },
    202     {
    203      "data": {
    204       "image/png": "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\n",
    205       "text/plain": [
    206        "<Figure size 432x288 with 1 Axes>"
    207       ]
    208      },
    209      "metadata": {
    210       "needs_background": "light"
    211      },
    212      "output_type": "display_data"
    213     }
    214    ],
    215    "source": [
    216     "erk.plot_ef(20, er, cov, style='-', show_cml=True, riskfree_rate=0.1)"
    217    ]
    218   },
    219   {
    220    "cell_type": "code",
    221    "execution_count": null,
    222    "metadata": {},
    223    "outputs": [],
    224    "source": []
    225   }
    226  ],
    227  "metadata": {
    228   "kernelspec": {
    229    "display_name": "Python 3",
    230    "language": "python",
    231    "name": "python3"
    232   },
    233   "language_info": {
    234    "codemirror_mode": {
    235     "name": "ipython",
    236     "version": 3
    237    },
    238    "file_extension": ".py",
    239    "mimetype": "text/x-python",
    240    "name": "python",
    241    "nbconvert_exporter": "python",
    242    "pygments_lexer": "ipython3",
    243    "version": "3.8.8"
    244   }
    245  },
    246  "nbformat": 4,
    247  "nbformat_minor": 2
    248 }