2013 Summary

January 6, 2014
By

(This article was first published on Quintuitive » R, and kindly contributed to R-bloggers)

2013 was a tough year. Trading was tough, with one of my strategies experiencing a significant drawdown. Research was tough – wasted a lot of time on machine learing techneques, without much to show for it. Also made some expensive mistakes, so all in all – it was a year I’d prefer I had avoided. :)

The strategy I use on the SPY, for which I share my entries and exits, was the biggest disappointment. Not only it ended the year in red (to the tune of -6.5%), but it also dragged me through a significant (close to its historical maximum) drawdown. This unpleasant experience was a practical conformation of the toughness of trading at psychological level.

My ARMA strategy performed well, but not exceptionally so, thus, I ended up with an overall gain of about 5% in my trading account (the SPY strategy and the ARMA strategy).

The Max-Sharpe strategy which I started using in May this year returned 12% for the year. However, that’s exactly where I did my “expensive” mistake, thus, I ended only with a small plus for the months I traded it.

At the end of the year, I like to look at the annual volatility. As the following chart illustrates, 2013 was a year of low volatility on historic basis:

Dow Jones Annual Volatility

Dow Jones Annual Volatility

The following code confirms:

library(quantmod)
 
getSymbols("DJIA", src="FRED", from="1800-01-01")
# Use FRED, Yahoo does not provide Dow Jones historic data anymore
 
dji = na.exclude(DJIA["/2013"])
 
djiVol = aggregate(
               dji,
               as.numeric(format(index(dji), "%Y")),
               function(ss) coredata(tail(TTR:::volatility(
                                                   ss,
                                                   n=NROW(ss),
                                                   calc="close"), 1)))
ecdf(as.vector(djiVol))(as.numeric(tail(djiVol,1)))
# The result is 0.1864407, the 18nd quantile

# Compute the absolute returns
absRets = na.exclude(abs(ROC(dji["/2013"], type="discrete")))
 
# Summarize annually
yy = as.numeric(format(index(absRets), "%Y"))
zz = aggregate(absRets, yy, function(ss) tail(cumprod(1+ss),1))
 
print(as.vector(tail(zz,1)))
# The result is 3.45

The second computation shows how much money an owner of a crystal bowl would have made at best – he would have been able to multiply his money less than three and a half times! As crystal balls go, that’s an inferior performance.

The only significant change I am hoping for in 2014 – is a change in the luck factor. Let’s see whether I was good in 2013 … Happy Trading! :)

To leave a comment for the author, please follow the link and comment on his blog: Quintuitive » R.

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...



If you got this far, why not subscribe for updates from the site? Choose your flavor: e-mail, twitter, RSS, or facebook...

Comments are closed.