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.
