# Stefano Ciccarelli
import pandas as pd
import yfinance as yf
from yahoofinancials import YahooFinancials
import datetime
import numpy as np
# Taking from Wikipedia the list of the Companies inside the SP500 Index
SP_500_Data = pd.read_html('https://en.wikipedia.org/wiki/List_of_S%26P_500_companies')[0]
SP_500_Data.head()
#Initializing the dataframe
SP500_adj_Close = pd.DataFrame()
# For each stock ticker we download the stock close price daily data starting from 1st January 2017 until today
for symbol in SP_500_Data["Symbol"]:
SP500_adj_Close[symbol] = yf.download(symbol,
start='2017-01-01',
end=datetime.datetime.today(),
progress=False)["Adj Close"]
#Initializing the dataframe
SP500_Returns = pd.DataFrame()
# Generating the Daily Returns
SP500_Returns = np.log(SP500_adj_Close / SP500_adj_Close.shift(1)).iloc[1:]
SP500_Returns.head()
df = pd.DataFrame()
df["Avg_Returns"] = SP500_Returns.mean()
df["Volatilities"] = SP500_Returns.std()
df["Sharpe_Ratios"] = df["Avg_Returns"]/df["Volatilities"]*(252**0.5)
df["Sharpe_Ratios"].nlargest(10)
df.plot(x='Volatilities', y='Avg_Returns', style='o', title='Average Daily Return vs Daily Volatility', legend = False)