python-pour-finance/09-Python-Finance-Fondamentaux/03-CAPM-Capital-Asset-Prici...

938 lines
168 KiB
Plaintext
Raw Normal View History

2023-08-21 15:12:19 +00:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# CAPM - Capital Asset Pricing Model \n",
"## ou Le Modèle d'Evaluation Des Actifs Financiers (MEDAF)\n",
"\n",
"Regardez la vidéo pour un aperçu complet ou lis [ceci](https://fr.wikipedia.org/wiki/Mod%C3%A8le_d%27%C3%A9valuation_des_actifs_financiers)\n",
"\n",
"Rendements des portefeuilles:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## $r_p(t) = \\sum\\limits_{i}^{n}w_i r_i(t)$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Poids du Marché:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## $ w_i = \\frac{MarketCap_i}{\\sum_{j}^{n}{MarketCap_j}} $\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### CAPM d'un portefeuille"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"## $ r_p(t) = \\beta_pr_m(t) + \\sum\\limits_{i}^{n}w_i \\alpha_i(t)$"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# Modèle CAPM en tant que simple régression linéaire"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"from scipy import stats"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Help on function linregress in module scipy.stats._stats_mstats_common:\n",
"\n",
"linregress(x, y=None)\n",
" Calculate a linear least-squares regression for two sets of measurements.\n",
" \n",
" Parameters\n",
" ----------\n",
" x, y : array_like\n",
" Two sets of measurements. Both arrays should have the same length. If\n",
" only `x` is given (and ``y=None``), then it must be a two-dimensional\n",
" array where one dimension has length 2. The two sets of measurements\n",
" are then found by splitting the array along the length-2 dimension. In\n",
" the case where ``y=None`` and `x` is a 2x2 array, ``linregress(x)`` is\n",
" equivalent to ``linregress(x[0], x[1])``.\n",
" \n",
" Returns\n",
" -------\n",
" slope : float\n",
" Slope of the regression line.\n",
" intercept : float\n",
" Intercept of the regression line.\n",
" rvalue : float\n",
" Correlation coefficient.\n",
" pvalue : float\n",
" Two-sided p-value for a hypothesis test whose null hypothesis is\n",
" that the slope is zero, using Wald Test with t-distribution of\n",
" the test statistic.\n",
" stderr : float\n",
" Standard error of the estimated gradient.\n",
" \n",
" See also\n",
" --------\n",
" :func:`scipy.optimize.curve_fit` : Use non-linear\n",
" least squares to fit a function to data.\n",
" :func:`scipy.optimize.leastsq` : Minimize the sum of\n",
" squares of a set of equations.\n",
" \n",
" Notes\n",
" -----\n",
" Missing values are considered pair-wise: if a value is missing in `x`,\n",
" the corresponding value in `y` is masked.\n",
" \n",
" Examples\n",
" --------\n",
" >>> import matplotlib.pyplot as plt\n",
" >>> from scipy import stats\n",
" \n",
" Generate some data:\n",
" \n",
" >>> np.random.seed(12345678)\n",
" >>> x = np.random.random(10)\n",
" >>> y = 1.6*x + np.random.random(10)\n",
" \n",
" Perform the linear regression:\n",
" \n",
" >>> slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)\n",
" >>> print(\"slope: %f intercept: %f\" % (slope, intercept))\n",
" slope: 1.944864 intercept: 0.268578\n",
" \n",
" To get coefficient of determination (R-squared):\n",
" \n",
" >>> print(\"R-squared: %f\" % r_value**2)\n",
" R-squared: 0.735498\n",
" \n",
" Plot the data along with the fitted line:\n",
" \n",
" >>> plt.plot(x, y, 'o', label='original data')\n",
" >>> plt.plot(x, intercept + slope*x, 'r', label='fitted line')\n",
" >>> plt.legend()\n",
" >>> plt.show()\n",
" \n",
" Example for the case where only x is provided as a 2x2 array:\n",
" \n",
" >>> x = np.array([[0, 1], [0, 2]])\n",
" >>> r = stats.linregress(x)\n",
" >>> r.slope, r.intercept\n",
" (2.0, 0.0)\n",
"\n"
]
}
],
"source": [
"help(stats.linregress)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"import pandas_datareader as web"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"spy_etf = web.DataReader('SPY','yahoo')"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"DatetimeIndex: 1258 entries, 2015-01-23 to 2020-01-22\n",
"Data columns (total 6 columns):\n",
"High 1258 non-null float64\n",
"Low 1258 non-null float64\n",
"Open 1258 non-null float64\n",
"Close 1258 non-null float64\n",
"Volume 1258 non-null float64\n",
"Adj Close 1258 non-null float64\n",
"dtypes: float64(6)\n",
"memory usage: 68.8 KB\n"
]
}
],
"source": [
"spy_etf.info()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>High</th>\n",
" <th>Low</th>\n",
" <th>Open</th>\n",
" <th>Close</th>\n",
" <th>Volume</th>\n",
" <th>Adj Close</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2015-01-23</th>\n",
" <td>206.100006</td>\n",
" <td>204.809998</td>\n",
" <td>205.789993</td>\n",
" <td>204.970001</td>\n",
" <td>117516800.0</td>\n",
" <td>185.742508</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2015-01-26</th>\n",
" <td>205.559998</td>\n",
" <td>203.850006</td>\n",
" <td>204.710007</td>\n",
" <td>205.449997</td>\n",
" <td>92009700.0</td>\n",
" <td>186.177475</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2015-01-27</th>\n",
" <td>204.119995</td>\n",
" <td>201.740005</td>\n",
" <td>202.970001</td>\n",
" <td>202.740005</td>\n",
" <td>134044600.0</td>\n",
" <td>183.721680</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2015-01-28</th>\n",
" <td>204.289993</td>\n",
" <td>199.910004</td>\n",
" <td>204.169998</td>\n",
" <td>200.139999</td>\n",
" <td>168514300.0</td>\n",
" <td>181.365585</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2015-01-29</th>\n",
" <td>202.300003</td>\n",
" <td>198.679993</td>\n",
" <td>200.380005</td>\n",
" <td>201.990005</td>\n",
" <td>173585400.0</td>\n",
" <td>183.042038</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" High Low Open Close Volume \\\n",
"Date \n",
"2015-01-23 206.100006 204.809998 205.789993 204.970001 117516800.0 \n",
"2015-01-26 205.559998 203.850006 204.710007 205.449997 92009700.0 \n",
"2015-01-27 204.119995 201.740005 202.970001 202.740005 134044600.0 \n",
"2015-01-28 204.289993 199.910004 204.169998 200.139999 168514300.0 \n",
"2015-01-29 202.300003 198.679993 200.380005 201.990005 173585400.0 \n",
"\n",
" Adj Close \n",
"Date \n",
"2015-01-23 185.742508 \n",
"2015-01-26 186.177475 \n",
"2015-01-27 183.721680 \n",
"2015-01-28 181.365585 \n",
"2015-01-29 183.042038 "
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spy_etf.head()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"# prendre les dates du DatetimeIndex de spy_etf\n",
"start = pd.to_datetime('2015-01-23')\n",
"end = pd.to_datetime('2020-01-22')"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"aapl = web.DataReader('AAPL','yahoo',start,end)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>High</th>\n",
" <th>Low</th>\n",
" <th>Open</th>\n",
" <th>Close</th>\n",
" <th>Volume</th>\n",
" <th>Adj Close</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2015-01-23</th>\n",
" <td>113.750000</td>\n",
" <td>111.529999</td>\n",
" <td>112.300003</td>\n",
" <td>112.980003</td>\n",
" <td>46464800.0</td>\n",
" <td>103.807991</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2015-01-26</th>\n",
" <td>114.360001</td>\n",
" <td>112.800003</td>\n",
" <td>113.739998</td>\n",
" <td>113.099998</td>\n",
" <td>55615000.0</td>\n",
" <td>103.918228</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2015-01-27</th>\n",
" <td>112.480003</td>\n",
" <td>109.029999</td>\n",
" <td>112.419998</td>\n",
" <td>109.139999</td>\n",
" <td>95568700.0</td>\n",
" <td>100.279716</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2015-01-28</th>\n",
" <td>118.120003</td>\n",
" <td>115.309998</td>\n",
" <td>117.629997</td>\n",
" <td>115.309998</td>\n",
" <td>146477100.0</td>\n",
" <td>105.948822</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2015-01-29</th>\n",
" <td>119.190002</td>\n",
" <td>115.559998</td>\n",
" <td>116.320000</td>\n",
" <td>118.900002</td>\n",
" <td>84436400.0</td>\n",
" <td>109.247391</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" High Low Open Close Volume \\\n",
"Date \n",
"2015-01-23 113.750000 111.529999 112.300003 112.980003 46464800.0 \n",
"2015-01-26 114.360001 112.800003 113.739998 113.099998 55615000.0 \n",
"2015-01-27 112.480003 109.029999 112.419998 109.139999 95568700.0 \n",
"2015-01-28 118.120003 115.309998 117.629997 115.309998 146477100.0 \n",
"2015-01-29 119.190002 115.559998 116.320000 118.900002 84436400.0 \n",
"\n",
" Adj Close \n",
"Date \n",
"2015-01-23 103.807991 \n",
"2015-01-26 103.918228 \n",
"2015-01-27 100.279716 \n",
"2015-01-28 105.948822 \n",
"2015-01-29 109.247391 "
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"aapl.head()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x1a215f0090>"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 720x576 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"aapl['Close'].plot(label='AAPL',figsize=(10,8))\n",
"spy_etf['Close'].plot(label='SPY Index')\n",
"plt.legend()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Compaison de Rendements Cumulatifs"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"aapl['Cumulative'] = aapl['Close']/aapl['Close'].iloc[0]\n",
"spy_etf['Cumulative'] = spy_etf['Close']/spy_etf['Close'].iloc[0]"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Cumulative Return')"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlkAAAHYCAYAAAB+/P2nAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdd5xcVf3/8deZ3dlesslm05NNJwlJSAjNUIJg6CKiCKIIFvQLKpYfiihV7Irf75ci5itYMaBUQXoTCDUJCRDSkw3ZtO19d+r5/XFnZme2zu7O7mx5Px+PPDJz77n3ntkkzIfPOedzjLUWEREREUksV7I7ICIiIjIcKcgSERER6QcKskRERET6gYIsERERkX6gIEtERESkHyjIEhEREekHCrJEZFAyxtxojPlbH67fZIxZkcAuiYj0iIIsEYlhjPmsMWatMabBGHPAGPOkMeb4ZPerK8aYPxljbok+Zq1dYK19KcHPKTbG2NDPpsEYU2KMuaYH1/cpcBSRoUVBlohEGGO+A/w38FNgHDAVuBM4N5n9GoRGWWtzgE8B1xljPjYQDzXGpA7Ec0QkMRRkiQgAxph84GbgSmvtQ9baRmutz1r7mLX26lCbmIyRMWaFMaY06n2JMeZqY8y7xphGY8zdxphxoWxYvTHmOWNMQUfXRl1/aif9+6cx5qAxptYY87IxZkHo+OXAxcD3Qtmlx6LvZYyZaIxpNsaMjrrXEmNMhTHGHXr/RWPMZmNMtTHmaWPMtHh+ZtbatcAm4Iioe080xjxojCk3xuw2xnwzdPx04FrgM6F+buzoM0dnu6IyZ18yxnwIvBB17AvGmA9Dn+OH8fRXRAaWgiwRCTsOyAAe7uN9zgc+BswBzgGexAkuCnH+m/PNXt73SWA2UASsB+4FsNauCr3+pbU2x1p7TvRF1tr9wOuhfoV9FnjAWuszxnwi1L9PAmOBV4DV8XTIGHMscDiwI/TeBTwGbAQmAacA3zLGnGatfQonQ3h/qJ+Le/DZTwLmAadFHTsemBt6xvXGmHk9uJ+IDAAFWSISNgaosNb6+3if26y1h6y1+3ACljette9Yaz04AdyS3tzUWnuPtbY+dJ8bgcWh7Fs8/g5cBGCMMcCFoWMAXwV+Zq3dHPrsPwWO6CabVWGMacYJ3u4EHgkdPwoYa6292VrrtdbuAv4v9Ly+uDGUWWyOOnaTtbbZWrsRJ6jrSdAmIgNAQZaIhFUChQmY93Mo6nVzB+9zenpDY0yKMebnxpidxpg6oCR0qjDOWzwAHGeMmQicCFicABBgGvA/xpgaY0wNUAUYnExUZwpxPsf/A1YA7qh7TQzfK3S/a3Hmt/XF3g6OHYx63UQvfq4i0r8UZIlI2OtAC/CJLto0AllR78f34Xkx9zLGpOAM13XksziT708F8oHi8GWh321XD7LW1gDPABeE7rXaWhu+Zi/wVWvtqKhfmdba17q5Z8Ba+xucn9kVUffa3eZeudbaM7voZzw/0y4/n4gMTgqyRAQAa20tcD1whzHmE8aYLGOM2xhzhjHml6FmG4AzjTGjjTHjgW/14ZHbgAxjzFmhCeg/AtI7aZsLeHCybVk4Q3rRDgEzunne34FLcOZm/T3q+F3AD6Im0ucbYz7dg8/xc5xJ9xnAW0CdMeb7xpjMUAbucGPMUVH9LA7N3QrbAFwY+lkvw1mxKCLDgIIsEYmw1t4KfAcn4CnHycx8ndY5R3/Fmf9TgpMZur8Pz6rFyQD9AdiHk9Ep7aT5X4A9oXYfAG+0OX83MD80RPdI24tD/oUzcf5QaB5TuB8PA78A7gsNRb4PnNGDj/JvoBr4irU2gDPZ/whgN1AR+nzhuWP/DP1eaYxZH3p9HTAzdI+biA0ARWQIM60ZcxERERFJFGWyRERERPqBgiwRERGRfqAgS0RERKQfKMgSERER6QcKskRERET6waDc0b2wsNAWFxcnuxsiIiIi3Vq3bl2FtbZdMeVBGWQVFxezdu3aZHdDREREpFvGmD0dHddwoYiIiEg/UJAlIiIi0g8UZImIiIj0g0E5J0tERET6zufzUVpaSktLS7K7MixkZGQwefJk3G53XO0VZImIiAxTpaWl5ObmUlxcjDEm2d0Z0qy1VFZWUlpayvTp0+O6RsOFIiIiw1RLSwtjxoxRgJUAxhjGjBnTo6yggiwREZFhTAFW4vT0Z6kgS0RERPrVww8/jDGGLVu2xBz/7W9/S0ZGBrW1tZFjL730Evn5+SxZsoR58+Zx0003RY6fffbZA9rvvlKQJSIiIv1q9erVHH/88dx3333tjh911FE8/PDDMcdPOOEE3nnnHdauXcvf/vY31q1bN5DdTRgFWSIiItJvGhoaWLNmDXfffXdMkLVz504aGhq45ZZbWL16dYfXZmdnc+SRR7Jz586B6m5CaXWhiIjICHDTY5v4YH9dQu85f2IeN5yzoMs2jzzyCKeffjpz5sxh9OjRrF+/nqVLl7J69WouuugiTjjhBLZu3UpZWRlFRUUx11ZWVvLGG29w3XXXUV5entC+DwRlskRERKTfrF69mgsvvBCACy+8MJK1uu+++7jwwgtxuVx88pOf5J///GfkmldeeYUlS5awcuVKrrnmGhYs6DqQG6yUyRIRERkBuss49YfKykpeeOEF3n//fYwxBAIBjDF87nOfY/v27XzsYx8DwOv1MmPGDK688krAmZP1+OOPD3h/E02ZLBEREekXDzzwAJdccgl79uyhpKSEvXv3Mn36dL71rW9x4403UlJSQklJCfv372ffvn3s2bMn2V1OKAVZIiIi0i9Wr17NeeedF3Ps/PPPp6SkpN3x8847r93qw7aef/55Jk+eHPn1+uuvJ7zP8apo8HCoruvCpMZaO0Ddid+yZcvs2rVrk90NERGRIW3z5s3Mmzcv2d0YVsI/0+U/f4F9Nc089vXjWTRl1Dpr7bK2bZXJEhEREemhfTXNAJxz+6udtlGQJSIiItIDz2w6GFc7BVkiIiIiPXD5X+OrQK8gS0RERCROwai57CvmjuVnn1zYaVsFWSIiIiJxCgZbg6x5E/K46OipnbZVkCUiIiISp6gYi5z0rmu6K8gSERGRfvOTn/yEBQsWsGjRIo444gjefPNNAFasWMHcuXNZvHgxy5cvZ+vWrVx77bV8//vfj1y7Z88eZsyYQU1NTcw9L730Uh544IEe9aO4uJiKioo+f55AVJTVXZClbXVERESkX7z++us8/vjjrF+/nvT0dCoqKvB6vZHz9957L8uWLWPVqlVcffXV3H///SxZsoRLL72UefPmcdVVV/HjH/+YUaNGJfFTxIqek5WtTJaIiIgkw4EDBygsLCQ9PR2AwsJCJk6c2K7diSeeyI4dO8jMzOTWW2/liiuu4Mknn6S+vp6LL764y2cUFxdzww03sHTpUhYuXMiWLVsAZ9/ElStXsmTJEr761a8SXXz9b3/7G0cffTRHHHEEX/3qVwkEAuzZs4fZs2dTUVFBMBjkhBNO4Jlnnmn3vIBNYCbLGDMF+AswHggCq6y1/9OmzdVA+KeQCswDxlprq4wxJUA9EAD8HVVEFRERkX725DVw8L3E3nP8Qjjj552eXrlyJTfffDNz5szh1FNP5TOf+QwnnXRSu3aPPfYYCxc6q/TOPPNM7r77bi655BJefbXzQp/RCgsLWb9+PXfeeSe//vWv+cMf/sBNN93E8ccfz/XXX8+///1vVq1aBTgV2++//37WrFmD2+3miiuu4N577+WSSy7h+9//Pl/72tc45phjmD9/PitXrmz3rOiJ79npKV32K57hQj/wXWvtemNMLrDOGPOstfaDcANr7a+AXwEYY84Bvm2trYq6x8nW2r4PhIqIiMiQkZOTw7p163jllVd48cUX+cxnPsPPf/5zLr30UgAuvvhiMjMzKS4u5rbbbotcd+WVV9Lc3MzcuXPjes4nP/lJAI488kgeeughAF5++eXI67POOouCggLA2f9w3bp1HHXUUQA0NzdTVFQEwJe//GX++c9/ctddd7Fhw4YOnxWImvje7A102a9ugyxr7QHgQOh1vTF
"text/plain": [
"<Figure size 720x576 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"aapl['Cumulative'].plot(label='AAPL',figsize=(10,8))\n",
"spy_etf['Cumulative'].plot(label='SPY Index')\n",
"plt.legend()\n",
"plt.title('Cumulative Return')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Obtenir un Rendement Quotidien"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"aapl['Daily Return'] = aapl['Close'].pct_change(1)\n",
"spy_etf['Daily Return'] = spy_etf['Close'].pct_change(1)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x1a21c53c10>"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(aapl['Daily Return'],spy_etf['Daily Return'],alpha=0.3)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x1a21c7e4d0>"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"aapl['Daily Return'].hist(bins=100)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x1a21d5cd90>"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD4CAYAAAAXUaZHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAQ4ElEQVR4nO3df4wc5X3H8fc3uPy8BNshXF2b1kSgVAlW03AiSZGqu5A0BNpgNaSlihJDifxHkzRKjIRTKtG0qQppaX6oVSsrRHGllIMAFahJW7mUa9o/oLGB1hCH2nEosXFNo4DbIzSR1W//2DmxHHv4dmfm9va590s67e7MszPPfj3+3HPPzs5GZiJJKssrht0BSVLzDHdJKpDhLkkFMtwlqUCGuyQVaNWwOwBw1lln5caNGxvf7nPPPccZZ5zR+HZHjXXosA7WYE4pddizZ8/3MvM1vdYti3DfuHEju3fvbny7MzMzTE5ONr7dUWMdOqyDNZhTSh0i4j8WWue0jCQVyHCXpAIZ7pJUIMNdkgpkuEtSgQx3SSqQ4S5JBTLcJalAhrskFWhZfEJVatPG7V8FYNum40wOtyvSknHkLkkFMtwlqUCGuyQVyHCXpAKdMNwj4osR8XREPNq1bG1E7IqI/dXtmmp5RMTnI+JARPxbRLypzc5LknpbzMj9S8Cl85ZtB+7LzPOB+6rHAO8Czq9+tgJ/1kw3JUn9OGG4Z+bXge/PW3wFsLO6vxPY3LX8L7LjAWB1RKxrqrOSpMUZ9Dz38cw8ApCZRyLi7Gr5euC7Xe0OVcuOzN9ARGylM7pnfHycmZmZAbuysNnZ2Va2O2pWeh22bToOwPhprOg6gMfCnJVQh6Y/xBQ9lmWvhpm5A9gBMDExkW185VUpX6VV10qvw9VdH2L6lRVcB/BYmLMS6jDo2TJH56Zbqtunq+WHgHO62m0Anhq8e5KkQQwa7vcCW6r7W4B7upZ/oDpr5i3AsbnpG0nS0jnhtExE3AZMAmdFxCHgRuAm4I6IuBZ4Enhv1fxrwGXAAeAHwDUt9FmSdAInDPfM/LUFVl3So20CH6rbKUlSPX5CVZIKZLhLUoG8nruKNHcNd2mlcuQuSQUy3CWpQIa7JBXIcJekAhnuklQgw12SCmS4S1KBDHdJKpDhLkkFMtwlqUCGuyQVyGvLaMXqvv7MEzddPsSeSM1z5C5JBTLcJalAhrskFchwl6QCGe6SVCDDXZIKZLhLUoEMd0kqkOEuSQUy3CWpQIa7JBXIa8toRem+noxUMkfuklQgw12SCmS4S1KBaoV7RHwsIh6LiEcj4raIODUizo2IByNif0TcHhEnN9VZSdLiDBzuEbEe+E1gIjMvAE4CrgJuBj6TmecDzwDXNtFRSdLi1Z2WWQWcFhGrgNOBI8DbgDur9TuBzTX3IUnq08DhnpmHgT8CnqQT6seAPcCzmXm8anYIWF+3k5Kk/kRmDvbEiDXAXcCvAs8CX6ke35iZ51VtzgG+lpmbejx/K7AVYHx8/MLp6emB+vFyZmdnGRsba3y7o2Yl1mHv4WMvWTZ+Ghx9vnf7TevPbLlHy8NKPBZ6KaUOU1NTezJzote6Oh9iejvwncz8L4CIuBv4OWB1RKyqRu8bgKd6PTkzdwA7ACYmJnJycrJGV3qbmZmhje2OmpVYh6t7fFhp26bj3LK39yH/xPsmW+7R8rASj4VeVkId6sy5Pwm8JSJOj4gALgG+CdwPXFm12QLcU6+LkqR+1Zlzf5DOG6cPAXurbe0Argc+HhEHgFcDtzbQT0lSH2pdWyYzbwRunLf4IHBRne1KkurxE6qSVCDDXZIKZLhLUoEMd0kqkOEuSQUy3CWpQIa7JBXIcJekAvkF2SqGX34tvcCRuyQVyHCXpAIZ7pJUIMNdkgpkuEtSgQx3SSqQ4S5JBTLcJalAhrskFchwl6QCGe6SVCDDXZIKZLhLUoEMd0kqkOEuSQUy3CWpQIa7JBXIb2LSSPPbl6TeHLlLUoEMd0kqkOEuSQUy3CWpQLXCPSJWR8SdEfGtiNgXEW+NiLURsSsi9le3a5rqrCRpceqO3D8H/G1m/jTwM8A+YDtwX2aeD9xXPZYkLaGBwz0iXgX8PHArQGb+KDOfBa4AdlbNdgKb63ZSktSfyMzBnhjxRmAH8E06o/Y9wEeBw5m5uqvdM5n5kqmZiNgKbAUYHx+/cHp6eqB+vJzZ2VnGxsYa3+6oKbkOew8fW3Tb8dPg6PMnbrdp/Zk1erS8lXws9KOUOkxNTe3JzIle6+qE+wTwAHBxZj4YEZ8D/hv4yGLCvdvExETu3r17oH68nJmZGSYnJxvf7qgpuQ79fIhp26bj3LL3xJ/be+Kmy+t0aVkr+VjoRyl1iIgFw73OnPsh4FBmPlg9vhN4E3A0ItZVO14HPF1jH5KkAQwc7pn5n8B3I+J11aJL6EzR3AtsqZZtAe6p1UNJUt/qXlvmI8CXI+Jk4CBwDZ1fGHdExLXAk8B7a+5DktSnWuGemY8AveZ7LqmzXUlSPX5CVZIKZLhLUoEMd0kqkOEuSQUy3CWpQIa7JBXI71CV5um+pEHJlyJQ2Ry5S1KBDHdJKpDhLkkFMtwlqUCGuyQVyHCXpAIZ7pJUIM9z18jp56v1pJXKkbskFchwl6QCGe6SVCDn3KWXMX9+32vNaFQ4cpekAhnuklQgw12SCmS4S1KBDHdJKpDhLkkFMtwlqUCGuyQVyHCXpAIZ7pJUIMNdkgrktWWkPnRfa8brzGg5qz1yj4iTIuLhiPjr6vG5EfFgROyPiNsj4uT63ZQk9aOJaZmPAvu6Ht8MfCYzzweeAa5tYB+SpD7UCveI2ABcDnyhehzA24A7qyY7gc119iFJ6l9k5uBPjrgT+APglcB1wNXAA5l5XrX+HOBvMvOCHs/dCmwFGB8fv3B6enrgfixkdnaWsbGxxrc7akqrw97DxwZ63vhpcPT55vqxaf2ZzW1siZR2LAyqlDpMTU3tycyJXusGfkM1In4ReDoz90TE5NziHk17/vbIzB3ADoCJiYmcnJzs1ayWmZkZ2tjuqCmtDlcP+AXZ2zYd55a9zZ1D8MT7Jhvb1lIp7VgY1EqoQ50j/WLg3RFxGXAq8Crgs8DqiFiVmceBDcBT9bspSerHwHPumfmJzNyQmRuBq4B/yMz3AfcDV1bNtgD31O6lJKkvbZznfj0wHRGfAh4Gbm1hH9LQec67lrNGwj0zZ4CZ6v5B4KImtitJGoyXH5CkAhnuklQgw12SCmS4S1KBvCqklhXPQJGa4chdkgrkyF1qmH99aDlw5C5JBTLcJalAhrskFchwl6QCGe6SVCDDXZIKZLhLUoE8z13LlueLS4Nz5C5JBTLcJalAhrskFchwl6QCGe6SVCDPlpFa5Bk/GhZH7pJUIMNdkgpkuEtSgQx3SSqQ4S5JBfJsGWmJeOaMlpIjd0kqkCN3qQHdo3JpOXDkLkkFMtwlqUADh3tEnBMR90fEvoh4LCI+Wi1fGxG7ImJ/dbumue5Kkhajzpz7cWBbZj4UEa8E9kTELuBq4L7MvCkitgPbgevrd1UrmXPaUn8GHrln5pHMfKi6/z/APmA9cAWws2q2E9hct5OSpP5EZtbfSMRG4OvABcCTmbm6a90zmfmSqZmI2ApsBRgfH79wenq6dj/mm52dZWxsrPHtjppRqsPew8da2/b4aXD0+dY235dN688cyn5H6VhoUyl1mJqa2pOZE73W1Q73iBgD/hH4/cy8OyKeXUy4d5uYmMjdu3fX6kcvMzMzTE5ONr7dUTNKdWhz+mXbpuPcsnd5nP07rA8xjdKx0KZS6hARC4Z7rbNlIuLHgLuAL2fm3dXioxGxrlq/Dni6zj4kSf2rc7ZMALcC+zLzj7tW3Qtsqe5vAe4ZvHuSpEHU+Rv1YuD9wN6IeKRa9lvATcAdEXEt8CTw3npdVIk8+6U3rz+jpgwc7pn5z0AssPqSQbcrSapveby7JK0wjtDVNi8/IEkFMtwlqUCGuyQVyDl3LRnPkJGWjiN3SSqQ4S5JBTLcJalAhrskFchwl6QCebaMBuanLJv
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"spy_etf['Daily Return'].hist(bins=100)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"beta,alpha,r_value,p_value,std_err = stats.linregress(aapl['Daily Return'].iloc[1:],spy_etf['Daily Return'].iloc[1:])"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.36427945112845933"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"beta"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"7.509655057407941e-05"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"alpha"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.6716569379192504"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"r_value"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Et si nos actions étaient entièrement lié au SP500 ?"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Date\n",
"2015-01-23 NaN\n",
"2015-01-26 0.002342\n",
"2015-01-27 -0.013191\n",
"2015-01-28 -0.012824\n",
"2015-01-29 0.009244\n",
"Name: Daily Return, dtype: float64"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spy_etf['Daily Return'].head()"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"noise = np.random.normal(0,0.001,len(spy_etf['Daily Return'].iloc[1:]))"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 7.33560734e-05, -1.10514969e-03, 3.59585924e-04, ...,\n",
" 2.50719947e-04, -4.33730167e-05, 3.05482906e-04])"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"noise"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Date\n",
"2015-01-26 0.002415\n",
"2015-01-27 -0.014296\n",
"2015-01-28 -0.012465\n",
"2015-01-29 0.009031\n",
"2015-01-30 -0.010271\n",
" ... \n",
"2020-01-15 0.000974\n",
"2020-01-16 0.007649\n",
"2020-01-17 0.003363\n",
"2020-01-21 -0.002002\n",
"2020-01-22 0.002298\n",
"Name: Daily Return, Length: 1257, dtype: float64"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spy_etf['Daily Return'].iloc[1:] + noise"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [],
"source": [
"beta,alpha,r_value,p_value,std_err = stats.linregress(spy_etf['Daily Return'].iloc[1:]+noise,spy_etf['Daily Return'].iloc[1:])"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.9856347921712466"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"beta"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-5.02497565290158e-06"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"alpha"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On dirait que notre compréhension est correcte !"
]
}
],
"metadata": {
"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.7.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}