Sharpe Ratio and Portfolio Values
This post includes code and notes from python for finance and trading algorithms udemy course and python for finance and trading algorithms udemy course notebooks.
import pandas as pd
import pandas_datareader.data as web
import datetime
import quandl
df = pd.read_csv('https://stocks-snp-500.herokuapp.com/stocks/index_stocks_table.csv?_size=max')
df.head()
df['Date'] = pd.to_datetime(df.Date)
df.index = pd.to_datetime(df.Date)
df2 = df.drop('Date', axis=1)
df3 = df2.drop('rowid', axis=1)
df3 = df3.drop('Russell_2000_stock', axis=1)
df3 = df3.drop('SP500_stock', axis=1)
df3
stocks = df3
stocks
# stocks
# stocks['FXAIX_stock Daily Return'] = stocks['FXAIX_stock'].pct_change(1)
# cum_ret = 100 * (stocks['FXAIX_stock'][-1] / stocks['FXAIX_stock'][0] - 1 )
# print('Our return {} was percent!'.format(cum_ret))
# stocks['FXAIX_stock Daily Return'].mean()
# stocks['FXAIX_stock Daily Return'].std()
# stocks['FXAIX_stock Daily Return'].plot(kind = 'kde')
# portfolio_val=stocks
# SR = portfolio_val['FXAIX_stock Daily Return'].mean() / portfolio_val['FXAIX_stock Daily Return'].std()
# SR
# ASR = (252 ** 0.5) * SR
# ASR
# portfolio_val['FXAIX_stock Daily Return'].std()
# import matplotlib.pyplot as plt
# %matplotlib inline
# fig = plt.figure(figsize = (12, 8))
# portfolio_val['FXAIX_stock Daily Return'].plot(kind = 'kde')
start = pd.to_datetime('2020-01-01')
end = pd.to_datetime('today')
FXAIX_stock = web.DataReader('FXAIX', 'yahoo', start, end)
FXAIX_stock.head()
VRTTX_stock = web.DataReader('VRTTX', 'yahoo', start, end)
VRTTX_stock.head()
FNCMX_stock = web.DataReader('FNCMX', 'yahoo', start, end)
FNCMX_stock.head()
FSMAX_stock = web.DataReader('FSMAX', 'yahoo', start, end)
FSMAX_stock.head()
VRTTX_stock
FNCMX_stock
for stock_df in (FXAIX_stock, VRTTX_stock, FNCMX_stock, FSMAX_stock):
stock_df['Normed Return'] = stock_df['Adj Close'] / stock_df.iloc[0]['Adj Close']
stock_df
## Allocations
for stock_df,allo in zip([FXAIX_stock, VRTTX_stock, FNCMX_stock, FSMAX_stock],[.7, .1, .1, .1]):
stock_df['Allocation'] = stock_df['Normed Return'] * allo
stock_df
## Investment
for stock_df in [FXAIX_stock, VRTTX_stock, FNCMX_stock, FSMAX_stock]:
stock_df['Position Values'] = stock_df['Allocation'] * 100000
stock_df
## Total Portfolio Value
portfolio_val = pd.concat([FXAIX_stock['Position Values'],
VRTTX_stock['Position Values'],
FNCMX_stock['Position Values'],
FSMAX_stock['Position Values']],
axis = 1)
portfolio_val.head()
portfolio_val.columns = ['FXAIX_stock Pos', 'VRTTX_stock Pos', 'FNCMX_stock Pos', 'FSMAX_stock Pos']
portfolio_val.head()
portfolio_val['Total Pos'] = portfolio_val.sum(axis = 1)
portfolio_val.head()
import matplotlib.pyplot as plt
%matplotlib inline
portfolio_val['Total Pos'].plot(figsize = (12, 8))
plt.title('Total Portfolio Value')
portfolio_val.drop('Total Pos',
axis = 1).plot(kind = 'line', figsize = (12, 8))
portfolio_val.tail()
portfolio_val['Daily Return'] = portfolio_val['Total Pos'].pct_change(1)
cum_ret = 100 * (portfolio_val['Total Pos'][-1] / portfolio_val['Total Pos'][0] - 1 )
print('Our return {} was percent!'.format(cum_ret))
portfolio_val['Daily Return'].mean()
portfolio_val['Daily Return'].std()
portfolio_val['Daily Return'].plot(kind = 'kde')
SR = portfolio_val['Daily Return'].mean() / portfolio_val['Daily Return'].std()
SR
ASR = (252 ** 0.5) * SR
ASR
portfolio_val['Daily Return'].std()
portfolio_val['Daily Return'].mean()
fig = plt.figure(figsize = (12, 8))
portfolio_val['Daily Return'].plot(kind = 'kde')
fig = plt.figure(figsize = (12, 8))
FXAIX_stock['Adj Close'].pct_change(1).plot(kind ='kde', label = 'FXAIX_stock')
VRTTX_stock['Adj Close'].pct_change(1).plot(kind ='kde', label = 'VRTTX_stock')
FNCMX_stock['Adj Close'].pct_change(1).plot(kind ='kde', label = 'FNCMX_stock')
FSMAX_stock['Adj Close'].pct_change(1).plot(kind ='kde', label = 'FSMAX_stock')
plt.legend()