(This article was first published on

I'll begin with a familiar image:**mickey mouse models**, and kindly contributed to R-bloggers)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...