(This article was first published on mickey mouse models, and kindly contributed to R-bloggers)
I'll begin with a familiar image:Let's continue with a plot of the 200-day running mean of logarithmic returns. If you bought the index on a given day, what average logarithmic returns would you have seen across the next 200 trading days? Look below:
Here's my code; suggestions and comments welcome.
# Yahoo finance url for S&P 500 data
str <- sprintf("%s?s=^GSPC&d=7&e=4&f=2011&g=d&a=0&b=3&c=1950",
"http://ichart.finance.yahoo.com/table.csv")
df <- tryCatch(read.csv(url(str)), error = function(e) NA)
names(df) <- tolower(names(df))
df$date <- as.Date(df$date)
df <- df[order(df$date), ]
# Plot prices, daily log returns & running mean of log returns since 1990
start.date <- "1990-01-01"
dev.new(width=12, height=6)
plot(subset(df, date >= start.date)[ , c("date", "close")], type="l",
main="S&P 500", xlab="", col="tomato")
mtext(sprintf("Closing prices since %s", start.date))
mtext(sprintf("Created on %s", Sys.Date()), side=1, line=3, cex=0.60)
savePlot("s&p_500_prices.png")
# Logarithmic returns: p0 * e^r = p1 ; r = ln(p1) - ln(p0)
df$return <- c(diff(log(df$close)), NA)
dev.new(width=12, height=6)
plot(subset(df, date >= start.date)[ , c("date", "return")], type="p",
main="S&P 500", xlab="", col=rgb(0, 75, 0, 75, maxColorValue=255))
mtext(sprintf("Logarithmic close-to-close returns since %s", start.date))
mtext(sprintf("Created on %s", Sys.Date()), side=1, line=3, cex=0.6)
savePlot("s&p_500_daily_returns.png")
# Running average of logarithmic returns
lag <- 200
df$mean.return <- c(diff(c(0, cumsum(df$return)), lag=lag),
rep(NA, (lag - 1))) * (1 / lag)
dev.new(width=12, height=6)
plot(subset(df, date >= start.date)[ , c("date", "mean.return")],
type="l", main="S&P 500", xlab="", col="darkred",
ylab=sprintf("%s-day mean return", lag))
mtext(sprintf("%s-day mean of logarithmic returns since %s",
lag, start.date))
mtext(sprintf("Created on %s", Sys.Date()), side=1, line=3, cex=0.6)
abline(0, 0, lty=2)
savePlot(sprintf("s&p_500_%s_day_mean_returns.png", lag))
To leave a comment for the author, please follow the link and comment on his blog: mickey mouse models.
R-bloggers.com offers daily e-mail updates about R news and tutorials on topics such as: visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...




Zero Inflated Models and Generalized Linear Mixed Models with R.
Zuur, Saveliev, Ieno (2012).