library(quantmod)
library(readr)
library(xts)
library(PerformanceAnalytics)
#sp500 <- getSymbols("^GSPC", from = "1985-12-31", to = "2016-08-01", auto.assign = FALSE)
nasdaq <- getSymbols("^IXIC", from = "1985-12-31", to = "2016-08-01", auto.assign = FALSE)
# Convert the daily frequency to monthly frequency: (2.1 Exploring the monthly S&P 500 returns)
nasdaq_monthly <- to.monthly(nasdaq)
head(nasdaq_monthly)
## nasdaq.Open nasdaq.High nasdaq.Low nasdaq.Close nasdaq.Volume
## Dec 1985 323.6 324.9 323.2 324.9 112700000
## Jan 1986 325.0 335.8 322.1 335.8 2410850000
## Feb 1986 336.1 359.8 335.8 359.5 2345500000
## Mar 1986 360.0 374.7 359.1 374.7 2595900000
## Apr 1986 375.8 393.0 368.0 383.2 2814600000
## May 1986 383.2 400.4 381.5 400.2 2412320000
## nasdaq.Adjusted
## Dec 1985 324.9
## Jan 1986 335.8
## Feb 1986 359.5
## Mar 1986 374.7
## Apr 1986 383.2
## May 1986 400.2
# Define nasdaq_returns (2.2 The monthly mean and volatility)
nasdaq_returns <- Return.calculate(nasdaq_monthly$nasdaq.Close)
head(nasdaq_returns)
## nasdaq.Close
## Dec 1985 NA
## Jan 1986 0.03354877
## Feb 1986 0.07057776
## Mar 1986 0.04228098
## Apr 1986 0.02268481
## May 1986 0.04436326
nasdaq_returns <- nasdaq_returns[-1, ]
colnames(nasdaq_returns) <- "nasdaq"
head(nasdaq_returns)
## nasdaq
## Jan 1986 0.03354877
## Feb 1986 0.07057776
## Mar 1986 0.04228098
## Apr 1986 0.02268481
## May 1986 0.04436326
## Jun 1986 0.01324335
# Import rf (2.3 Excess returns and the portfolio’s Sharpe ratio)
rf <- read.csv("~/resources/rstudio/New Folder With Items 2/rf.csv")
rf$Date <- as.Date(rf$Date, format("%m/%d/%Y"))
rf <- rf[order(rf$Date), ]
rf <- as.xts(rf[, 2], order.by = rf$Date)
head(rf)
## [,1]
## 1986-01-31 0.0053
## 1986-02-28 0.0060
## 1986-03-31 0.0052
## 1986-04-30 0.0049
## 1986-05-31 0.0052
## 1986-06-30 0.0052
# Align dates of nasdaq_returns
merged <- merge(rf, nasdaq_returns)
head(merged)
## rf nasdaq
## 1986-01-01 NA 0.03354877
## 1986-01-31 0.0053 NA
## 1986-02-01 NA 0.07057776
## 1986-02-28 0.0060 NA
## 1986-03-01 NA 0.04228098
## 1986-03-31 0.0052 NA
merged <- na.locf(merged)
head(merged)
## rf nasdaq
## 1986-01-01 NA 0.03354877
## 1986-01-31 0.0053 0.03354877
## 1986-02-01 0.0053 0.07057776
## 1986-02-28 0.0060 0.07057776
## 1986-03-01 0.0060 0.04228098
## 1986-03-31 0.0052 0.04228098
merged <- merged[index(rf)]
head(merged)
## rf nasdaq
## 1986-01-31 0.0053 0.03354877
## 1986-02-28 0.0060 0.07057776
## 1986-03-31 0.0052 0.04228098
## 1986-04-30 0.0049 0.02268481
## 1986-05-31 0.0052 0.04436326
## 1986-06-30 0.0052 0.01324335
nasdaq_returns <- merged[, 2]
head(nasdaq_returns)
## nasdaq
## 1986-01-31 0.03354877
## 1986-02-28 0.07057776
## 1986-03-31 0.04228098
## 1986-04-30 0.02268481
## 1986-05-31 0.04436326
## 1986-06-30 0.01324335
# Compute the annualized risk free rate
annualized_rf <- (1 + rf)^12 - 1
# Plot the annualized risk free rate
plot.zoo(annualized_rf)
# Compute the series of excess portfolio returns
# Adjust date for nasdaq_returns. This code below doesn't work b/c two objects date don't match
nasdaq_excess <- nasdaq_returns - rf
head(nasdaq_returns)
## nasdaq
## 1986-01-31 0.03354877
## 1986-02-28 0.07057776
## 1986-03-31 0.04228098
## 1986-04-30 0.02268481
## 1986-05-31 0.04436326
## 1986-06-30 0.01324335
head(rf)
## [,1]
## 1986-01-31 0.0053
## 1986-02-28 0.0060
## 1986-03-31 0.0052
## 1986-04-30 0.0049
## 1986-05-31 0.0052
## 1986-06-30 0.0052
# Compare the mean
mean(nasdaq_returns)
## [1] 0.009794148
mean(nasdaq_excess)
## [1] 0.007056104
# Compute the Sharpe ratio
nasdaq_sharpe <- mean(nasdaq_excess) / sd(nasdaq_returns)
nasdaq_sharpe
## [1] 0.1107234
I would assume the Sharpe Ration for the S&P 500 would be less than that of the NASDAQ composite because the S&P 500 contains 500 large firms. These large firms will assumibly have a lower risk and lower yield than that of small/medium/large firms listed on the NASDAQ.