Fork me on GitHub

Money Manager Performance Analytics with rCharts + nvd3 + angular

Interactivity significantly aids visual analysis of data. Here is a quick example how we might use the dev branch of rCharts which includes some basic angular controls.

library(reshape2)
library(plyr)
library(quantmod)
library(PerformanceAnalytics)
library(rCharts)

data(managers)
managers.melt <- melt(data.frame(index(managers), managers), id.vars = 1)
colnames(managers.melt) <- c("date", "manager", "perf")

managers.melt.calcs <- managers.melt

managers.melt.calcs <- ddply(managers.melt.calcs, c("manager"), transform, cumul = cumprod(1 + 
    na.fill(perf, 0)))

# gave up on using ddply the right way with rolling get sharpe
managers.melt.calcs$sharpe <- ddply(managers.melt.calcs, c("manager"), .fun = function(data) {
    mysharpe = rollapply(as.xts(data$perf, order.by = data$date), width = 36, 
        na.pad = TRUE, FUN = function(x) {
            SharpeRatio(x, FUN = "StdDev")
        })
    return(mysharpe)
})[, 2]

# gave up on using ddply the right way with rolling get drawdown
managers.melt.calcs$drawdown <- ddply(managers.melt.calcs, c("manager"), .fun = function(data) {
    mydraw = Drawdowns(as.xts(data$perf, order.by = data$date))
    return(mydraw)
})[, 2]

n1 <- nPlot(cumul ~ date, data = managers.melt.calcs, group = "manager", type = "lineWithFocusChart")
# tell nvd3 how to deal with dates
n1$xAxis(tickFormat = "#!function(d) {return d3.time.format('%b %Y')(new Date( d * 86400000 ));}!#")
n1$x2Axis(tickFormat = "#!function(d) {return d3.time.format('%Y')(new Date( d * 86400000 ));}!#")
# add Angular control for y variable
n1$addControls("y", value = "cumul", values = names(managers.melt.calcs)[-(1:2)])

n1$show("iframe", cdn = F)