{ "cells": [ { "cell_type": "markdown", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "# Expanding returns\n", "\n", "```{note}\n", "The code below might need to be modified to work as of Feb 2023. [The fix is here.](https://github.com/LeDataSciFi/ledatascifi-2024/issues/6)\n", "```\n", "\n", "## The problem\n", "\n", "You know the charts that show cumulative returns if you'd bought and held a stock since some long ago date? Let's make one!\n", "\n", "This is called \"expanding returns\" because you get the total returns from day 0 to day N, then from day 0 to day N+1, and so on; the window is expanding instead of having a fixed number of units or containing a specific increment of time." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Download the returns\n", "\n", "We need a dataset with firm, date, and the daily return. Let's build it:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "#!pip install pandas_datareader # uncomment and run this ONE TIME ONLY to install pandas data reader" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import pandas_datareader as pdr # you might need to install this (see above)\n", "from datetime import datetime\n", "import yfinance as yf\n", "\n", "# choose your firms and dates \n", "stocks = ['SBUX','AAPL','MSFT']\n", "start = datetime(1980, 1, 1)\n", "end = datetime(2022, 7, 31)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```{tip}\n", "The code in the next block is explained more thoroughly in `handouts/factor_loading_simple.ipynb` in the textbook repo because that file prints the status of the data throughout. Looking at this might help.\n", "```" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FirmDateAdj Closeret
0AAPL1980-12-120.100040NaN
1AAPL1980-12-150.094820-0.052171
2AAPL1980-12-160.087861-0.073398
3AAPL1980-12-170.0900350.024751
4AAPL1980-12-180.0926460.028992
5AAPL1980-12-190.0983000.061029
6AAPL1980-12-220.1030840.048670
7AAPL1980-12-230.1074340.042199
8AAPL1980-12-240.1130880.052628
9AAPL1980-12-260.1235270.092310
10AAPL1980-12-290.1252670.014083
11AAPL1980-12-300.122222-0.024304
12AAPL1980-12-310.118743-0.028468
13AAPL1981-01-020.1200480.010988
14AAPL1981-01-050.117438-0.021738
\n", "
" ], "text/plain": [ " Firm Date Adj Close ret\n", "0 AAPL 1980-12-12 0.100040 NaN\n", "1 AAPL 1980-12-15 0.094820 -0.052171\n", "2 AAPL 1980-12-16 0.087861 -0.073398\n", "3 AAPL 1980-12-17 0.090035 0.024751\n", "4 AAPL 1980-12-18 0.092646 0.028992\n", "5 AAPL 1980-12-19 0.098300 0.061029\n", "6 AAPL 1980-12-22 0.103084 0.048670\n", "7 AAPL 1980-12-23 0.107434 0.042199\n", "8 AAPL 1980-12-24 0.113088 0.052628\n", "9 AAPL 1980-12-26 0.123527 0.092310\n", "10 AAPL 1980-12-29 0.125267 0.014083\n", "11 AAPL 1980-12-30 0.122222 -0.024304\n", "12 AAPL 1980-12-31 0.118743 -0.028468\n", "13 AAPL 1981-01-02 0.120048 0.010988\n", "14 AAPL 1981-01-05 0.117438 -0.021738" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# download stock prices \n", "# here, from yahoo: not my fav source, but quick. \n", "# we need to do some data manipulation to get the data ready \n", "stock_prices = yf.download(stocks, start , end)\n", "stock_prices.index = stock_prices.index.tz_localize(None) # change yf date format to match pdr\n", "stock_prices = stock_prices.filter(like='Adj Close') # reduce to just columns with this in the name\n", "stock_prices.columns = stock_prices.columns.get_level_values(1) # tickers as col names, works no matter order of tics\n", "\n", "# refmt from wide to long\n", "stock_prices = stock_prices.stack().swaplevel().sort_index().reset_index()\n", "stock_prices.columns = ['Firm','Date','Adj Close']\n", "\n", "# add return var = pct_change() function compares to prior row\n", "# EXCEPT: don't compare for first row of one firm with last row of prior firm!\n", "# MAKE SURE YOU CREATE THE VARIABLES WITHIN EACH FIRM - use groupby\n", "stock_prices['ret'] = stock_prices.groupby('Firm')['Adj Close'].pct_change()\n", "stock_prices['ret'] = stock_prices['ret'] \n", "stock_prices.head(15)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Getting the expanding returns\n", "\n", "Notice that this dataset has the simple return for a period, not the gross returns (defined [here](05a_compounding)). \n", "\n", "To compute $R_i[0,T]$ for all firms $i$ and each time $T$ in the dataset, you're going to need to use groupby. You have two equivalent options from there: \n", "\n", "1. For each firm, get the `cumprod()` of the gross return over its time series.\n", " ```python\n", " df.assign(R=1+df['r']).groupby('firm')['R'].cumprod()\n", " ```\n", "1. For each firm, take the product of $1+r$ for all prior periods using the expanding window functionality.\n", " ```python\n", " df.groupby('firm')['r'].expanding().apply(lambda x: np.prod(1+x))\n", " ```\n", "\n", "Which you choose is up to you, but in my testing, the `cumprod` approach is 2.5x faster. " ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "stock_prices['cumret'] = \\\n", "(\n", " stock_prices\n", " .assign(ret=1+stock_prices['ret'])\n", " .groupby('Firm')\n", " ['ret']\n", " .cumprod()\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plotting the total returns\n", "\n", "If only we [could turn back time. ](https://www.youtube.com/watch?v=9n3A_-HRFfc)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "(stock_prices.set_index('Date').groupby('Firm')['cumret']\n", " .plot(title=\"If you bought $1 back when, you'd have this now\",\n", " figsize=(6,5))\n", ");" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.11.5" } }, "nbformat": 4, "nbformat_minor": 4 }