For some reason, I feel like have much better control with [plot.xts function](http://timelyportfolio.blogspot.com/search/label/plot.xts)
from the [xtsExtra package](https://r-forge.r-project.org/scm/viewvc.php/pkg/xtsExtra/?root=xts) described [here](http://tradeblotter.wordpress.com/2012/11/23/xts-and-gsoc-2012/) over some of the other more refined R graphical packages.  Maybe, it is just my simple mind, but recently I wanted to shade holding periods with points for buy and sale dates.  With plot.xts from xtsExtra I was able to quickly and easily generate the following plot.  I did have to slightly amend the original plot.xts function as seen [here](https://gist.github.com/timelyportfolio/5062164), but it seemed more natural and like much less of a struggle.


```{r echo=FALSE,warning=FALSE,error=FALSE,message=FALSE, fig.width=7, fig.height=4}
require(RColorBrewer)
require(quantmod)
require(xtsExtra)
source("https://raw.github.com/timelyportfolio/plotxts_shading_points/master/plot.R")

jpy <- getSymbols("DEXJPUS",src="FRED",auto.assign=FALSE)

#define array of buy dates
buydates = c("2010-08-20",
               "2011-02-07",
               "2011-03-30",
               "2011-10-14",
               "2012-06-21",
               "2012-10-25")

#define a vector of sell dates
selldates = c("2010-10-08",
             "2011-03-02",
             "2011-06-01",
             "2012-05-31",
             "2012-08-22",
             format(Sys.Date(),"%Y-%m-%d"))  #fill today - don't think this is necessary

custom.panel <- function(index,x,...) {
  default.panel(index,x,...)
  abline(h=pretty(c(par("yaxp")[1],par("yaxp")[2]),n=par("yaxp")[3]),col="gray60",lty=3)
  abline(h=par("usr")[3], col="black")
  axis(side=2,col="gray60",col.axis="black",lwd=0,lwd.ticks=FALSE,las=1,
       at=pretty(c(par("yaxp")[1],par("yaxp")[2]),n=abs(par("yaxp")[3])),
       labels=pretty(c(par("yaxp")[1],par("yaxp")[2]),n=abs(par("yaxp")[3])))
  points(x=index[which(index(x) %in% as.Date(buydates))],
         y=x[which(index(x) %in% as.Date(buydates)),],cex=1,pch=19,
         col="darkolivegreen3")
  points(x=index[which(index(x) %in% as.Date(selldates))],
         y=x[which(index(x) %in% as.Date(selldates)),],cex=1,pch=19,
         col="indianred3")
  #to add reference lines to indicate entry level
  #I'm not sure it is necessary but if you like it uncomment below
  #for(i in 1:(length(startdates))) {
  #  segments(x0=index[which(index(x) == as.Date(startdates[i]))],
  #           x1=index[which(index(x) == as.Date(enddates[i]))],,
  #           y0=x[which(index(x) == as.Date(startdates[i])),],
  #           y1=x[which(index(x) == as.Date(startdates[i])),])
  #}
}


plot.xts(jpy["2009-12::"],  #limit to Dec 2009 to Current so more easily visible
         col = brewer.pal(9,"Blues")[c(7)],  #get two blues that will look ok
         lwd = 2,   #line width; will do 2
         las = 1,  #do not rotate y axis labels
         bty="n",
         auto.grid=FALSE,
         major.format="%b %Y",
         major.ticks="years",
         minor.ticks=FALSE,
         col.axis="transparent",
         yax.loc="none",
         cex.axis=0.8,
         panel=custom.panel,
         main = NA,  #will do title later so we have more control
         blocks = list(start.time=buydates,  #overlay blocks for periods owned
                       end.time=selldates,col="gray90"))

#define title separately so we have more control
title(main = "US$/Japanese Yen from St. Louis Federal Reserve (FRED)",
      outer=TRUE,
      line=-2,
      adj=0.05)

text(x=0.05,y=0.1,label="holding periods shaded",adj=0,font=3,cex=0.8)
```

