python-pour-finance/09-Python-Finance-Fondamentaux/.ipynb_checkpoints/01-Répartition-Portefeuill...

1353 lines
173 KiB
Plaintext
Raw Permalink Normal View History

2023-08-21 15:12:19 +00:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Sharpe Ratio and Portfolio Values"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import quandl"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Create a Portfolio"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"start = pd.to_datetime('2012-01-01')\n",
"end = pd.to_datetime('2017-01-01')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Grabbing a bunch of tech stocks for our portfolio\n",
"aapl = quandl.get('WIKI/AAPL.11',start_date=start,end_date=end)\n",
"cisco = quandl.get('WIKI/CSCO.11',start_date=start,end_date=end)\n",
"ibm = quandl.get('WIKI/IBM.11',start_date=start,end_date=end)\n",
"amzn = quandl.get('WIKI/AMZN.11',start_date=start,end_date=end)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Alternative\n",
"# aapl = pd.read_csv('AAPL_CLOSE',index_col='Date',parse_dates=True)\n",
"# cisco = pd.read_csv('CISCO_CLOSE',index_col='Date',parse_dates=True)\n",
"# ibm = pd.read_csv('IBM_CLOSE',index_col='Date',parse_dates=True)\n",
"# amzn = pd.read_csv('AMZN_CLOSE',index_col='Date',parse_dates=True)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"aapl.to_csv('AAPL_CLOSE')\n",
"cisco.to_csv('CISCO_CLOSE')\n",
"ibm.to_csv('IBM_CLOSE')\n",
"amzn.to_csv('AMZN_CLOSE')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Normalize Prices\n",
"\n",
"This is the same as cumulative daily returns"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"53.063217800140997"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Example\n",
"aapl.iloc[0]['Adj. Close']"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"for stock_df in (aapl,cisco,ibm,amzn):\n",
" stock_df['Normed Return'] = stock_df['Adj. Close']/stock_df.iloc[0]['Adj. Close']"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Adj. Close</th>\n",
" <th>Normed Return</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Date</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2012-01-03</th>\n",
" <td>53.063218</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012-01-04</th>\n",
" <td>53.348386</td>\n",
" <td>1.005374</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012-01-05</th>\n",
" <td>53.940658</td>\n",
" <td>1.016536</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012-01-06</th>\n",
" <td>54.504543</td>\n",
" <td>1.027162</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012-01-09</th>\n",
" <td>54.418089</td>\n",
" <td>1.025533</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Adj. Close Normed Return\n",
"Date \n",
"2012-01-03 53.063218 1.000000\n",
"2012-01-04 53.348386 1.005374\n",
"2012-01-05 53.940658 1.016536\n",
"2012-01-06 54.504543 1.027162\n",
"2012-01-09 54.418089 1.025533"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"aapl.head()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Adj. Close</th>\n",
" <th>Normed Return</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Date</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2016-12-23</th>\n",
" <td>115.547742</td>\n",
" <td>2.177549</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2016-12-27</th>\n",
" <td>116.281568</td>\n",
" <td>2.191378</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2016-12-28</th>\n",
" <td>115.785740</td>\n",
" <td>2.182034</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2016-12-29</th>\n",
" <td>115.755990</td>\n",
" <td>2.181473</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2016-12-30</th>\n",
" <td>114.853583</td>\n",
" <td>2.164467</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Adj. Close Normed Return\n",
"Date \n",
"2016-12-23 115.547742 2.177549\n",
"2016-12-27 116.281568 2.191378\n",
"2016-12-28 115.785740 2.182034\n",
"2016-12-29 115.755990 2.181473\n",
"2016-12-30 114.853583 2.164467"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"aapl.tail()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Allocations\n",
"\n",
"Let's pretend we had the following allocations for our total portfolio:\n",
"\n",
"* 30% in Apple\n",
"* 20% in Google/Alphabet\n",
"* 40% in Amazon\n",
"* 10% in IBM\n",
"\n",
"Let's have these values be reflected by multiplying our Norme Return by out Allocations"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"for stock_df,allo in zip([aapl,cisco,ibm,amzn],[.3,.2,.4,.1]):\n",
" stock_df['Allocation'] = stock_df['Normed Return']*allo"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Adj. Close</th>\n",
" <th>Normed Return</th>\n",
" <th>Allocation</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2012-01-03</th>\n",
" <td>53.063218</td>\n",
" <td>1.000000</td>\n",
" <td>0.300000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012-01-04</th>\n",
" <td>53.348386</td>\n",
" <td>1.005374</td>\n",
" <td>0.301612</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012-01-05</th>\n",
" <td>53.940658</td>\n",
" <td>1.016536</td>\n",
" <td>0.304961</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012-01-06</th>\n",
" <td>54.504543</td>\n",
" <td>1.027162</td>\n",
" <td>0.308149</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012-01-09</th>\n",
" <td>54.418089</td>\n",
" <td>1.025533</td>\n",
" <td>0.307660</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Adj. Close Normed Return Allocation\n",
"Date \n",
"2012-01-03 53.063218 1.000000 0.300000\n",
"2012-01-04 53.348386 1.005374 0.301612\n",
"2012-01-05 53.940658 1.016536 0.304961\n",
"2012-01-06 54.504543 1.027162 0.308149\n",
"2012-01-09 54.418089 1.025533 0.307660"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"aapl.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Investment\n",
"\n",
"Let's pretend we invested a million dollars in this portfolio"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"for stock_df in [aapl,cisco,ibm,amzn]:\n",
" stock_df['Position Values'] = stock_df['Allocation']*1000000"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Total Portfolio Value"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"portfolio_val = pd.concat([aapl['Position Values'],cisco['Position Values'],ibm['Position Values'],amzn['Position Values']],axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Position Values</th>\n",
" <th>Position Values</th>\n",
" <th>Position Values</th>\n",
" <th>Position Values</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2012-01-03</th>\n",
" <td>300000.000000</td>\n",
" <td>200000.000000</td>\n",
" <td>400000.000000</td>\n",
" <td>100000.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012-01-04</th>\n",
" <td>301612.236461</td>\n",
" <td>203864.734300</td>\n",
" <td>398368.223296</td>\n",
" <td>99150.980283</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012-01-05</th>\n",
" <td>304960.727573</td>\n",
" <td>203113.258186</td>\n",
" <td>396478.797638</td>\n",
" <td>99206.836843</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012-01-06</th>\n",
" <td>308148.724558</td>\n",
" <td>202361.782072</td>\n",
" <td>391926.999463</td>\n",
" <td>101999.664861</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012-01-09</th>\n",
" <td>307659.946988</td>\n",
" <td>203650.026838</td>\n",
" <td>389887.278583</td>\n",
" <td>99737.474166</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Position Values Position Values Position Values Position Values\n",
"Date \n",
"2012-01-03 300000.000000 200000.000000 400000.000000 100000.000000\n",
"2012-01-04 301612.236461 203864.734300 398368.223296 99150.980283\n",
"2012-01-05 304960.727573 203113.258186 396478.797638 99206.836843\n",
"2012-01-06 308148.724558 202361.782072 391926.999463 101999.664861\n",
"2012-01-09 307659.946988 203650.026838 389887.278583 99737.474166"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"portfolio_val.head()"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"portfolio_val.columns = ['AAPL Pos','CISCO Pos','IBM Pos','AMZN Pos']"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>AAPL Pos</th>\n",
" <th>CISCO Pos</th>\n",
" <th>IBM Pos</th>\n",
" <th>AMZN Pos</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2012-01-03</th>\n",
" <td>300000.000000</td>\n",
" <td>200000.000000</td>\n",
" <td>400000.000000</td>\n",
" <td>100000.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012-01-04</th>\n",
" <td>301612.236461</td>\n",
" <td>203864.734300</td>\n",
" <td>398368.223296</td>\n",
" <td>99150.980283</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012-01-05</th>\n",
" <td>304960.727573</td>\n",
" <td>203113.258186</td>\n",
" <td>396478.797638</td>\n",
" <td>99206.836843</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012-01-06</th>\n",
" <td>308148.724558</td>\n",
" <td>202361.782072</td>\n",
" <td>391926.999463</td>\n",
" <td>101999.664861</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012-01-09</th>\n",
" <td>307659.946988</td>\n",
" <td>203650.026838</td>\n",
" <td>389887.278583</td>\n",
" <td>99737.474166</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" AAPL Pos CISCO Pos IBM Pos AMZN Pos\n",
"Date \n",
"2012-01-03 300000.000000 200000.000000 400000.000000 100000.000000\n",
"2012-01-04 301612.236461 203864.734300 398368.223296 99150.980283\n",
"2012-01-05 304960.727573 203113.258186 396478.797638 99206.836843\n",
"2012-01-06 308148.724558 202361.782072 391926.999463 101999.664861\n",
"2012-01-09 307659.946988 203650.026838 389887.278583 99737.474166"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"portfolio_val.head()"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"portfolio_val['Total Pos'] = portfolio_val.sum(axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>AAPL Pos</th>\n",
" <th>CISCO Pos</th>\n",
" <th>IBM Pos</th>\n",
" <th>AMZN Pos</th>\n",
" <th>Total Pos</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",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2012-01-03</th>\n",
" <td>300000.000000</td>\n",
" <td>200000.000000</td>\n",
" <td>400000.000000</td>\n",
" <td>100000.000000</td>\n",
" <td>1.000000e+06</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012-01-04</th>\n",
" <td>301612.236461</td>\n",
" <td>203864.734300</td>\n",
" <td>398368.223296</td>\n",
" <td>99150.980283</td>\n",
" <td>1.002996e+06</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012-01-05</th>\n",
" <td>304960.727573</td>\n",
" <td>203113.258186</td>\n",
" <td>396478.797638</td>\n",
" <td>99206.836843</td>\n",
" <td>1.003760e+06</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012-01-06</th>\n",
" <td>308148.724558</td>\n",
" <td>202361.782072</td>\n",
" <td>391926.999463</td>\n",
" <td>101999.664861</td>\n",
" <td>1.004437e+06</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012-01-09</th>\n",
" <td>307659.946988</td>\n",
" <td>203650.026838</td>\n",
" <td>389887.278583</td>\n",
" <td>99737.474166</td>\n",
" <td>1.000935e+06</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" AAPL Pos CISCO Pos IBM Pos AMZN Pos \\\n",
"Date \n",
"2012-01-03 300000.000000 200000.000000 400000.000000 100000.000000 \n",
"2012-01-04 301612.236461 203864.734300 398368.223296 99150.980283 \n",
"2012-01-05 304960.727573 203113.258186 396478.797638 99206.836843 \n",
"2012-01-06 308148.724558 202361.782072 391926.999463 101999.664861 \n",
"2012-01-09 307659.946988 203650.026838 389887.278583 99737.474166 \n",
"\n",
" Total Pos \n",
"Date \n",
"2012-01-03 1.000000e+06 \n",
"2012-01-04 1.002996e+06 \n",
"2012-01-05 1.003760e+06 \n",
"2012-01-06 1.004437e+06 \n",
"2012-01-09 1.000935e+06 "
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"portfolio_val.head()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x23286633518>"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n7B9SmyvcRQjmmJkjIiK
"text/plain": [
"<matplotlib.figure.Figure at 0x23286463358>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"portfolio_val['Total Pos'].plot(figsize=(10,8))\n",
"plt.title('Total Portfolio Value')"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x23286aa1908>"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nV4UQgq7Na3HhSum1N0r
"text/plain": [
"<matplotlib.figure.Figure at 0x23286463048>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"portfolio_val.drop('Total Pos',axis=1).plot(kind='line')"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>AAPL Pos</th>\n",
" <th>CISCO Pos</th>\n",
" <th>IBM Pos</th>\n",
" <th>AMZN Pos</th>\n",
" <th>Total Pos</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",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2016-12-23</th>\n",
" <td>653264.617079</td>\n",
" <td>377469.015679</td>\n",
" <td>407359.955612</td>\n",
" <td>424839.412389</td>\n",
" <td>1.862933e+06</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2016-12-27</th>\n",
" <td>657413.396830</td>\n",
" <td>379323.596496</td>\n",
" <td>408410.671112</td>\n",
" <td>430877.506563</td>\n",
" <td>1.876025e+06</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2016-12-28</th>\n",
" <td>654610.167268</td>\n",
" <td>376108.989746</td>\n",
" <td>406089.322915</td>\n",
" <td>431285.259454</td>\n",
" <td>1.868094e+06</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2016-12-29</th>\n",
" <td>654441.973495</td>\n",
" <td>376603.544631</td>\n",
" <td>407091.167926</td>\n",
" <td>427386.471541</td>\n",
" <td>1.865523e+06</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2016-12-30</th>\n",
" <td>649340.095692</td>\n",
" <td>373636.215323</td>\n",
" <td>405600.618032</td>\n",
" <td>418851.589119</td>\n",
" <td>1.847429e+06</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" AAPL Pos CISCO Pos IBM Pos AMZN Pos \\\n",
"Date \n",
"2016-12-23 653264.617079 377469.015679 407359.955612 424839.412389 \n",
"2016-12-27 657413.396830 379323.596496 408410.671112 430877.506563 \n",
"2016-12-28 654610.167268 376108.989746 406089.322915 431285.259454 \n",
"2016-12-29 654441.973495 376603.544631 407091.167926 427386.471541 \n",
"2016-12-30 649340.095692 373636.215323 405600.618032 418851.589119 \n",
"\n",
" Total Pos \n",
"Date \n",
"2016-12-23 1.862933e+06 \n",
"2016-12-27 1.876025e+06 \n",
"2016-12-28 1.868094e+06 \n",
"2016-12-29 1.865523e+06 \n",
"2016-12-30 1.847429e+06 "
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"portfolio_val.tail()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Portfolio Statistics\n",
"### Daily Returns"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"portfolio_val['Daily Return'] = portfolio_val['Total Pos'].pct_change(1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Cumulative Return"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Our return 84.74285181665459 was percent!\n"
]
}
],
"source": [
"cum_ret = 100 * (portfolio_val['Total Pos'][-1]/portfolio_val['Total Pos'][0] -1 )\n",
"print('Our return {} was percent!'.format(cum_ret))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Avg Daily Return"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.0005442330716215298"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"portfolio_val['Daily Return'].mean()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Std Daily Return"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.010568287769162561"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"portfolio_val['Daily Return'].std()"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x232869912e8>"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n2zX0R/MsezKVhYikS08
"text/plain": [
"<matplotlib.figure.Figure at 0x232869a7208>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"portfolio_val['Daily Return'].plot(kind='kde')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Sharpe Ratio\n",
"\n",
"The Sharpe Ratio is a measure for calculating risk-adjusted return, and this ratio has become the industry standard for such calculations. \n",
"\n",
"Sharpe ratio = (Mean portfolio return Risk-free rate)/Standard deviation of portfolio return\n",
"\n",
"The original Sharpe Ratio\n",
"\n",
"Annualized Sharpe Ratio = K-value * SR\n",
"\n",
"K-values for various sampling rates:\n",
"\n",
"* Daily = sqrt(252)\n",
"* Weekly = sqrt(52)\n",
"* Monthly = sqrt(12)\n",
"\n",
"Since I'm based in the USA, I will use a very low risk-free rate (the rate you would get if you just put your money in a bank, its currently very low in the USA, let's just say its ~0% return). If you are in a different country with higher rates for your trading currency, you can use this trick to convert a yearly rate with a daily rate:\n",
"\n",
"daily_rate = ((1.0 + yearly_rate)**(1/252))-1\n",
"\n",
"Other values people use are things like the 3-month treasury bill or [LIBOR](http://www.investopedia.com/terms/l/libor.asp).\n",
"\n",
"Read more: Sharpe Ratio http://www.investopedia.com/terms/s/sharperatio"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"SR = portfolio_val['Daily Return'].mean()/portfolio_val['Daily Return'].std()"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.05149680662647732"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"SR"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"ASR = (252**0.5)*SR"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.8174864618858524"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ASR"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.010568287769162561"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"portfolio_val['Daily Return'].std()"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.0005442330716215298"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"portfolio_val['Daily Return'].mean()"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x23286445e80>"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAD8CAYAAAB6paOMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl0W+d95vHvjyAJ7vsiihJFSpYXRbYlWZZdO+5p7Shx\nnEVuMs04nTTupEnaaZpmmbTHaaY9mZlOm2RO023SxVlaJU6cJs1i13XT2spS27FlU44sy5ZtrZRE\ncZVEghQJbnjnD1zINEWKEAng4gLP5xweABf3Aj9egnz4vu997zXnHCIikr8K/C5ARET8pSAQEclz\nCgIRkTynIBARyXMKAhGRPKcgEBHJcwoCEZE8pyAQEclzCgIRkTxX6HcByWhoaHDt7e1+lyEiEih7\n9uwZdM41LrZeIIKgvb2dzs5Ov8sQEQkUM+tKZj11DYmI5DkFgYhInlMQiIjkOQWBiEieUxCIiOQ5\nBYGISJ5TEIiI5LlAzCMQyaTpmRj/vO8Uk9MxdmxqpaQo5HdJImmlIBCZxTnHx7/1HA8+dwqAb3ee\n5L7336AwkJymriGRWX78ygAPPneK37n1Mj7/rmvp7DrLX//okN9liaSVgkBkli8/dpQVVSX89q3r\neceWVbzt2pXc+9gRhsYm/S5NJG0UBCKeM+cm+enhQX556yqKC+O/Gr/1C+uITsX4VucJn6sTSR8F\ngYjnhy/1E3OwfUPz+WVXtVSxraOOb+w+jnPOx+pE0kdBIOLZdaCPFVUlXN1a/Zrld25q5djpMV7q\nHfGpMpH0UhCIED9a6JljZ7lpXT1m9prntm9oxgz+7YVen6oTSS8FgQjQPTTO4OgEm9tqLniusTLM\nlrZafvhSvw+ViaSfgkAE+NnxIQA2t9XO+/zN6+rZ3z1MJDqVybJEMkJBIALsPTFEuLCAK1ZUzvv8\nDWvriTnY03U2w5WJpJ+CQAR48VSEq1qqKArN/yuxpa2WopCx+8iZDFcmkn4KAhHgYP8IlzdXLPh8\naXGIja3VPKsWgeQgBYHkvTPnJhkcneTy5vm7hRKubq3mxZ4IsZjmE0huURBI3nulLz4/4LKmhVsE\nABtbqxmdmObo6XOZKEskYxQEkvcO9o8CLNoi2LgyPtFsf/dw2msSySQFgeS9w/2jlBeHaKkuueh6\n65srKC4sUBBIzlEQSN47dvoca+rLL5hRPFdRqID1TRW80jeaocpEMiPtQWBmITP7mZk95D2uM7NH\nzOygdzv/DB6RDDl+Zow19WVJrXtZUwWH+hUEklsy0SL4CHBg1uN7gF3OufXALu+xiC9iMcfJM+O0\n1SUXBOubKugeGufcxHSaKxPJnLQGgZmtAt4CfGnW4h3ATu/+TuDOdNYgcjG9kSiTMzHakm4RxAeU\nDw+oVSC5I90tgj8Hfg+IzVrW7Jzr8e73As0XbCWSIcfPjAEk3SJIHGJ6UOMEkkPSFgRm9lag3zm3\nZ6F1XPxKH/POzjGzD5pZp5l1DgwMpKtMyXPHT19aEKypL6OwwNQikJySzhbBzcDbzewY8E3gVjO7\nD+gzsxYA73bec/s65+51zm11zm1tbGxMY5mSz46fGSNUYKysKU1q/aJQAa21pedbEiK5IG1B4Jz7\npHNulXOuHbgL+KFz7j3Ag8Dd3mp3Aw+kqwaRxXSdGWNlTcmCJ5ubT1tdGScUBJJD/JhH8Blgu5kd\nBN7gPRbxxYkzY0l3CyW01ZXRpSCQHFKYiTdxzv0Y+LF3/zRwWybeV2QxvcNRbr6s4ZK2aasrY2hs\niuHxKapLi9JUmUjmaGax5K2ZmGNgdIIV1eFL2i7RglD3kOQKBYHkrdOjE8zEHCuqLn6OobkScw4U\nBJIrFASSt3ojUQCaLzEIVnstAh05JLlCQSB5q3d4aUFQVVJEbVmRBowlZygIJG/1eS2CFYucfno+\nOoRUcomCQPJWbyRKqMBoqLi0wWKAlTWl9HgtCpGgUxBI3uqLTNBYESZUcPHrEMxnRXUJPUPjxM+S\nIhJsCgLJW32RKM1L6BYCWFldyrnJGSJRnY5agk9BIHmrdzhKc+WldwvBq+MKveoekhygIJC81RuJ\nLmmgGGBlTXy7U8PjqSxJxBcKAslLY5PTjESnL/nQ0YQV1fGzlapFILlAQSB5qS8yAXDJs4oTmirD\nFBj0DKlFIMGnIJC8tNTJZAlFoQIaK8M6hFRygoJA8tKrk8mWNlgM0FKtuQSSGxQEkpf6lnieodla\nqks0WCw5QUEgeak3EqW8OERlydKvJ9BSXUrvcFSTyiTwFASSl/oi0WW1BiB+COnY5AyRcU0qk2BT\nEEhe6h1efhAk5iD0RNQ9JMGmIJC81BeZWPJksoSWRBBowFgCTkEgeScWc/SPLL9F0FQZ337Am5Mg\nElQKAsk7Z8YmmZpxrKha+qGjAI3eeYr6R9QikGBTEEjeWe5ksoSSohBVJYX0j6hFIMGmIJC8k/gP\nfqmnoJ6tuaqEfnUNScApCCTv9A4v7zxDszVVhelT15AEnIJA8k5vJIrZq338y9FUqRaBBJ+CQPJO\n33CU+vIwRaHlf/ybKsMMjExodrEEmoJA8k7fSHRZJ5ubrbEyzORMjOHxqZS8nogfFASSd3qHoykZ\nH4BXjzzSkUMSZAoCyTupOM9QQpM3zpA4m6lIECkIJK9Ep2Y4OzaVshZBU6JFoAFjCTAFgeSVxB/s\nVLcI1DUkQaYgkLzSl8LJZADl4ULKi0M6zYQEmoJA8kri9BKp6hoCb3axWgQSYAoCySvnr1WcwiBo\nrAzTr8FiCTAFgeSV3uEo4cICqkoLU/aaTWoRSMApCCSv9I3EL0hjZil7zabKMP0RzS6W4EpbEJhZ\niZk9bWbPmdkLZvY/veV1ZvaImR30bmvTVYPIXH0puETlXE2VYcanZhid0LWLJZjS2SKYAG51zl0L\nbAJuN7MbgXuAXc659cAu77FIRvRGUjerOEGziyXo0hYELm7Ue1jkfTlgB7DTW74TuDNdNYjM5pyj\nNxKleZlXJpvr/FwCTSqTgErrGIGZhcxsL9APPOKc2w00O+d6vFV6geYFtv2gmXWaWefAwEA6y5Q8\nMTw+xeR0LPVdQ1W6ZKUEW1qDwDk345zbBKwCtpnZxjnPO+KthPm2vdc5t9U5t7WxsTGdZUqe6E0c\nOpqiyWQJjZU6zYQEW0aOGnLODQE/Am4H+sysBcC77c9EDSLpmEwGUFVSSLiwQC0CCax0HjXUaGY1\n3v1SYDvwEvAgcLe32t3AA+mqQWS2xGSyVHcNmZlmF0ugpW5WzYVagJ1mFiIeON9yzj1kZk8C3zKz\nXwe6gHelsQaR8/q8rpumFA8WQ3zAWKeilqBKWxA45/YBm+dZfhq4LV3vK7KQ3kiUuvJiwoWhlL92\nc3UJB05FUv66IpmgmcWSN9IxmSyhubJELQIJLAWB5I34ZLLUdwsBNFeFOTep2cUSTAoCyRt9kYn0\ntQi811WrQIJIQSB5YXI6xulz6QuCxAC0gkCCSEEgeaF/JIpzsLImvS0CTSqTIFIQSF5ITCZT15DI\nhRQEkhd6vCBoqS5Ny+tXhAupCBeeP42FSJAoCCQvnD+9RIrPMzRbU1VYXUMSSAoCyQu9kShlxSGq\nStI3mV5zCSSoFASSF3qHoym/ROVczVVh+nTiOQkgBYHkhZ7h8ZSfdXSu5qoS+nTtYgmgpILAzL5r\nZm8xMwWHBFKiRZBOzVUlTE7HGB6fSuv7iKRasn/Y/xr4FeCgmX3GzK5IY00iKTUTc/SNTNCSgSCA\nV89yKhIUSQWBc+5R59x/AbYAx4BHzeynZvZfzawonQWKLNfg6AQzMceKNB06mpC4FrIOIZWgSbqr\nx8zqgV8D3g/8DPgL4sHwSFoqE0mRdF2ZbC5NKpOgSupYOjP7HnAF8DXgbbMuPv+PZtaZruJEUuHV\nyWTpDYLGSu8i9goCCZhkD6r+onPu4dkLzCzsnJtwzm1NQ10iKdM7PA6kdzIZQElRiJqyIo0RSOAk\n2zX0R/MsezKVhYikS08
"text/plain": [
"<matplotlib.figure.Figure at 0x23285da5cf8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"portfolio_val['Daily Return'].plot('kde')"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x232885a1ef0>"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\noMNQq96nQaB8xylVqYe
"text/plain": [
"<matplotlib.figure.Figure at 0x232885a7b38>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"aapl['Adj. Close'].pct_change(1).plot('kde')\n",
"ibm['Adj. Close'].pct_change(1).plot('kde')\n",
"amzn['Adj. Close'].pct_change(1).plot('kde')\n",
"cisco['Adj. Close'].pct_change(1).plot('kde')"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"12.699606293110037"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"np.sqrt(252)* (np.mean(.001-0.0002)/.001)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Great Job!"
]
}
],
"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.6.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}