7Twelve Back-test
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
I recently came across the The 7Twelve Portfolio strategy. I like the catchy name and the strategy report, “An Introduction to 7Twelve.” Following is some additional info about the The 7Twelve Portfolio strategy that I found useful:
Today I want to show how to back-test the The 7Twelve Portfolio strategy using the Systematic Investor Toolbox.
Let’s start by loading historical data
############################################################################### # 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('VFINX,VIMSX,NAESX,VDMIX,VEIEX,VGSIX,FNARX,QRAAX,VBMFX,VIPSX,OIBAX,BIL') data <- new.env() getSymbols(tickers, src = 'yahoo', from = '1970-01-01', env = data, auto.assign = T) #-------------------------------- # BIL 30-May-2007 # load 3-Month Treasury Bill from FRED TB3M = quantmod::getSymbols('DTB3', src='FRED', auto.assign = FALSE) TB3M[] = ifna.prev(TB3M) TB3M = processTBill(TB3M, timetomaturity = 1/4, 261) #-------------------------------- # extend data$BIL = extend.data(data$BIL, TB3M, scale=T) for(i in ls(data)) data[[i]] = adjustOHLC(data[[i]], use.Adjusted=T) bt.prep(data, align='remove.na')
Next, let’s make the The 7Twelve Portfolio strategy with annual/ quarterly and monthly rebalancing.
#***************************************************************** # Code Strategies #****************************************************************** models = list() # Vanguard 500 Index Investor (VFINX) data$weight[] = NA data$weight$VFINX[] = 1 models$VFINX = bt.run.share(data, clean.signal=F) #***************************************************************** # Code Strategies #****************************************************************** obj = portfolio.allocation.helper(data$prices, periodicity = 'years', min.risk.fns = list(EW=equal.weight.portfolio) ) models$year = create.strategies(obj, data)$models$EW obj = portfolio.allocation.helper(data$prices, periodicity = 'quarters', min.risk.fns = list(EW=equal.weight.portfolio) ) models$quarter = create.strategies(obj, data)$models$EW obj = portfolio.allocation.helper(data$prices, periodicity = 'months', min.risk.fns = list(EW=equal.weight.portfolio) ) models$month = create.strategies(obj, data)$models$EW #***************************************************************** # Create Report #****************************************************************** strategy.performance.snapshoot(models, T)
The strategy does better than the Vanguard 500 Index benchmark, but still suffers a huge draw-down in 2008-2009 period.
How would you make it a better strategy? Please share your ideas.
To view the complete source code for this example, please have a look at the bt.7twelve.strategy.test() function in bt.test.r at github.
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.