Calendar Strategy: Fed Days
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Today, I want to follow up with the Calendar Strategy: Option Expiry post. Let’s examine the importance of the FED meeting days as presented in the Fed Days And Intermediate-Term Highs post.
Let’s dive in and examine historical perfromance of SPY during FED meeting days:
###############################################################################
# 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')
data <- new.env()
getSymbols.extra(tickers, src = 'yahoo', from = '1980-01-01', env = data, set.symbolnames = T, auto.assign = T)
for(i in data$symbolnames) data[[i]] = adjustOHLC(data[[i]], use.Adjusted=T)
bt.prep(data, align='keep.all', fill.gaps = T)
#*****************************************************************
# Setup
#*****************************************************************
prices = data$prices
n = ncol(prices)
dates = data$dates
models = list()
universe = prices > 0
# 100 day SMA filter
universe = universe & prices > SMA(prices,100)
# Find Fed Days
info = get.FOMC.dates(F)
key.date.index = na.omit(match(info$day, dates))
key.date = NA * prices
key.date[key.date.index,] = T
#*****************************************************************
# Strategy
#*****************************************************************
signals = list(T0=0)
for(i in 1:15) signals[[paste0('N',i)]] = 0:i
signals = calendar.signal(key.date, signals)
models = calendar.strategy(data, signals, universe = universe)
strategy.performance.snapshoot(models, T, sort.performance=F)
Please note 100 day moving average filter above. If we take it out, the performance deteriorates significantly.
# custom stats out = sapply(models, function(x) list( CAGR = 100*compute.cagr(x$equity), MD = 100*compute.max.drawdown(x$equity), Win = x$trade.summary$stats['win.prob', 'All'], Profit = x$trade.summary$stats['profitfactor', 'All'] )) performance.barchart.helper(out, sort.performance = F) strategy.performance.snapshoot(models$N15, control=list(main=T)) last.trades(models$N15) trades = models$N15$trade.summary$trades trades = make.xts(parse.number(trades[,'return']), as.Date(trades[,'entry.date'])) layout(1:2) par(mar = c(4,3,3,1), cex = 0.8) barplot(trades, main='N15 Trades', las=1) plot(cumprod(1+trades/100), type='b', main='N15 Trades', las=1)
N15 Strategy:
With this post I wanted to show how easily we can study calendar strategy performance using the Systematic Investor Toolbox.
Next, I will look at the importance of the Dividend days.
To view the complete source code for this example, please have a look at the bt.calendar.strategy.fed.days.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.




