{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\"The" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Mean-Variance Portfolio Class" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Without doubt, the Markowitz (1952) **mean-variance portfolio theory** is a cornerstone of modern financial theory. This section illustrates the use of the `mean_variance_portfolio` class to implement this approach." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from dx import *\n", "from pylab import plt\n", "plt.style.use('seaborn')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Market Environment and Portfolio Object" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We start by instantiating a `market environment` object which in particular contains a list of **ticker symbols** in which we are interested in." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "ma = market_environment('ma', dt.date(2010, 1, 1))\n", "ma.add_list('symbols', ['AAPL.O', 'INTC.O', 'MSFT.O', 'GS.N'])\n", "ma.add_constant('source', 'google')\n", "ma.add_constant('final date', dt.date(2014, 3, 1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using pandas under the hood, the class **retrieves historial stock price data** from either Yahoo! Finance of Google." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 16.1 ms, sys: 4.44 ms, total: 20.5 ms\n", "Wall time: 179 ms\n" ] } ], "source": [ "%%time\n", "port = mean_variance_portfolio('am_tech_stocks', ma)\n", " # instantiates the portfolio class\n", " # and retrieves all the time series data needed" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['AAPL.O', 'MSFT.O', 'INTC.O', 'AMZN.O', 'GS.N', 'SPY', '.SPX', '.VIX',\n", " 'EUR=', 'XAU=', 'GDX', 'GLD'],\n", " dtype='object')" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "port.get_available_symbols()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Basic Statistics" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since no **portfolio weights** have been provided, the class defaults to equal weights." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'AAPL.O': 0.25, 'GS.N': 0.25, 'INTC.O': 0.25, 'MSFT.O': 0.25}" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "port.get_weights()\n", " # defaults to equal weights" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Given these weights you can calculate the **portfolio return** via the method `get_portfolio_return`." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.12192541796457722" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "port.get_portfolio_return()\n", " # expected (= historical mean) return" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Analogously, you can call `get_portfolio_variance` to get the historical **portfolio variance**." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.03365126396235786" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "port.get_portfolio_variance()\n", " # expected (= historical) variance" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The class also has a neatly printable `string` representation." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Portfolio am_tech_stocks \n", "--------------------------\n", "return 0.122\n", "volatility 0.183\n", "Sharpe ratio 0.665\n", "\n", "Positions\n", "symbol | weight | ret. con. \n", "--------------------------- \n", "AAPL.O | 0.250 | 0.055 \n", "INTC.O | 0.250 | 0.025 \n", "MSFT.O | 0.250 | 0.032 \n", "GS.N | 0.250 | 0.011 \n", "\n" ] } ], "source": [ "print(port)\n", " # ret. con. is \"return contribution\"\n", " # given the mean return and the weight\n", " # of the security" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setting Weights" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Via the method `set_weights` the weights of the single portfolio components can be adjusted." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "port.set_weights([0.6, 0.2, 0.1, 0.1])" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Portfolio am_tech_stocks \n", "--------------------------\n", "return 0.168\n", "volatility 0.201\n", "Sharpe ratio 0.837\n", "\n", "Positions\n", "symbol | weight | ret. con. \n", "--------------------------- \n", "AAPL.O | 0.600 | 0.131 \n", "INTC.O | 0.200 | 0.020 \n", "MSFT.O | 0.100 | 0.013 \n", "GS.N | 0.100 | 0.004 \n", "\n" ] } ], "source": [ "print(port)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You cal also easily **check results for different weights** with changing the attribute values of an object." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.16804275, 0.20076851, 0.83699753])" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "port.test_weights([0.6, 0.2, 0.1, 0.1])\n", " # returns av. return + vol + Sharp ratio\n", " # without setting new weights" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us implement a **Monte Carlo simulation** over potential portfolio weights." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "# Monte Carlo simulation of portfolio compositions\n", "rets = []\n", "vols = []\n", "\n", "for w in range(500):\n", " weights = np.random.random(4)\n", " weights /= sum(weights)\n", " r, v, sr = port.test_weights(weights)\n", " rets.append(r)\n", " vols.append(v)\n", "\n", "rets = np.array(rets)\n", "vols = np.array(vols)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And the simulation results **visualized**." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nj+ijQq0AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "plt.figure(figsize=(10, 6))\n", "plt.scatter(vols, rets, c=rets / vols, marker='o', cmap='coolwarm')\n", "plt.xlabel('expected volatility')\n", "plt.ylabel('expected return')\n", "plt.colorbar(label='Sharpe ratio');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Optimizing Portfolio Composition" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One of the major application areas of the mean-variance portfolio theory and therewith of this DX Analytics class it the **optimization of the portfolio composition**. Different target functions can be used to this end." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Return" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The first target function might be the **portfolio return**." ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "port.optimize('Return')\n", " # maximizes expected return of portfolio\n", " # no volatility constraint" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Portfolio am_tech_stocks \n", "--------------------------\n", "return 0.219\n", "volatility 0.255\n", "Sharpe ratio 0.858\n", "\n", "Positions\n", "symbol | weight | ret. con. \n", "--------------------------- \n", "AAPL.O | 1.000 | 0.219 \n", "INTC.O | 0.000 | 0.000 \n", "MSFT.O | 0.000 | 0.000 \n", "GS.N | 0.000 | 0.000 \n", "\n" ] } ], "source": [ "print(port)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Instead of maximizing the portfolio return without any constraints, you can also set a (sensible/possible) **maximum target volatility** level as a constraint. Both, in an **exact sense** (\"equality constraint\") ..." ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "port.optimize('Return', constraint=0.225, constraint_type='Exact')\n", " # interpretes volatility constraint as equality" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Portfolio am_tech_stocks \n", "--------------------------\n", "return 0.095\n", "volatility 0.225\n", "Sharpe ratio 0.421\n", "\n", "Positions\n", "symbol | weight | ret. con. \n", "--------------------------- \n", "AAPL.O | 0.294 | 0.064 \n", "INTC.O | 0.000 | 0.000 \n", "MSFT.O | 0.000 | 0.000 \n", "GS.N | 0.706 | 0.030 \n", "\n" ] } ], "source": [ "print(port)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "... or just a an **upper bound** (\"inequality constraint\")." ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "port.optimize('Return', constraint=0.4, constraint_type='Bound')\n", " # interpretes volatility constraint as inequality (upper bound)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Portfolio am_tech_stocks \n", "--------------------------\n", "return 0.219\n", "volatility 0.255\n", "Sharpe ratio 0.858\n", "\n", "Positions\n", "symbol | weight | ret. con. \n", "--------------------------- \n", "AAPL.O | 1.000 | 0.219 \n", "INTC.O | 0.000 | 0.000 \n", "MSFT.O | 0.000 | 0.000 \n", "GS.N | 0.000 | 0.000 \n", "\n" ] } ], "source": [ "print(port)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Risk" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The class also allows you to minimize **portfolio risk**." ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "port.optimize('Vol')\n", " # minimizes expected volatility of portfolio\n", " # no return constraint" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Portfolio am_tech_stocks \n", "--------------------------\n", "return 0.128\n", "volatility 0.182\n", "Sharpe ratio 0.702\n", "\n", "Positions\n", "symbol | weight | ret. con. \n", "--------------------------- \n", "AAPL.O | 0.250 | 0.055 \n", "INTC.O | 0.275 | 0.027 \n", "MSFT.O | 0.305 | 0.039 \n", "GS.N | 0.169 | 0.007 \n", "\n" ] } ], "source": [ "print(port)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And, as before, to set **constraints** (in this case) for the target return level." ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "port.optimize('Vol', constraint=0.175, constraint_type='Exact')\n", " # interpretes return constraint as equality" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Portfolio am_tech_stocks \n", "--------------------------\n", "return 0.175\n", "volatility 0.199\n", "Sharpe ratio 0.879\n", "\n", "Positions\n", "symbol | weight | ret. con. \n", "--------------------------- \n", "AAPL.O | 0.561 | 0.123 \n", "INTC.O | 0.118 | 0.012 \n", "MSFT.O | 0.321 | 0.041 \n", "GS.N | 0.000 | 0.000 \n", "\n" ] } ], "source": [ "print(port)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [], "source": [ "port.optimize('Vol', constraint=0.20, constraint_type='Bound')\n", " # interpretes return constraint as inequality (upper bound)" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Portfolio am_tech_stocks \n", "--------------------------\n", "return 0.200\n", "volatility 0.225\n", "Sharpe ratio 0.889\n", "\n", "Positions\n", "symbol | weight | ret. con. \n", "--------------------------- \n", "AAPL.O | 0.798 | 0.174 \n", "INTC.O | 0.000 | 0.000 \n", "MSFT.O | 0.202 | 0.026 \n", "GS.N | 0.000 | 0.000 \n", "\n" ] } ], "source": [ "print(port)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sharpe Ratio" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Often, the target of the portfolio optimization efforts is the so called **Sharpe ratio**. The `mean_variance_portfolio` class of DX Analytics assumes a **risk-free rate of zero** in this context." ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "port.optimize('Sharpe')\n", " # maximize Sharpe ratio" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Portfolio am_tech_stocks \n", "--------------------------\n", "return 0.192\n", "volatility 0.215\n", "Sharpe ratio 0.893\n", "\n", "Positions\n", "symbol | weight | ret. con. \n", "--------------------------- \n", "AAPL.O | 0.713 | 0.156 \n", "INTC.O | 0.000 | 0.000 \n", "MSFT.O | 0.287 | 0.036 \n", "GS.N | 0.000 | 0.000 \n", "\n" ] } ], "source": [ "print(port)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Efficient Frontier" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Another application area is to derive the **efficient frontier** in the mean-variance space. These are all these portfolios for which there is **no portfolio with both lower risk and higher return**. The method `get_efficient_frontier` yields the desired results." ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 4.24 s, sys: 10.8 ms, total: 4.25 s\n", "Wall time: 4.25 s\n" ] } ], "source": [ "%%time\n", "evols, erets = port.get_efficient_frontier(100)\n", " # 100 points of the effient frontier" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The plot with the **random and efficient portfolios**." ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10, 6))\n", "plt.scatter(vols, rets, c=rets / vols, marker='o')\n", "plt.scatter(evols, erets, c=erets / evols, marker='o', cmap='coolwarm')\n", "plt.xlabel('expected volatility')\n", "plt.ylabel('expected return')\n", "plt.colorbar(label='Sharpe ratio')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Capital Market Line" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The **capital market line** is another key element of the mean-variance portfolio approach representing all those risk-return combinations (in mean-variance space) that are possible to form from a **risk-less money market account** and **the market portfolio** (or another appropriate substitute efficient portfolio)." ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 4.04 s, sys: 4.81 ms, total: 4.05 s\n", "Wall time: 4.05 s\n" ] } ], "source": [ "%%time\n", "cml, optv, optr = port.get_capital_market_line(riskless_asset=0.05)\n", " # capital market line for effiecient frontier and risk-less short rate" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ".>" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cml # lambda function for capital market line" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following plot illustrates that the capital market line has an ordinate value equal to the **risk-free rate** (the safe return of the money market account) and is tangent to the **efficient frontier**." ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10, 6))\n", "plt.plot(evols, erets, lw=2.0, label='efficient frontier')\n", "plt.plot((0, 0.4), (cml(0), cml(0.4)), lw=2.0, label='capital market line')\n", "plt.plot(optv, optr, 'r*', markersize=10, label='optimal portfolio')\n", "plt.legend(loc=0)\n", "plt.ylim(0)\n", "plt.xlabel('expected volatility')\n", "plt.ylabel('expected return')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Portfolio return and risk of the efficient portfolio used are:" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.20507680142118542" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "optr" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.23227456779433622" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "optv" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The **portfolio composition** can be derived as follows." ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [], "source": [ "port.optimize('Vol', constraint=optr, constraint_type='Exact')" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Portfolio am_tech_stocks \n", "--------------------------\n", "return 0.205\n", "volatility 0.232\n", "Sharpe ratio 0.883\n", "\n", "Positions\n", "symbol | weight | ret. con. \n", "--------------------------- \n", "AAPL.O | 0.853 | 0.186 \n", "INTC.O | 0.000 | 0.000 \n", "MSFT.O | 0.147 | 0.019 \n", "GS.N | 0.000 | 0.000 \n", "\n" ] } ], "source": [ "print(port)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Or also in this way." ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [], "source": [ "port.optimize('Return', constraint=optv, constraint_type='Exact')" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Portfolio am_tech_stocks \n", "--------------------------\n", "return 0.083\n", "volatility 0.232\n", "Sharpe ratio 0.357\n", "\n", "Positions\n", "symbol | weight | ret. con. \n", "--------------------------- \n", "AAPL.O | 0.226 | 0.050 \n", "INTC.O | 0.000 | 0.000 \n", "MSFT.O | 0.000 | 0.000 \n", "GS.N | 0.774 | 0.033 \n", "\n" ] } ], "source": [ "print(port)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## More Assets" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As a larger, more realistic example, consider a larger set of assets." ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['AAPL.O', 'MSFT.O', 'INTC.O', 'AMZN.O', 'GS.N', 'SPY', '.SPX']" ] }, "execution_count": 71, "metadata": {}, "output_type": "execute_result" } ], "source": [ "symbols = list(port.get_available_symbols())[:7]\n", "symbols" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [], "source": [ "ma = market_environment('ma', dt.date(2010, 1, 1))\n", "ma.add_list('symbols', symbols)\n", "ma.add_constant('source', 'google')\n", "ma.add_constant('final date', dt.date(2014, 3, 1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Data retrieval** in this case takes a bit." ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 14.2 ms, sys: 4.63 ms, total: 18.8 ms\n", "Wall time: 212 ms\n" ] } ], "source": [ "%%time\n", "djia = mean_variance_portfolio('djia', ma)\n", " # defining the portfolio and retrieving the data" ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.021982829770393886 0.14826607761181884\n", "CPU times: user 55.8 ms, sys: 1.83 ms, total: 57.6 ms\n", "Wall time: 56.1 ms\n" ] } ], "source": [ "%%time\n", "djia.optimize('Vol')\n", "print(djia.variance, djia.variance ** 0.5)\n", " # minimium variance & volatility in decimals" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Given the larger data set now used, **efficient frontier** ..." ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 2.28 s, sys: 3.93 ms, total: 2.28 s\n", "Wall time: 2.28 s\n" ] } ], "source": [ "%%time\n", "evols, erets = djia.get_efficient_frontier(25)\n", " # efficient frontier of DJIA" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "... and **capital market line** derivations take also longer." ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 8.4 s, sys: 6.07 ms, total: 8.4 s\n", "Wall time: 8.4 s\n" ] } ], "source": [ "%%time\n", "cml, optv, optr = djia.get_capital_market_line(riskless_asset=0.01)\n", " # capital market line and optimal (tangent) portfolio" ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nKg2zAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10, 6))\n", "plt.plot(evols, erets, lw=2.0, label='efficient frontier')\n", "plt.plot((0, 0.4), (cml(0), cml(0.4)), lw=2.0, label='capital market line')\n", "plt.plot(optv, optr, 'r*', markersize=10, label='optimal portfolio')\n", "plt.legend(loc=0)\n", "plt.ylim(0)\n", "plt.xlabel('expected volatility')\n", "plt.ylabel('expected return')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Copyright, License & Disclaimer**\n", "\n", "© Dr. Yves J. Hilpisch | The Python Quants GmbH\n", "\n", "DX Analytics (the \"dx library\" or \"dx package\") is licensed under the GNU Affero General\n", "Public License version 3 or later (see http://www.gnu.org/licenses/).\n", "\n", "DX Analytics comes with no representations or warranties, to the extent\n", "permitted by applicable law.\n", "\n", "http://tpq.io | [dx@tpq.io](mailto:team@tpq.io) |\n", "http://twitter.com/dyjh\n", "\n", "\"The
\n", "\n", "**Quant Platform** | http://pqp.io\n", "\n", "**Python for Finance Training** | http://training.tpq.io\n", "\n", "**Certificate in Computational Finance** | http://compfinance.tpq.io\n", "\n", "**Derivatives Analytics with Python (Wiley Finance)** |\n", "http://dawp.tpq.io\n", "\n", "**Python for Finance (2nd ed., O'Reilly)** |\n", "http://py4fi.tpq.io" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.8" } }, "nbformat": 4, "nbformat_minor": 1 }