Adjusted Momentum
[This article was first published on Systematic Investor » R, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
David Varadi has published two excellent posts / ideas about cooking with momentum:
I just could not resist the urge to share these ideas with you. Following is implementation using the Systematic Investor Toolbox.
############################################################################### # Load Systematic Investor Toolbox (SIT) # http://systematicinvestor.wordpress.com/systematic-investor-toolbox/ ############################################################################### setInternet2(TRUE) con = gzcon(url('http://www.systematicportfolio.com/sit.gz', 'rb')) source(con) close(con) #***************************************************************** # Load historical data #****************************************************************** load.packages('quantmod') tickers = spl('SPY,^VIX') data <- new.env() getSymbols(tickers, src = 'yahoo', from = '1980-01-01', env = data, auto.assign = T) for(i in data$symbolnames) data[[i]] = adjustOHLC(data[[i]], use.Adjusted=T) bt.prep(data, align='remove.na', fill.gaps = T) VIX = Cl(data$VIX) bt.prep.remove.symbols(data, 'VIX') #***************************************************************** # Setup #***************************************************************** prices = data$prices models = list() #***************************************************************** # 200 SMA #****************************************************************** data$weight[] = NA data$weight[] = iif(prices > SMA(prices, 200), 1, 0) models$ma200 = bt.run.share(data, clean.signal=T) #***************************************************************** # 200 ROC #****************************************************************** roc = prices / mlag(prices) - 1 data$weight[] = NA data$weight[] = iif(SMA(roc, 200) > 0, 1, 0) models$roc200 = bt.run.share(data, clean.signal=T) #***************************************************************** # 200 VIX MOM #****************************************************************** data$weight[] = NA data$weight[] = iif(SMA(roc/VIX, 200) > 0, 1, 0) models$vix.mom = bt.run.share(data, clean.signal=T) #***************************************************************** # 200 ER MOM #****************************************************************** forecast = SMA(roc,10) error = roc - mlag(forecast) mae = SMA(abs(error), 10) data$weight[] = NA data$weight[] = iif(SMA(roc/mae, 200) > 0, 1, 0) models$er.mom = bt.run.share(data, clean.signal=T) #***************************************************************** # Report #****************************************************************** strategy.performance.snapshoot(models, T)
Please enjoy and share your ideas with David and myself.
To view the complete source code for this example, please have a look at the
bt.adjusted.momentum.test() function in bt.test.r at github.
To leave a comment for the author, please follow the link and comment on their blog: Systematic Investor » R.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.