Skip to content

Instantly share code, notes, and snippets.

@yangju2011
Created February 4, 2020 22:09
Show Gist options
  • Save yangju2011/147f46401fe4199b7d22523f4db0dbbd to your computer and use it in GitHub Desktop.
Save yangju2011/147f46401fe4199b7d22523f4db0dbbd to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 1. Import and transform data"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# download daily price here https://finance.yahoo.com/quote/VTSAX/history/"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"data = '~/Downloads/VTSAX_max.csv'"
]
},
{
"cell_type": "code",
"execution_count": 4,
"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>Date</th>\n",
" <th>Open</th>\n",
" <th>High</th>\n",
" <th>Low</th>\n",
" <th>Close</th>\n",
" <th>Adj Close</th>\n",
" <th>Volume</th>\n",
" <th>Year</th>\n",
" <th>Month</th>\n",
" <th>DayOfWeek</th>\n",
" <th>Weekday</th>\n",
" <th>DayOfMonth</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>2001-01-02</td>\n",
" <td>28.280001</td>\n",
" <td>28.280001</td>\n",
" <td>28.280001</td>\n",
" <td>28.280001</td>\n",
" <td>19.756147</td>\n",
" <td>0.0</td>\n",
" <td>2001</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Tuesday</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34</th>\n",
" <td>2001-01-03</td>\n",
" <td>29.760000</td>\n",
" <td>29.760000</td>\n",
" <td>29.760000</td>\n",
" <td>29.760000</td>\n",
" <td>20.790062</td>\n",
" <td>0.0</td>\n",
" <td>2001</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>Wednesday</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35</th>\n",
" <td>2001-01-04</td>\n",
" <td>29.389999</td>\n",
" <td>29.389999</td>\n",
" <td>29.389999</td>\n",
" <td>29.389999</td>\n",
" <td>20.531578</td>\n",
" <td>0.0</td>\n",
" <td>2001</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>Thursday</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>36</th>\n",
" <td>2001-01-05</td>\n",
" <td>28.540001</td>\n",
" <td>28.540001</td>\n",
" <td>28.540001</td>\n",
" <td>28.540001</td>\n",
" <td>19.937780</td>\n",
" <td>0.0</td>\n",
" <td>2001</td>\n",
" <td>1</td>\n",
" <td>4</td>\n",
" <td>Friday</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37</th>\n",
" <td>2001-01-08</td>\n",
" <td>28.459999</td>\n",
" <td>28.459999</td>\n",
" <td>28.459999</td>\n",
" <td>28.459999</td>\n",
" <td>19.881893</td>\n",
" <td>0.0</td>\n",
" <td>2001</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>Monday</td>\n",
" <td>8</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Date Open High Low Close Adj Close Volume \\\n",
"33 2001-01-02 28.280001 28.280001 28.280001 28.280001 19.756147 0.0 \n",
"34 2001-01-03 29.760000 29.760000 29.760000 29.760000 20.790062 0.0 \n",
"35 2001-01-04 29.389999 29.389999 29.389999 29.389999 20.531578 0.0 \n",
"36 2001-01-05 28.540001 28.540001 28.540001 28.540001 19.937780 0.0 \n",
"37 2001-01-08 28.459999 28.459999 28.459999 28.459999 19.881893 0.0 \n",
"\n",
" Year Month DayOfWeek Weekday DayOfMonth \n",
"33 2001 1 1 Tuesday 2 \n",
"34 2001 1 2 Wednesday 3 \n",
"35 2001 1 3 Thursday 4 \n",
"36 2001 1 4 Friday 5 \n",
"37 2001 1 0 Monday 8 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.read_csv(data)\n",
"df['Date'] = pd.to_datetime(df['Date'])\n",
"df['Year'] = df['Date'].dt.year\n",
"df['Month'] = df['Date'].dt.month\n",
"df['DayOfWeek'] = df['Date'].dt.dayofweek\n",
"df['Weekday'] = df['Date'].dt.day_name()\n",
"df['DayOfMonth'] = df['Date'].dt.day\n",
"\n",
"df = df[(df['Year']>2000) & (df['Year']<2020)].copy() # only use 2001-2019 data\n",
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 2. Visualize price trend"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"from pylab import rcParams\n",
"rcParams['figure.figsize'] = 12,8"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x576 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.dates as mdates\n",
"years = mdates.YearLocator() # every year\n",
"months = mdates.MonthLocator() # every month\n",
"years_fmt = mdates.DateFormatter('%Y')\n",
"\n",
"fig, ax = plt.subplots()\n",
"ax.plot('Date', 'Open', data=df)\n",
"\n",
"ax.xaxis.set_major_locator(years)\n",
"ax.xaxis.set_major_formatter(years_fmt)\n",
"ax.xaxis.set_minor_locator(months)\n",
"\n",
"fig.autofmt_xdate()\n",
"\n",
"ax.set_title('Daily price 2001-2019')\n",
"ax.set_xlabel('Date')\n",
"ax.set_ylabel('Price $')\n",
"plt.show()"
]
},
{
"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>Weekday</th>\n",
" <th>Open</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Monday</td>\n",
" <td>38.858254</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Tuesday</td>\n",
" <td>38.859285</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Wednesday</td>\n",
" <td>38.789418</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Thursday</td>\n",
" <td>38.863410</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Friday</td>\n",
" <td>38.925662</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Weekday Open\n",
"0 Monday 38.858254\n",
"1 Tuesday 38.859285\n",
"2 Wednesday 38.789418\n",
"3 Thursday 38.863410\n",
"4 Friday 38.925662"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_dow = df.groupby(['DayOfWeek','Weekday'],as_index=False).mean()[['Weekday','Open']] # higher price for Thursday and Monday\n",
"df_dow"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'Average price $')"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x576 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.bar(df_dow['Weekday'],df_dow['Open'])\n",
"plt.ylim([38.7,38.95])\n",
"plt.title('Wesnesday has the lowest average price and Friday has the highest average price')\n",
"plt.xlabel('Day of Week')\n",
"plt.ylabel('Average price $')"
]
},
{
"cell_type": "code",
"execution_count": 10,
"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>Year</th>\n",
" <th>Open</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2001</td>\n",
" <td>26.534395</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2002</td>\n",
" <td>22.574603</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2003</td>\n",
" <td>22.348929</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2004</td>\n",
" <td>26.627143</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2005</td>\n",
" <td>28.838691</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>2006</td>\n",
" <td>31.643904</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>2007</td>\n",
" <td>35.710478</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>2008</td>\n",
" <td>29.579051</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>2009</td>\n",
" <td>23.236508</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>2010</td>\n",
" <td>28.390357</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>2011</td>\n",
" <td>31.832778</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>2012</td>\n",
" <td>34.465040</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>2013</td>\n",
" <td>41.421627</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>2014</td>\n",
" <td>48.698095</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>2015</td>\n",
" <td>51.849127</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>2016</td>\n",
" <td>52.179206</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>2017</td>\n",
" <td>61.271793</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>2018</td>\n",
" <td>68.740558</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>2019</td>\n",
" <td>72.349802</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Year Open\n",
"0 2001 26.534395\n",
"1 2002 22.574603\n",
"2 2003 22.348929\n",
"3 2004 26.627143\n",
"4 2005 28.838691\n",
"5 2006 31.643904\n",
"6 2007 35.710478\n",
"7 2008 29.579051\n",
"8 2009 23.236508\n",
"9 2010 28.390357\n",
"10 2011 31.832778\n",
"11 2012 34.465040\n",
"12 2013 41.421627\n",
"13 2014 48.698095\n",
"14 2015 51.849127\n",
"15 2016 52.179206\n",
"16 2017 61.271793\n",
"17 2018 68.740558\n",
"18 2019 72.349802"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# year\n",
"df_year = df.groupby('Year',as_index=False).mean()[['Year','Open']] # higher price for Thursday and Monday\n",
"df_year"
]
},
{
"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>Year</th>\n",
" <th>Open</th>\n",
" <th>YoY %</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2001</td>\n",
" <td>26.534395</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2002</td>\n",
" <td>22.574603</td>\n",
" <td>-14.923242</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2003</td>\n",
" <td>22.348929</td>\n",
" <td>-0.999684</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2004</td>\n",
" <td>26.627143</td>\n",
" <td>19.142816</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2005</td>\n",
" <td>28.838691</td>\n",
" <td>8.305614</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>2006</td>\n",
" <td>31.643904</td>\n",
" <td>9.727258</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>2007</td>\n",
" <td>35.710478</td>\n",
" <td>12.851049</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>2008</td>\n",
" <td>29.579051</td>\n",
" <td>-17.169826</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>2009</td>\n",
" <td>23.236508</td>\n",
" <td>-21.442687</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>2010</td>\n",
" <td>28.390357</td>\n",
" <td>22.179965</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>2011</td>\n",
" <td>31.832778</td>\n",
" <td>12.125316</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>2012</td>\n",
" <td>34.465040</td>\n",
" <td>8.269031</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>2013</td>\n",
" <td>41.421627</td>\n",
" <td>20.184474</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>2014</td>\n",
" <td>48.698095</td>\n",
" <td>17.566833</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>2015</td>\n",
" <td>51.849127</td>\n",
" <td>6.470544</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>2016</td>\n",
" <td>52.179206</td>\n",
" <td>0.636615</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>2017</td>\n",
" <td>61.271793</td>\n",
" <td>17.425690</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>2018</td>\n",
" <td>68.740558</td>\n",
" <td>12.189565</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>2019</td>\n",
" <td>72.349802</td>\n",
" <td>5.250530</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Year Open YoY %\n",
"0 2001 26.534395 NaN\n",
"1 2002 22.574603 -14.923242\n",
"2 2003 22.348929 -0.999684\n",
"3 2004 26.627143 19.142816\n",
"4 2005 28.838691 8.305614\n",
"5 2006 31.643904 9.727258\n",
"6 2007 35.710478 12.851049\n",
"7 2008 29.579051 -17.169826\n",
"8 2009 23.236508 -21.442687\n",
"9 2010 28.390357 22.179965\n",
"10 2011 31.832778 12.125316\n",
"11 2012 34.465040 8.269031\n",
"12 2013 41.421627 20.184474\n",
"13 2014 48.698095 17.566833\n",
"14 2015 51.849127 6.470544\n",
"15 2016 52.179206 0.636615\n",
"16 2017 61.271793 17.425690\n",
"17 2018 68.740558 12.189565\n",
"18 2019 72.349802 5.250530"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# average YoY\n",
"df_year['YoY %'] = df_year['Open'].pct_change() * 100\n",
"df_year"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"count 18.000000\n",
"mean 6.543881\n",
"std 12.943611\n",
"min -21.442687\n",
"25% 1.790094\n",
"50% 9.016436\n",
"75% 16.282029\n",
"max 22.179965\n",
"Name: YoY %, dtype: float64"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_year['YoY %'].describe()"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'Average price $')"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x576 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.bar(df_year['Year'],df_year['Open'])\n",
"# plt.ylim([20,80])\n",
"plt.title('Annual average price increases by ~6.5% from 2001-2019')\n",
"plt.xlabel('Year')\n",
"plt.ylabel('Average price $')"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(2001, 2019)"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x576 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.plot(df_year['Year'][1:],df_year['YoY %'][1:])\n",
"plt.title('Annual change of average price from 2001-2019')\n",
"plt.xlabel('Year')\n",
"plt.ylabel('Annual average price change %')\n",
"plt.plot(np.linspace(2000,2018,19),[1]*19)\n",
"plt.xlim([2001,2019])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 3. Invest stragegy"
]
},
{
"cell_type": "code",
"execution_count": 655,
"metadata": {},
"outputs": [],
"source": [
"def format_number(number):\n",
" return (\"{:,}\".format(int(number)))\n",
" \n",
"def get_return(strategy, dfs, recurring_invest, year, invest_results):\n",
" dfs=dfs[dfs['Year'] >= year].copy()\n",
" dfs['Recurring_invest'] = recurring_invest\n",
" dfs['Recurring_share'] = 1.* dfs['Recurring_invest']/dfs['Open']\n",
" dfs['Cumulative_share'] = dfs['Recurring_share'].cumsum(axis = 0)\n",
" dfs['Cumulative_value'] = dfs['Cumulative_share'] * dfs['Open']\n",
" num_year = dfs['Year'].max() - dfs['Year'].min()\n",
" total_invest = dfs['Recurring_invest'].sum()\n",
" total_value = dfs['Cumulative_value'].values[-1]\n",
" gain = 100* (total_value - total_invest)/total_invest\n",
" cagr = 100 * ((total_value/total_invest)**(1./num_year)-1)\n",
" invest_dict = dict()\n",
" invest_dict['strategy'] = strategy\n",
" invest_dict['recurring_invest'] = recurring_invest\n",
" invest_dict['total_times_invested'] = len(dfs)\n",
" invest_dict['total_money_invested'] = total_invest\n",
" invest_dict['total_money_value'] = total_value\n",
" invest_dict['gain%'] = gain\n",
" invest_dict['cagr%'] = cagr\n",
" invest_dict['start_year'] = year\n",
" invest_results.append(invest_dict)\n",
" print (\"Invest strategy: %s from %s\" %(strategy, year))\n",
" print (\"Total times of invest: \", format_number(len(dfs)))\n",
" print (\"Total money invested: \",format_number(total_invest))\n",
" print (\"Total money valued: \", format_number(total_value))\n",
" print (\"Total gain: %.2f\"%gain,\"%\")\n",
" print (\"Compound annual growth rate %.2f\"%cagr,\"%\")"
]
},
{
"cell_type": "code",
"execution_count": 782,
"metadata": {},
"outputs": [],
"source": [
"DAILY_INVEST = 100\n",
"WEEKLY_INVEST = 500\n",
"MONTHLY_INVEST = 2000\n",
"\n",
"START_YEAR = 2000"
]
},
{
"cell_type": "code",
"execution_count": 783,
"metadata": {},
"outputs": [],
"source": [
"invest_results = []"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 3.1 buy daily"
]
},
{
"cell_type": "code",
"execution_count": 784,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Invest strategy: Daily from 2000\n",
"Total times of invest: 4,779\n",
"Total money invested: 477,900\n",
"Total money valued: 1,127,417\n",
"Total gain: 135.91 %\n",
"Compound annual growth rate 4.88 %\n"
]
}
],
"source": [
"dfs= df[['Date','Open','Year','Month','DayOfWeek']].copy()\n",
"get_return(\"Daily\", dfs, DAILY_INVEST,START_YEAR, invest_results)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 3.2 buy weekly"
]
},
{
"cell_type": "code",
"execution_count": 785,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Invest strategy: Each Monday from 2000\n",
"Total times of invest: 899\n",
"Total money invested: 449,500\n",
"Total money valued: 1,058,757\n",
"Total gain: 135.54 %\n",
"Compound annual growth rate 4.87 %\n"
]
}
],
"source": [
"dfs= df[df['DayOfWeek'] == 0][['Date','Open','Year','Month','DayOfWeek']].copy()\n",
"get_return(\"Each Monday\", dfs, WEEKLY_INVEST, START_YEAR, invest_results)\n",
"# monday is always closed, so not so good"
]
},
{
"cell_type": "code",
"execution_count": 786,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Invest strategy: Each Tuesday from 2000\n",
"Total times of invest: 979\n",
"Total money invested: 489,500\n",
"Total money valued: 1,155,396\n",
"Total gain: 136.04 %\n",
"Compound annual growth rate 4.89 %\n"
]
}
],
"source": [
"dfs= df[df['DayOfWeek'] == 1][['Date','Open','Year','Month','DayOfWeek']].copy()\n",
"get_return(\"Each Tuesday\", dfs, WEEKLY_INVEST, START_YEAR, invest_results)"
]
},
{
"cell_type": "code",
"execution_count": 787,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Invest strategy: Each Wednesday from 2000\n",
"Total times of invest: 980\n",
"Total money invested: 490,000\n",
"Total money valued: 1,148,542\n",
"Total gain: 134.40 %\n",
"Compound annual growth rate 4.85 %\n"
]
}
],
"source": [
"dfs= df[df['DayOfWeek'] == 2][['Date','Open','Year','Month','DayOfWeek']].copy()\n",
"get_return(\"Each Wednesday\", dfs, WEEKLY_INVEST, START_YEAR, invest_results)"
]
},
{
"cell_type": "code",
"execution_count": 788,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Invest strategy: Each Thursday from 2000\n",
"Total times of invest: 962\n",
"Total money invested: 481,000\n",
"Total money valued: 1,136,612\n",
"Total gain: 136.30 %\n",
"Compound annual growth rate 4.89 %\n"
]
}
],
"source": [
"dfs= df[df['DayOfWeek'] == 3][['Date','Open','Year','Month','DayOfWeek']].copy()\n",
"get_return(\"Each Thursday\", dfs, WEEKLY_INVEST, START_YEAR, invest_results)"
]
},
{
"cell_type": "code",
"execution_count": 789,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Invest strategy: Each Friday from 2000\n",
"Total times of invest: 959\n",
"Total money invested: 479,500\n",
"Total money valued: 1,132,563\n",
"Total gain: 136.20 %\n",
"Compound annual growth rate 4.89 %\n"
]
}
],
"source": [
"dfs= df[df['DayOfWeek'] == 4][['Date','Open','Year','Month','DayOfWeek']].copy()\n",
"get_return(\"Each Friday\", dfs, WEEKLY_INVEST, START_YEAR, invest_results)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 3.3 buy monthly"
]
},
{
"cell_type": "code",
"execution_count": 790,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Invest strategy: First day of each month from 2000\n",
"Total times of invest: 228\n",
"Total money invested: 456,000\n",
"Total money valued: 1,042,609\n",
"Total gain: 128.64 %\n",
"Compound annual growth rate 4.70 %\n"
]
}
],
"source": [
"df_group = df.groupby(['Year','Month'],as_index=False).min()['Date'] # first or last dow of the month\n",
"dfs = pd.merge(df, df_group, on='Date')\n",
"get_return(\"First day of each month\", dfs, MONTHLY_INVEST, START_YEAR, invest_results)"
]
},
{
"cell_type": "code",
"execution_count": 791,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Invest strategy: Last day of each month from 2000\n",
"Total times of invest: 228\n",
"Total money invested: 456,000\n",
"Total money valued: 1,074,135\n",
"Total gain: 135.56 %\n",
"Compound annual growth rate 4.87 %\n"
]
}
],
"source": [
"df_group = df.groupby(['Year','Month'],as_index=False).max()['Date'] # first or last dow of the month\n",
"dfs = pd.merge(df, df_group, on='Date')\n",
"get_return(\"Last day of each month\", dfs, MONTHLY_INVEST, START_YEAR, invest_results)"
]
},
{
"cell_type": "code",
"execution_count": 792,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Invest strategy: First Monday of each month from 2000\n",
"Total times of invest: 228\n",
"Total money invested: 456,000\n",
"Total money valued: 1,042,037\n",
"Total gain: 128.52 %\n",
"Compound annual growth rate 4.70 %\n"
]
}
],
"source": [
"df_group = df[df['DayOfWeek']==0].groupby(['Year','Month'],as_index=False).min()['Date'] # first or last dow of the month\n",
"dfs = pd.merge(df, df_group, on='Date')\n",
"get_return(\"First Monday of each month\", dfs, MONTHLY_INVEST, START_YEAR, invest_results)"
]
},
{
"cell_type": "code",
"execution_count": 793,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Invest strategy: First Tuesday of each month from 2000\n",
"Total times of invest: 228\n",
"Total money invested: 456,000\n",
"Total money valued: 1,037,088\n",
"Total gain: 127.43 %\n",
"Compound annual growth rate 4.67 %\n"
]
}
],
"source": [
"df_group = df[df['DayOfWeek']==1].groupby(['Year','Month'],as_index=False).min()['Date'] # first or last dow of the month\n",
"dfs = pd.merge(df, df_group, on='Date')\n",
"get_return(\"First Tuesday of each month\", dfs, MONTHLY_INVEST, START_YEAR, invest_results)"
]
},
{
"cell_type": "code",
"execution_count": 794,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Invest strategy: First Wednesday of each month from 2000\n",
"Total times of invest: 228\n",
"Total money invested: 456,000\n",
"Total money valued: 1,041,236\n",
"Total gain: 128.34 %\n",
"Compound annual growth rate 4.69 %\n"
]
}
],
"source": [
"df_group = df[df['DayOfWeek']==2].groupby(['Year','Month'],as_index=False).min()['Date'] # first or last dow of the month\n",
"dfs = pd.merge(df, df_group, on='Date')\n",
"get_return(\"First Wednesday of each month\", dfs, MONTHLY_INVEST, START_YEAR, invest_results)"
]
},
{
"cell_type": "code",
"execution_count": 795,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Invest strategy: First Thursday of each month from 2000\n",
"Total times of invest: 228\n",
"Total money invested: 456,000\n",
"Total money valued: 1,044,563\n",
"Total gain: 129.07 %\n",
"Compound annual growth rate 4.71 %\n"
]
}
],
"source": [
"df_group = df[df['DayOfWeek']==3].groupby(['Year','Month'],as_index=False).min()['Date'] # first or last dow of the month\n",
"dfs = pd.merge(df, df_group, on='Date')\n",
"get_return(\"First Thursday of each month\", dfs, MONTHLY_INVEST, START_YEAR, invest_results)"
]
},
{
"cell_type": "code",
"execution_count": 796,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Invest strategy: First Friday of each month from 2000\n",
"Total times of invest: 228\n",
"Total money invested: 456,000\n",
"Total money valued: 1,054,388\n",
"Total gain: 131.23 %\n",
"Compound annual growth rate 4.77 %\n"
]
}
],
"source": [
"df_group = df[df['DayOfWeek']==4].groupby(['Year','Month'],as_index=False).min()['Date'] # first or last dow of the month\n",
"dfs = pd.merge(df, df_group, on='Date')\n",
"get_return(\"First Friday of each month\", dfs, MONTHLY_INVEST, START_YEAR, invest_results)"
]
},
{
"cell_type": "code",
"execution_count": 797,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Invest strategy: Last Monday of each month from 2000\n",
"Total times of invest: 228\n",
"Total money invested: 456,000\n",
"Total money valued: 1,074,640\n",
"Total gain: 135.67 %\n",
"Compound annual growth rate 4.88 %\n"
]
}
],
"source": [
"df_group = df[df['DayOfWeek']==0].groupby(['Year','Month'],as_index=False).max()['Date'] # first or last dow of the month\n",
"dfs = pd.merge(df, df_group, on='Date')\n",
"get_return(\"Last Monday of each month\", dfs, MONTHLY_INVEST, START_YEAR, invest_results)"
]
},
{
"cell_type": "code",
"execution_count": 798,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Invest strategy: Last Tuesday of each month from 2000\n",
"Total times of invest: 228\n",
"Total money invested: 456,000\n",
"Total money valued: 1,076,306\n",
"Total gain: 136.03 %\n",
"Compound annual growth rate 4.89 %\n"
]
}
],
"source": [
"df_group = df[df['DayOfWeek']==1].groupby(['Year','Month'],as_index=False).max()['Date'] # first or last dow of the month\n",
"dfs = pd.merge(df, df_group, on='Date')\n",
"get_return(\"Last Tuesday of each month\", dfs, MONTHLY_INVEST, START_YEAR, invest_results)"
]
},
{
"cell_type": "code",
"execution_count": 799,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Invest strategy: Last Wesneday of each month from 2000\n",
"Total times of invest: 228\n",
"Total money invested: 456,000\n",
"Total money valued: 1,066,905\n",
"Total gain: 133.97 %\n",
"Compound annual growth rate 4.84 %\n"
]
}
],
"source": [
"df_group = df[df['DayOfWeek']==2].groupby(['Year','Month'],as_index=False).max()['Date'] # first or last dow of the month\n",
"dfs = pd.merge(df, df_group, on='Date')\n",
"get_return(\"Last Wesneday of each month\", dfs, MONTHLY_INVEST, START_YEAR, invest_results)"
]
},
{
"cell_type": "code",
"execution_count": 800,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Invest strategy: Last Thursday of each month from 2000\n",
"Total times of invest: 228\n",
"Total money invested: 456,000\n",
"Total money valued: 1,078,419\n",
"Total gain: 136.50 %\n",
"Compound annual growth rate 4.90 %\n"
]
}
],
"source": [
"df_group = df[df['DayOfWeek']==3].groupby(['Year','Month'],as_index=False).max()['Date'] # first or last dow of the month\n",
"dfs = pd.merge(df, df_group, on='Date')\n",
"get_return(\"Last Thursday of each month\", dfs, MONTHLY_INVEST, START_YEAR, invest_results)"
]
},
{
"cell_type": "code",
"execution_count": 801,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Invest strategy: Last Friday of each month from 2000\n",
"Total times of invest: 228\n",
"Total money invested: 456,000\n",
"Total money valued: 1,077,552\n",
"Total gain: 136.31 %\n",
"Compound annual growth rate 4.89 %\n"
]
}
],
"source": [
"df_group = df[df['DayOfWeek']==4].groupby(['Year','Month'],as_index=False).max()['Date'] # first or last dow of the month\n",
"dfs = pd.merge(df, df_group, on='Date')\n",
"get_return(\"Last Friday of each month\", dfs, MONTHLY_INVEST, START_YEAR, invest_results)"
]
},
{
"cell_type": "code",
"execution_count": 781,
"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>cagr%</th>\n",
" <th>gain%</th>\n",
" <th>recurring_invest</th>\n",
" <th>start_year</th>\n",
" <th>strategy</th>\n",
" <th>total_money_invested</th>\n",
" <th>total_money_value</th>\n",
" <th>total_times_invested</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>inf</td>\n",
" <td>11.073665</td>\n",
" <td>500</td>\n",
" <td>2019</td>\n",
" <td>Each Thursday</td>\n",
" <td>25000</td>\n",
" <td>27768.416370</td>\n",
" <td>50</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>inf</td>\n",
" <td>10.523138</td>\n",
" <td>500</td>\n",
" <td>2019</td>\n",
" <td>Each Friday</td>\n",
" <td>25500</td>\n",
" <td>28183.400072</td>\n",
" <td>51</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>inf</td>\n",
" <td>10.418203</td>\n",
" <td>100</td>\n",
" <td>2019</td>\n",
" <td>Daily</td>\n",
" <td>25200</td>\n",
" <td>27825.387168</td>\n",
" <td>252</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>inf</td>\n",
" <td>10.214149</td>\n",
" <td>500</td>\n",
" <td>2019</td>\n",
" <td>Each Tuesday</td>\n",
" <td>26000</td>\n",
" <td>28655.678823</td>\n",
" <td>52</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>inf</td>\n",
" <td>10.126796</td>\n",
" <td>500</td>\n",
" <td>2019</td>\n",
" <td>Each Wednesday</td>\n",
" <td>25500</td>\n",
" <td>28082.332878</td>\n",
" <td>51</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>inf</td>\n",
" <td>9.915993</td>\n",
" <td>2000</td>\n",
" <td>2019</td>\n",
" <td>Last Thursday of each month</td>\n",
" <td>24000</td>\n",
" <td>26379.838351</td>\n",
" <td>12</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>inf</td>\n",
" <td>9.836564</td>\n",
" <td>2000</td>\n",
" <td>2019</td>\n",
" <td>Last Friday of each month</td>\n",
" <td>24000</td>\n",
" <td>26360.775404</td>\n",
" <td>12</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>inf</td>\n",
" <td>9.807309</td>\n",
" <td>2000</td>\n",
" <td>2019</td>\n",
" <td>Last Tuesday of each month</td>\n",
" <td>24000</td>\n",
" <td>26353.754193</td>\n",
" <td>12</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>inf</td>\n",
" <td>9.622556</td>\n",
" <td>500</td>\n",
" <td>2019</td>\n",
" <td>Each Monday</td>\n",
" <td>24000</td>\n",
" <td>26309.413384</td>\n",
" <td>48</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>inf</td>\n",
" <td>9.497177</td>\n",
" <td>2000</td>\n",
" <td>2019</td>\n",
" <td>Last day of each month</td>\n",
" <td>24000</td>\n",
" <td>26279.322418</td>\n",
" <td>12</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>inf</td>\n",
" <td>9.287380</td>\n",
" <td>2000</td>\n",
" <td>2019</td>\n",
" <td>Last Monday of each month</td>\n",
" <td>24000</td>\n",
" <td>26228.971176</td>\n",
" <td>12</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>inf</td>\n",
" <td>9.046393</td>\n",
" <td>2000</td>\n",
" <td>2019</td>\n",
" <td>Last Wesneday of each month</td>\n",
" <td>24000</td>\n",
" <td>26171.134419</td>\n",
" <td>12</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>inf</td>\n",
" <td>8.540038</td>\n",
" <td>2000</td>\n",
" <td>2019</td>\n",
" <td>First Friday of each month</td>\n",
" <td>24000</td>\n",
" <td>26049.609112</td>\n",
" <td>12</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>inf</td>\n",
" <td>8.439531</td>\n",
" <td>2000</td>\n",
" <td>2019</td>\n",
" <td>First day of each month</td>\n",
" <td>24000</td>\n",
" <td>26025.487435</td>\n",
" <td>12</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>inf</td>\n",
" <td>8.412386</td>\n",
" <td>2000</td>\n",
" <td>2019</td>\n",
" <td>First Thursday of each month</td>\n",
" <td>24000</td>\n",
" <td>26018.972685</td>\n",
" <td>12</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>inf</td>\n",
" <td>8.362855</td>\n",
" <td>2000</td>\n",
" <td>2019</td>\n",
" <td>First Wednesday of each month</td>\n",
" <td>24000</td>\n",
" <td>26007.085221</td>\n",
" <td>12</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>inf</td>\n",
" <td>8.259771</td>\n",
" <td>2000</td>\n",
" <td>2019</td>\n",
" <td>First Monday of each month</td>\n",
" <td>24000</td>\n",
" <td>25982.345108</td>\n",
" <td>12</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>inf</td>\n",
" <td>7.562281</td>\n",
" <td>2000</td>\n",
" <td>2019</td>\n",
" <td>First Tuesday of each month</td>\n",
" <td>24000</td>\n",
" <td>25814.947373</td>\n",
" <td>12</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" cagr% gain% recurring_invest start_year \\\n",
"4 inf 11.073665 500 2019 \n",
"5 inf 10.523138 500 2019 \n",
"0 inf 10.418203 100 2019 \n",
"2 inf 10.214149 500 2019 \n",
"3 inf 10.126796 500 2019 \n",
"16 inf 9.915993 2000 2019 \n",
"17 inf 9.836564 2000 2019 \n",
"14 inf 9.807309 2000 2019 \n",
"1 inf 9.622556 500 2019 \n",
"7 inf 9.497177 2000 2019 \n",
"13 inf 9.287380 2000 2019 \n",
"15 inf 9.046393 2000 2019 \n",
"12 inf 8.540038 2000 2019 \n",
"6 inf 8.439531 2000 2019 \n",
"11 inf 8.412386 2000 2019 \n",
"10 inf 8.362855 2000 2019 \n",
"8 inf 8.259771 2000 2019 \n",
"9 inf 7.562281 2000 2019 \n",
"\n",
" strategy total_money_invested total_money_value \\\n",
"4 Each Thursday 25000 27768.416370 \n",
"5 Each Friday 25500 28183.400072 \n",
"0 Daily 25200 27825.387168 \n",
"2 Each Tuesday 26000 28655.678823 \n",
"3 Each Wednesday 25500 28082.332878 \n",
"16 Last Thursday of each month 24000 26379.838351 \n",
"17 Last Friday of each month 24000 26360.775404 \n",
"14 Last Tuesday of each month 24000 26353.754193 \n",
"1 Each Monday 24000 26309.413384 \n",
"7 Last day of each month 24000 26279.322418 \n",
"13 Last Monday of each month 24000 26228.971176 \n",
"15 Last Wesneday of each month 24000 26171.134419 \n",
"12 First Friday of each month 24000 26049.609112 \n",
"6 First day of each month 24000 26025.487435 \n",
"11 First Thursday of each month 24000 26018.972685 \n",
"10 First Wednesday of each month 24000 26007.085221 \n",
"8 First Monday of each month 24000 25982.345108 \n",
"9 First Tuesday of each month 24000 25814.947373 \n",
"\n",
" total_times_invested \n",
"4 50 \n",
"5 51 \n",
"0 252 \n",
"2 52 \n",
"3 51 \n",
"16 12 \n",
"17 12 \n",
"14 12 \n",
"1 48 \n",
"7 12 \n",
"13 12 \n",
"15 12 \n",
"12 12 \n",
"6 12 \n",
"11 12 \n",
"10 12 \n",
"8 12 \n",
"9 12 "
]
},
"execution_count": 781,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_invest2019 = pd.DataFrame.from_dict(invest_results)\n",
"df_invest2019.sort_values('gain%',ascending=False)"
]
},
{
"cell_type": "code",
"execution_count": 760,
"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>cagr%</th>\n",
" <th>gain%</th>\n",
" <th>recurring_invest</th>\n",
" <th>start_year</th>\n",
" <th>strategy</th>\n",
" <th>total_money_invested</th>\n",
" <th>total_money_value</th>\n",
" <th>total_times_invested</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>13.743968</td>\n",
" <td>13.743968</td>\n",
" <td>500</td>\n",
" <td>2018</td>\n",
" <td>Each Thursday</td>\n",
" <td>50500</td>\n",
" <td>57440.703981</td>\n",
" <td>101</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>13.474473</td>\n",
" <td>13.474473</td>\n",
" <td>500</td>\n",
" <td>2018</td>\n",
" <td>Each Friday</td>\n",
" <td>51000</td>\n",
" <td>57871.981048</td>\n",
" <td>102</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>13.433282</td>\n",
" <td>13.433282</td>\n",
" <td>2000</td>\n",
" <td>2018</td>\n",
" <td>Last Thursday of each month</td>\n",
" <td>48000</td>\n",
" <td>54447.975353</td>\n",
" <td>24</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>13.388909</td>\n",
" <td>13.388909</td>\n",
" <td>2000</td>\n",
" <td>2018</td>\n",
" <td>Last Friday of each month</td>\n",
" <td>48000</td>\n",
" <td>54426.676254</td>\n",
" <td>24</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>13.301950</td>\n",
" <td>13.301950</td>\n",
" <td>2000</td>\n",
" <td>2018</td>\n",
" <td>Last Tuesday of each month</td>\n",
" <td>48000</td>\n",
" <td>54384.935902</td>\n",
" <td>24</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>13.256878</td>\n",
" <td>13.256878</td>\n",
" <td>100</td>\n",
" <td>2018</td>\n",
" <td>Daily</td>\n",
" <td>50300</td>\n",
" <td>56968.209543</td>\n",
" <td>503</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>13.043097</td>\n",
" <td>13.043097</td>\n",
" <td>2000</td>\n",
" <td>2018</td>\n",
" <td>Last day of each month</td>\n",
" <td>48000</td>\n",
" <td>54260.686745</td>\n",
" <td>24</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>12.977452</td>\n",
" <td>12.977452</td>\n",
" <td>500</td>\n",
" <td>2018</td>\n",
" <td>Each Tuesday</td>\n",
" <td>51500</td>\n",
" <td>58183.387544</td>\n",
" <td>103</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>12.915985</td>\n",
" <td>12.915985</td>\n",
" <td>500</td>\n",
" <td>2018</td>\n",
" <td>Each Monday</td>\n",
" <td>48000</td>\n",
" <td>54199.672862</td>\n",
" <td>96</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>12.812439</td>\n",
" <td>12.812439</td>\n",
" <td>2000</td>\n",
" <td>2018</td>\n",
" <td>Last Monday of each month</td>\n",
" <td>48000</td>\n",
" <td>54149.970587</td>\n",
" <td>24</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>12.651806</td>\n",
" <td>12.651806</td>\n",
" <td>500</td>\n",
" <td>2018</td>\n",
" <td>Each Wednesday</td>\n",
" <td>50500</td>\n",
" <td>56889.162210</td>\n",
" <td>101</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>12.540919</td>\n",
" <td>12.540919</td>\n",
" <td>2000</td>\n",
" <td>2018</td>\n",
" <td>Last Wesneday of each month</td>\n",
" <td>48000</td>\n",
" <td>54019.641020</td>\n",
" <td>24</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>11.145258</td>\n",
" <td>11.145258</td>\n",
" <td>2000</td>\n",
" <td>2018</td>\n",
" <td>First Friday of each month</td>\n",
" <td>48000</td>\n",
" <td>53349.723920</td>\n",
" <td>24</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>10.311251</td>\n",
" <td>10.311251</td>\n",
" <td>2000</td>\n",
" <td>2018</td>\n",
" <td>First Thursday of each month</td>\n",
" <td>48000</td>\n",
" <td>52949.400477</td>\n",
" <td>24</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>10.274353</td>\n",
" <td>10.274353</td>\n",
" <td>2000</td>\n",
" <td>2018</td>\n",
" <td>First day of each month</td>\n",
" <td>48000</td>\n",
" <td>52931.689529</td>\n",
" <td>24</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>10.246935</td>\n",
" <td>10.246935</td>\n",
" <td>2000</td>\n",
" <td>2018</td>\n",
" <td>First Wednesday of each month</td>\n",
" <td>48000</td>\n",
" <td>52918.528610</td>\n",
" <td>24</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>10.217637</td>\n",
" <td>10.217637</td>\n",
" <td>2000</td>\n",
" <td>2018</td>\n",
" <td>First Monday of each month</td>\n",
" <td>48000</td>\n",
" <td>52904.465866</td>\n",
" <td>24</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>9.601937</td>\n",
" <td>9.601937</td>\n",
" <td>2000</td>\n",
" <td>2018</td>\n",
" <td>First Tuesday of each month</td>\n",
" <td>48000</td>\n",
" <td>52608.929917</td>\n",
" <td>24</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" cagr% gain% recurring_invest start_year \\\n",
"4 13.743968 13.743968 500 2018 \n",
"5 13.474473 13.474473 500 2018 \n",
"16 13.433282 13.433282 2000 2018 \n",
"17 13.388909 13.388909 2000 2018 \n",
"14 13.301950 13.301950 2000 2018 \n",
"0 13.256878 13.256878 100 2018 \n",
"7 13.043097 13.043097 2000 2018 \n",
"2 12.977452 12.977452 500 2018 \n",
"1 12.915985 12.915985 500 2018 \n",
"13 12.812439 12.812439 2000 2018 \n",
"3 12.651806 12.651806 500 2018 \n",
"15 12.540919 12.540919 2000 2018 \n",
"12 11.145258 11.145258 2000 2018 \n",
"11 10.311251 10.311251 2000 2018 \n",
"6 10.274353 10.274353 2000 2018 \n",
"10 10.246935 10.246935 2000 2018 \n",
"8 10.217637 10.217637 2000 2018 \n",
"9 9.601937 9.601937 2000 2018 \n",
"\n",
" strategy total_money_invested total_money_value \\\n",
"4 Each Thursday 50500 57440.703981 \n",
"5 Each Friday 51000 57871.981048 \n",
"16 Last Thursday of each month 48000 54447.975353 \n",
"17 Last Friday of each month 48000 54426.676254 \n",
"14 Last Tuesday of each month 48000 54384.935902 \n",
"0 Daily 50300 56968.209543 \n",
"7 Last day of each month 48000 54260.686745 \n",
"2 Each Tuesday 51500 58183.387544 \n",
"1 Each Monday 48000 54199.672862 \n",
"13 Last Monday of each month 48000 54149.970587 \n",
"3 Each Wednesday 50500 56889.162210 \n",
"15 Last Wesneday of each month 48000 54019.641020 \n",
"12 First Friday of each month 48000 53349.723920 \n",
"11 First Thursday of each month 48000 52949.400477 \n",
"6 First day of each month 48000 52931.689529 \n",
"10 First Wednesday of each month 48000 52918.528610 \n",
"8 First Monday of each month 48000 52904.465866 \n",
"9 First Tuesday of each month 48000 52608.929917 \n",
"\n",
" total_times_invested \n",
"4 101 \n",
"5 102 \n",
"16 24 \n",
"17 24 \n",
"14 24 \n",
"0 503 \n",
"7 24 \n",
"2 103 \n",
"1 96 \n",
"13 24 \n",
"3 101 \n",
"15 24 \n",
"12 24 \n",
"11 24 \n",
"6 24 \n",
"10 24 \n",
"8 24 \n",
"9 24 "
]
},
"execution_count": 760,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_invest2018 = pd.DataFrame.from_dict(invest_results)\n",
"df_invest2018.sort_values('gain%',ascending=False)"
]
},
{
"cell_type": "code",
"execution_count": 739,
"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>cagr%</th>\n",
" <th>gain%</th>\n",
" <th>recurring_invest</th>\n",
" <th>start_year</th>\n",
" <th>strategy</th>\n",
" <th>total_money_invested</th>\n",
" <th>total_money_value</th>\n",
" <th>total_times_invested</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>7.456039</td>\n",
" <td>33.328596</td>\n",
" <td>500</td>\n",
" <td>2015</td>\n",
" <td>Each Thursday</td>\n",
" <td>127000</td>\n",
" <td>169327.316322</td>\n",
" <td>254</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>7.355905</td>\n",
" <td>32.832316</td>\n",
" <td>2000</td>\n",
" <td>2015</td>\n",
" <td>Last Friday of each month</td>\n",
" <td>120000</td>\n",
" <td>159398.779058</td>\n",
" <td>60</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>7.354587</td>\n",
" <td>32.825793</td>\n",
" <td>500</td>\n",
" <td>2015</td>\n",
" <td>Each Tuesday</td>\n",
" <td>129000</td>\n",
" <td>171345.273138</td>\n",
" <td>258</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>7.352916</td>\n",
" <td>32.817524</td>\n",
" <td>2000</td>\n",
" <td>2015</td>\n",
" <td>Last Tuesday of each month</td>\n",
" <td>120000</td>\n",
" <td>159381.028435</td>\n",
" <td>60</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>7.351084</td>\n",
" <td>32.808460</td>\n",
" <td>500</td>\n",
" <td>2015</td>\n",
" <td>Each Friday</td>\n",
" <td>126500</td>\n",
" <td>168002.702417</td>\n",
" <td>253</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>7.348801</td>\n",
" <td>32.797160</td>\n",
" <td>2000</td>\n",
" <td>2015</td>\n",
" <td>Last Thursday of each month</td>\n",
" <td>120000</td>\n",
" <td>159356.591614</td>\n",
" <td>60</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>7.345451</td>\n",
" <td>32.780586</td>\n",
" <td>100</td>\n",
" <td>2015</td>\n",
" <td>Daily</td>\n",
" <td>125800</td>\n",
" <td>167037.977219</td>\n",
" <td>1258</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>7.283913</td>\n",
" <td>32.476370</td>\n",
" <td>2000</td>\n",
" <td>2015</td>\n",
" <td>Last day of each month</td>\n",
" <td>120000</td>\n",
" <td>158971.644074</td>\n",
" <td>60</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>7.280940</td>\n",
" <td>32.461687</td>\n",
" <td>2000</td>\n",
" <td>2015</td>\n",
" <td>Last Monday of each month</td>\n",
" <td>120000</td>\n",
" <td>158954.024411</td>\n",
" <td>60</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>7.221066</td>\n",
" <td>32.166224</td>\n",
" <td>500</td>\n",
" <td>2015</td>\n",
" <td>Each Monday</td>\n",
" <td>118000</td>\n",
" <td>155956.144512</td>\n",
" <td>236</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>7.214847</td>\n",
" <td>32.135561</td>\n",
" <td>500</td>\n",
" <td>2015</td>\n",
" <td>Each Wednesday</td>\n",
" <td>128500</td>\n",
" <td>169794.196014</td>\n",
" <td>257</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>7.113514</td>\n",
" <td>31.636725</td>\n",
" <td>2000</td>\n",
" <td>2015</td>\n",
" <td>Last Wesneday of each month</td>\n",
" <td>120000</td>\n",
" <td>157964.069995</td>\n",
" <td>60</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>6.861723</td>\n",
" <td>30.403333</td>\n",
" <td>2000</td>\n",
" <td>2015</td>\n",
" <td>First Friday of each month</td>\n",
" <td>120000</td>\n",
" <td>156483.999818</td>\n",
" <td>60</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>6.660614</td>\n",
" <td>29.424447</td>\n",
" <td>2000</td>\n",
" <td>2015</td>\n",
" <td>First Thursday of each month</td>\n",
" <td>120000</td>\n",
" <td>155309.336723</td>\n",
" <td>60</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>6.577357</td>\n",
" <td>29.020816</td>\n",
" <td>2000</td>\n",
" <td>2015</td>\n",
" <td>First day of each month</td>\n",
" <td>120000</td>\n",
" <td>154824.979560</td>\n",
" <td>60</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>6.576577</td>\n",
" <td>29.017037</td>\n",
" <td>2000</td>\n",
" <td>2015</td>\n",
" <td>First Wednesday of each month</td>\n",
" <td>120000</td>\n",
" <td>154820.444320</td>\n",
" <td>60</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>6.527687</td>\n",
" <td>28.780463</td>\n",
" <td>2000</td>\n",
" <td>2015</td>\n",
" <td>First Monday of each month</td>\n",
" <td>120000</td>\n",
" <td>154536.556004</td>\n",
" <td>60</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>6.434246</td>\n",
" <td>28.329220</td>\n",
" <td>2000</td>\n",
" <td>2015</td>\n",
" <td>First Tuesday of each month</td>\n",
" <td>120000</td>\n",
" <td>153995.063908</td>\n",
" <td>60</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" cagr% gain% recurring_invest start_year \\\n",
"4 7.456039 33.328596 500 2015 \n",
"17 7.355905 32.832316 2000 2015 \n",
"2 7.354587 32.825793 500 2015 \n",
"14 7.352916 32.817524 2000 2015 \n",
"5 7.351084 32.808460 500 2015 \n",
"16 7.348801 32.797160 2000 2015 \n",
"0 7.345451 32.780586 100 2015 \n",
"7 7.283913 32.476370 2000 2015 \n",
"13 7.280940 32.461687 2000 2015 \n",
"1 7.221066 32.166224 500 2015 \n",
"3 7.214847 32.135561 500 2015 \n",
"15 7.113514 31.636725 2000 2015 \n",
"12 6.861723 30.403333 2000 2015 \n",
"11 6.660614 29.424447 2000 2015 \n",
"6 6.577357 29.020816 2000 2015 \n",
"10 6.576577 29.017037 2000 2015 \n",
"8 6.527687 28.780463 2000 2015 \n",
"9 6.434246 28.329220 2000 2015 \n",
"\n",
" strategy total_money_invested total_money_value \\\n",
"4 Each Thursday 127000 169327.316322 \n",
"17 Last Friday of each month 120000 159398.779058 \n",
"2 Each Tuesday 129000 171345.273138 \n",
"14 Last Tuesday of each month 120000 159381.028435 \n",
"5 Each Friday 126500 168002.702417 \n",
"16 Last Thursday of each month 120000 159356.591614 \n",
"0 Daily 125800 167037.977219 \n",
"7 Last day of each month 120000 158971.644074 \n",
"13 Last Monday of each month 120000 158954.024411 \n",
"1 Each Monday 118000 155956.144512 \n",
"3 Each Wednesday 128500 169794.196014 \n",
"15 Last Wesneday of each month 120000 157964.069995 \n",
"12 First Friday of each month 120000 156483.999818 \n",
"11 First Thursday of each month 120000 155309.336723 \n",
"6 First day of each month 120000 154824.979560 \n",
"10 First Wednesday of each month 120000 154820.444320 \n",
"8 First Monday of each month 120000 154536.556004 \n",
"9 First Tuesday of each month 120000 153995.063908 \n",
"\n",
" total_times_invested \n",
"4 254 \n",
"17 60 \n",
"2 258 \n",
"14 60 \n",
"5 253 \n",
"16 60 \n",
"0 1258 \n",
"7 60 \n",
"13 60 \n",
"1 236 \n",
"3 257 \n",
"15 60 \n",
"12 60 \n",
"11 60 \n",
"6 60 \n",
"10 60 \n",
"8 60 \n",
"9 60 "
]
},
"execution_count": 739,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_invest2015 = pd.DataFrame.from_dict(invest_results)\n",
"df_invest2015.sort_values('gain%',ascending=False)"
]
},
{
"cell_type": "code",
"execution_count": 718,
"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>cagr%</th>\n",
" <th>gain%</th>\n",
" <th>recurring_invest</th>\n",
" <th>start_year</th>\n",
" <th>strategy</th>\n",
" <th>total_money_invested</th>\n",
" <th>total_money_value</th>\n",
" <th>total_times_invested</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>6.699730</td>\n",
" <td>79.254431</td>\n",
" <td>500</td>\n",
" <td>2010</td>\n",
" <td>Each Thursday</td>\n",
" <td>253500</td>\n",
" <td>454409.982241</td>\n",
" <td>507</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>6.673205</td>\n",
" <td>78.853761</td>\n",
" <td>500</td>\n",
" <td>2010</td>\n",
" <td>Each Friday</td>\n",
" <td>253000</td>\n",
" <td>452500.015813</td>\n",
" <td>506</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>6.656907</td>\n",
" <td>78.607987</td>\n",
" <td>2000</td>\n",
" <td>2010</td>\n",
" <td>Last Friday of each month</td>\n",
" <td>240000</td>\n",
" <td>428659.169323</td>\n",
" <td>120</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>6.649225</td>\n",
" <td>78.492241</td>\n",
" <td>100</td>\n",
" <td>2010</td>\n",
" <td>Daily</td>\n",
" <td>251600</td>\n",
" <td>449086.479381</td>\n",
" <td>2516</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>6.649198</td>\n",
" <td>78.491838</td>\n",
" <td>2000</td>\n",
" <td>2010</td>\n",
" <td>Last Thursday of each month</td>\n",
" <td>240000</td>\n",
" <td>428380.412148</td>\n",
" <td>120</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>6.647657</td>\n",
" <td>78.468625</td>\n",
" <td>500</td>\n",
" <td>2010</td>\n",
" <td>Each Tuesday</td>\n",
" <td>258000</td>\n",
" <td>460449.051543</td>\n",
" <td>516</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>6.632972</td>\n",
" <td>78.247579</td>\n",
" <td>2000</td>\n",
" <td>2010</td>\n",
" <td>Last Tuesday of each month</td>\n",
" <td>240000</td>\n",
" <td>427794.189401</td>\n",
" <td>120</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>6.616823</td>\n",
" <td>78.004764</td>\n",
" <td>2000</td>\n",
" <td>2010</td>\n",
" <td>Last day of each month</td>\n",
" <td>240000</td>\n",
" <td>427211.434213</td>\n",
" <td>120</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>6.601181</td>\n",
" <td>77.769868</td>\n",
" <td>2000</td>\n",
" <td>2010</td>\n",
" <td>Last Monday of each month</td>\n",
" <td>240000</td>\n",
" <td>426647.682325</td>\n",
" <td>120</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>6.589658</td>\n",
" <td>77.596994</td>\n",
" <td>500</td>\n",
" <td>2010</td>\n",
" <td>Each Wednesday</td>\n",
" <td>257500</td>\n",
" <td>457312.259539</td>\n",
" <td>515</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>6.577590</td>\n",
" <td>77.416120</td>\n",
" <td>500</td>\n",
" <td>2010</td>\n",
" <td>Each Monday</td>\n",
" <td>236000</td>\n",
" <td>418702.042491</td>\n",
" <td>472</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>6.548330</td>\n",
" <td>76.978216</td>\n",
" <td>2000</td>\n",
" <td>2010</td>\n",
" <td>Last Wesneday of each month</td>\n",
" <td>240000</td>\n",
" <td>424747.718336</td>\n",
" <td>120</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>6.444203</td>\n",
" <td>75.427685</td>\n",
" <td>2000</td>\n",
" <td>2010</td>\n",
" <td>First Friday of each month</td>\n",
" <td>240000</td>\n",
" <td>421026.443711</td>\n",
" <td>120</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>6.327603</td>\n",
" <td>73.705761</td>\n",
" <td>2000</td>\n",
" <td>2010</td>\n",
" <td>First Thursday of each month</td>\n",
" <td>240000</td>\n",
" <td>416893.825847</td>\n",
" <td>120</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>6.325924</td>\n",
" <td>73.681075</td>\n",
" <td>2000</td>\n",
" <td>2010</td>\n",
" <td>First day of each month</td>\n",
" <td>240000</td>\n",
" <td>416834.581191</td>\n",
" <td>120</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>6.310506</td>\n",
" <td>73.454539</td>\n",
" <td>2000</td>\n",
" <td>2010</td>\n",
" <td>First Wednesday of each month</td>\n",
" <td>240000</td>\n",
" <td>416290.893463</td>\n",
" <td>120</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>6.302411</td>\n",
" <td>73.335706</td>\n",
" <td>2000</td>\n",
" <td>2010</td>\n",
" <td>First Monday of each month</td>\n",
" <td>240000</td>\n",
" <td>416005.693941</td>\n",
" <td>120</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>6.248599</td>\n",
" <td>72.547601</td>\n",
" <td>2000</td>\n",
" <td>2010</td>\n",
" <td>First Tuesday of each month</td>\n",
" <td>240000</td>\n",
" <td>414114.241693</td>\n",
" <td>120</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" cagr% gain% recurring_invest start_year \\\n",
"4 6.699730 79.254431 500 2010 \n",
"5 6.673205 78.853761 500 2010 \n",
"17 6.656907 78.607987 2000 2010 \n",
"0 6.649225 78.492241 100 2010 \n",
"16 6.649198 78.491838 2000 2010 \n",
"2 6.647657 78.468625 500 2010 \n",
"14 6.632972 78.247579 2000 2010 \n",
"7 6.616823 78.004764 2000 2010 \n",
"13 6.601181 77.769868 2000 2010 \n",
"3 6.589658 77.596994 500 2010 \n",
"1 6.577590 77.416120 500 2010 \n",
"15 6.548330 76.978216 2000 2010 \n",
"12 6.444203 75.427685 2000 2010 \n",
"11 6.327603 73.705761 2000 2010 \n",
"6 6.325924 73.681075 2000 2010 \n",
"10 6.310506 73.454539 2000 2010 \n",
"8 6.302411 73.335706 2000 2010 \n",
"9 6.248599 72.547601 2000 2010 \n",
"\n",
" strategy total_money_invested total_money_value \\\n",
"4 Each Thursday 253500 454409.982241 \n",
"5 Each Friday 253000 452500.015813 \n",
"17 Last Friday of each month 240000 428659.169323 \n",
"0 Daily 251600 449086.479381 \n",
"16 Last Thursday of each month 240000 428380.412148 \n",
"2 Each Tuesday 258000 460449.051543 \n",
"14 Last Tuesday of each month 240000 427794.189401 \n",
"7 Last day of each month 240000 427211.434213 \n",
"13 Last Monday of each month 240000 426647.682325 \n",
"3 Each Wednesday 257500 457312.259539 \n",
"1 Each Monday 236000 418702.042491 \n",
"15 Last Wesneday of each month 240000 424747.718336 \n",
"12 First Friday of each month 240000 421026.443711 \n",
"11 First Thursday of each month 240000 416893.825847 \n",
"6 First day of each month 240000 416834.581191 \n",
"10 First Wednesday of each month 240000 416290.893463 \n",
"8 First Monday of each month 240000 416005.693941 \n",
"9 First Tuesday of each month 240000 414114.241693 \n",
"\n",
" total_times_invested \n",
"4 507 \n",
"5 506 \n",
"17 120 \n",
"0 2516 \n",
"16 120 \n",
"2 516 \n",
"14 120 \n",
"7 120 \n",
"13 120 \n",
"3 515 \n",
"1 472 \n",
"15 120 \n",
"12 120 \n",
"11 120 \n",
"6 120 \n",
"10 120 \n",
"8 120 \n",
"9 120 "
]
},
"execution_count": 718,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_invest2010 = pd.DataFrame.from_dict(invest_results)\n",
"df_invest2010.sort_values('gain%',ascending=False)"
]
},
{
"cell_type": "code",
"execution_count": 697,
"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>cagr%</th>\n",
" <th>gain%</th>\n",
" <th>recurring_invest</th>\n",
" <th>start_year</th>\n",
" <th>strategy</th>\n",
" <th>total_money_invested</th>\n",
" <th>total_money_value</th>\n",
" <th>total_times_invested</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>6.083418</td>\n",
" <td>103.128123</td>\n",
" <td>500</td>\n",
" <td>2007</td>\n",
" <td>Each Thursday</td>\n",
" <td>329500</td>\n",
" <td>669307.164314</td>\n",
" <td>659</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>6.076741</td>\n",
" <td>102.974755</td>\n",
" <td>2000</td>\n",
" <td>2007</td>\n",
" <td>Last Thursday of each month</td>\n",
" <td>312000</td>\n",
" <td>633281.236610</td>\n",
" <td>156</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>6.076430</td>\n",
" <td>102.967604</td>\n",
" <td>2000</td>\n",
" <td>2007</td>\n",
" <td>Last Friday of each month</td>\n",
" <td>312000</td>\n",
" <td>633258.925789</td>\n",
" <td>156</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>6.068795</td>\n",
" <td>102.792373</td>\n",
" <td>500</td>\n",
" <td>2007</td>\n",
" <td>Each Friday</td>\n",
" <td>328000</td>\n",
" <td>665158.984768</td>\n",
" <td>656</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>6.068130</td>\n",
" <td>102.777124</td>\n",
" <td>500</td>\n",
" <td>2007</td>\n",
" <td>Each Tuesday</td>\n",
" <td>335000</td>\n",
" <td>679303.367021</td>\n",
" <td>670</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>6.066163</td>\n",
" <td>102.731992</td>\n",
" <td>100</td>\n",
" <td>2007</td>\n",
" <td>Daily</td>\n",
" <td>327200</td>\n",
" <td>663339.078212</td>\n",
" <td>3272</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>6.060310</td>\n",
" <td>102.597799</td>\n",
" <td>2000</td>\n",
" <td>2007</td>\n",
" <td>Last Monday of each month</td>\n",
" <td>312000</td>\n",
" <td>632105.132583</td>\n",
" <td>156</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>6.060278</td>\n",
" <td>102.597067</td>\n",
" <td>2000</td>\n",
" <td>2007</td>\n",
" <td>Last Tuesday of each month</td>\n",
" <td>312000</td>\n",
" <td>632102.847950</td>\n",
" <td>156</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>6.046734</td>\n",
" <td>102.286815</td>\n",
" <td>2000</td>\n",
" <td>2007</td>\n",
" <td>Last day of each month</td>\n",
" <td>312000</td>\n",
" <td>631134.862686</td>\n",
" <td>156</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>6.042373</td>\n",
" <td>102.187001</td>\n",
" <td>500</td>\n",
" <td>2007</td>\n",
" <td>Each Monday</td>\n",
" <td>308000</td>\n",
" <td>622735.963476</td>\n",
" <td>616</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>6.026386</td>\n",
" <td>101.821524</td>\n",
" <td>500</td>\n",
" <td>2007</td>\n",
" <td>Each Wednesday</td>\n",
" <td>335500</td>\n",
" <td>677111.214636</td>\n",
" <td>671</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>5.978765</td>\n",
" <td>100.736464</td>\n",
" <td>2000</td>\n",
" <td>2007</td>\n",
" <td>Last Wesneday of each month</td>\n",
" <td>312000</td>\n",
" <td>626297.767019</td>\n",
" <td>156</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>5.892140</td>\n",
" <td>98.776344</td>\n",
" <td>2000</td>\n",
" <td>2007</td>\n",
" <td>First Friday of each month</td>\n",
" <td>312000</td>\n",
" <td>620182.192057</td>\n",
" <td>156</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>5.813854</td>\n",
" <td>97.020025</td>\n",
" <td>2000</td>\n",
" <td>2007</td>\n",
" <td>First Thursday of each month</td>\n",
" <td>312000</td>\n",
" <td>614702.478298</td>\n",
" <td>156</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>5.799548</td>\n",
" <td>96.700625</td>\n",
" <td>2000</td>\n",
" <td>2007</td>\n",
" <td>First day of each month</td>\n",
" <td>312000</td>\n",
" <td>613705.948574</td>\n",
" <td>156</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>5.794879</td>\n",
" <td>96.596491</td>\n",
" <td>2000</td>\n",
" <td>2007</td>\n",
" <td>First Monday of each month</td>\n",
" <td>312000</td>\n",
" <td>613381.051963</td>\n",
" <td>156</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>5.785471</td>\n",
" <td>96.386789</td>\n",
" <td>2000</td>\n",
" <td>2007</td>\n",
" <td>First Wednesday of each month</td>\n",
" <td>312000</td>\n",
" <td>612726.780499</td>\n",
" <td>156</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>5.749681</td>\n",
" <td>95.590975</td>\n",
" <td>2000</td>\n",
" <td>2007</td>\n",
" <td>First Tuesday of each month</td>\n",
" <td>312000</td>\n",
" <td>610243.842206</td>\n",
" <td>156</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" cagr% gain% recurring_invest start_year \\\n",
"4 6.083418 103.128123 500 2007 \n",
"16 6.076741 102.974755 2000 2007 \n",
"17 6.076430 102.967604 2000 2007 \n",
"5 6.068795 102.792373 500 2007 \n",
"2 6.068130 102.777124 500 2007 \n",
"0 6.066163 102.731992 100 2007 \n",
"13 6.060310 102.597799 2000 2007 \n",
"14 6.060278 102.597067 2000 2007 \n",
"7 6.046734 102.286815 2000 2007 \n",
"1 6.042373 102.187001 500 2007 \n",
"3 6.026386 101.821524 500 2007 \n",
"15 5.978765 100.736464 2000 2007 \n",
"12 5.892140 98.776344 2000 2007 \n",
"11 5.813854 97.020025 2000 2007 \n",
"6 5.799548 96.700625 2000 2007 \n",
"8 5.794879 96.596491 2000 2007 \n",
"10 5.785471 96.386789 2000 2007 \n",
"9 5.749681 95.590975 2000 2007 \n",
"\n",
" strategy total_money_invested total_money_value \\\n",
"4 Each Thursday 329500 669307.164314 \n",
"16 Last Thursday of each month 312000 633281.236610 \n",
"17 Last Friday of each month 312000 633258.925789 \n",
"5 Each Friday 328000 665158.984768 \n",
"2 Each Tuesday 335000 679303.367021 \n",
"0 Daily 327200 663339.078212 \n",
"13 Last Monday of each month 312000 632105.132583 \n",
"14 Last Tuesday of each month 312000 632102.847950 \n",
"7 Last day of each month 312000 631134.862686 \n",
"1 Each Monday 308000 622735.963476 \n",
"3 Each Wednesday 335500 677111.214636 \n",
"15 Last Wesneday of each month 312000 626297.767019 \n",
"12 First Friday of each month 312000 620182.192057 \n",
"11 First Thursday of each month 312000 614702.478298 \n",
"6 First day of each month 312000 613705.948574 \n",
"8 First Monday of each month 312000 613381.051963 \n",
"10 First Wednesday of each month 312000 612726.780499 \n",
"9 First Tuesday of each month 312000 610243.842206 \n",
"\n",
" total_times_invested \n",
"4 659 \n",
"16 156 \n",
"17 156 \n",
"5 656 \n",
"2 670 \n",
"0 3272 \n",
"13 156 \n",
"14 156 \n",
"7 156 \n",
"1 616 \n",
"3 671 \n",
"15 156 \n",
"12 156 \n",
"11 156 \n",
"6 156 \n",
"8 156 \n",
"10 156 \n",
"9 156 "
]
},
"execution_count": 697,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_invest2007 = pd.DataFrame.from_dict(invest_results)\n",
"df_invest2007.sort_values('gain%',ascending=False)"
]
},
{
"cell_type": "code",
"execution_count": 676,
"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>cagr%</th>\n",
" <th>gain%</th>\n",
" <th>recurring_invest</th>\n",
" <th>start_year</th>\n",
" <th>strategy</th>\n",
" <th>total_money_invested</th>\n",
" <th>total_money_value</th>\n",
" <th>total_times_invested</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>4.898178</td>\n",
" <td>136.495571</td>\n",
" <td>2000</td>\n",
" <td>2000</td>\n",
" <td>Last Thursday of each month</td>\n",
" <td>456000</td>\n",
" <td>1.078420e+06</td>\n",
" <td>228</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>4.893489</td>\n",
" <td>136.305354</td>\n",
" <td>2000</td>\n",
" <td>2000</td>\n",
" <td>Last Friday of each month</td>\n",
" <td>456000</td>\n",
" <td>1.077552e+06</td>\n",
" <td>228</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>4.893404</td>\n",
" <td>136.301895</td>\n",
" <td>500</td>\n",
" <td>2000</td>\n",
" <td>Each Thursday</td>\n",
" <td>481000</td>\n",
" <td>1.136612e+06</td>\n",
" <td>962</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>4.890813</td>\n",
" <td>136.196849</td>\n",
" <td>500</td>\n",
" <td>2000</td>\n",
" <td>Each Friday</td>\n",
" <td>479500</td>\n",
" <td>1.132564e+06</td>\n",
" <td>959</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>4.886845</td>\n",
" <td>136.036098</td>\n",
" <td>500</td>\n",
" <td>2000</td>\n",
" <td>Each Tuesday</td>\n",
" <td>489500</td>\n",
" <td>1.155397e+06</td>\n",
" <td>979</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>4.886747</td>\n",
" <td>136.032107</td>\n",
" <td>2000</td>\n",
" <td>2000</td>\n",
" <td>Last Tuesday of each month</td>\n",
" <td>456000</td>\n",
" <td>1.076306e+06</td>\n",
" <td>228</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>4.883752</td>\n",
" <td>135.910813</td>\n",
" <td>100</td>\n",
" <td>2000</td>\n",
" <td>Daily</td>\n",
" <td>477900</td>\n",
" <td>1.127418e+06</td>\n",
" <td>4779</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>4.877721</td>\n",
" <td>135.666772</td>\n",
" <td>2000</td>\n",
" <td>2000</td>\n",
" <td>Last Monday of each month</td>\n",
" <td>456000</td>\n",
" <td>1.074640e+06</td>\n",
" <td>228</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>4.874981</td>\n",
" <td>135.555961</td>\n",
" <td>2000</td>\n",
" <td>2000</td>\n",
" <td>Last day of each month</td>\n",
" <td>456000</td>\n",
" <td>1.074135e+06</td>\n",
" <td>228</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>4.874616</td>\n",
" <td>135.541196</td>\n",
" <td>500</td>\n",
" <td>2000</td>\n",
" <td>Each Monday</td>\n",
" <td>449500</td>\n",
" <td>1.058758e+06</td>\n",
" <td>899</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4.846235</td>\n",
" <td>134.396503</td>\n",
" <td>500</td>\n",
" <td>2000</td>\n",
" <td>Each Wednesday</td>\n",
" <td>490000</td>\n",
" <td>1.148543e+06</td>\n",
" <td>980</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>4.835638</td>\n",
" <td>133.970406</td>\n",
" <td>2000</td>\n",
" <td>2000</td>\n",
" <td>Last Wesneday of each month</td>\n",
" <td>456000</td>\n",
" <td>1.066905e+06</td>\n",
" <td>228</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>4.766928</td>\n",
" <td>131.225539</td>\n",
" <td>2000</td>\n",
" <td>2000</td>\n",
" <td>First Friday of each month</td>\n",
" <td>456000</td>\n",
" <td>1.054388e+06</td>\n",
" <td>228</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>4.712452</td>\n",
" <td>129.070917</td>\n",
" <td>2000</td>\n",
" <td>2000</td>\n",
" <td>First Thursday of each month</td>\n",
" <td>456000</td>\n",
" <td>1.044563e+06</td>\n",
" <td>228</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>4.701564</td>\n",
" <td>128.642541</td>\n",
" <td>2000</td>\n",
" <td>2000</td>\n",
" <td>First day of each month</td>\n",
" <td>456000</td>\n",
" <td>1.042610e+06</td>\n",
" <td>228</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>4.698367</td>\n",
" <td>128.516925</td>\n",
" <td>2000</td>\n",
" <td>2000</td>\n",
" <td>First Monday of each month</td>\n",
" <td>456000</td>\n",
" <td>1.042037e+06</td>\n",
" <td>228</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>4.693897</td>\n",
" <td>128.341379</td>\n",
" <td>2000</td>\n",
" <td>2000</td>\n",
" <td>First Wednesday of each month</td>\n",
" <td>456000</td>\n",
" <td>1.041237e+06</td>\n",
" <td>228</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>4.670684</td>\n",
" <td>127.431773</td>\n",
" <td>2000</td>\n",
" <td>2000</td>\n",
" <td>First Tuesday of each month</td>\n",
" <td>456000</td>\n",
" <td>1.037089e+06</td>\n",
" <td>228</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" cagr% gain% recurring_invest start_year \\\n",
"16 4.898178 136.495571 2000 2000 \n",
"17 4.893489 136.305354 2000 2000 \n",
"4 4.893404 136.301895 500 2000 \n",
"5 4.890813 136.196849 500 2000 \n",
"2 4.886845 136.036098 500 2000 \n",
"14 4.886747 136.032107 2000 2000 \n",
"0 4.883752 135.910813 100 2000 \n",
"13 4.877721 135.666772 2000 2000 \n",
"7 4.874981 135.555961 2000 2000 \n",
"1 4.874616 135.541196 500 2000 \n",
"3 4.846235 134.396503 500 2000 \n",
"15 4.835638 133.970406 2000 2000 \n",
"12 4.766928 131.225539 2000 2000 \n",
"11 4.712452 129.070917 2000 2000 \n",
"6 4.701564 128.642541 2000 2000 \n",
"8 4.698367 128.516925 2000 2000 \n",
"10 4.693897 128.341379 2000 2000 \n",
"9 4.670684 127.431773 2000 2000 \n",
"\n",
" strategy total_money_invested total_money_value \\\n",
"16 Last Thursday of each month 456000 1.078420e+06 \n",
"17 Last Friday of each month 456000 1.077552e+06 \n",
"4 Each Thursday 481000 1.136612e+06 \n",
"5 Each Friday 479500 1.132564e+06 \n",
"2 Each Tuesday 489500 1.155397e+06 \n",
"14 Last Tuesday of each month 456000 1.076306e+06 \n",
"0 Daily 477900 1.127418e+06 \n",
"13 Last Monday of each month 456000 1.074640e+06 \n",
"7 Last day of each month 456000 1.074135e+06 \n",
"1 Each Monday 449500 1.058758e+06 \n",
"3 Each Wednesday 490000 1.148543e+06 \n",
"15 Last Wesneday of each month 456000 1.066905e+06 \n",
"12 First Friday of each month 456000 1.054388e+06 \n",
"11 First Thursday of each month 456000 1.044563e+06 \n",
"6 First day of each month 456000 1.042610e+06 \n",
"8 First Monday of each month 456000 1.042037e+06 \n",
"10 First Wednesday of each month 456000 1.041237e+06 \n",
"9 First Tuesday of each month 456000 1.037089e+06 \n",
"\n",
" total_times_invested \n",
"16 228 \n",
"17 228 \n",
"4 962 \n",
"5 959 \n",
"2 979 \n",
"14 228 \n",
"0 4779 \n",
"13 228 \n",
"7 228 \n",
"1 899 \n",
"3 980 \n",
"15 228 \n",
"12 228 \n",
"11 228 \n",
"6 228 \n",
"8 228 \n",
"10 228 \n",
"9 228 "
]
},
"execution_count": 676,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_invest2000 = pd.DataFrame.from_dict(invest_results)\n",
"df_invest2000.sort_values('gain%',ascending=False)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "venv",
"language": "python",
"name": "venv"
},
"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
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment