7.3 Simple fiter buy-sell

Here we create trading signal based on simple filter rule. Recall that simple filter rule suggests buying when the price increases a lot compared to the yesterday price and selling when price decreases a lot: \[\begin{align*} \text{Buy}&:\frac{P_t}{P_{t-1}}>1+\delta \\ \text{Sell}&:\frac{P_t}{P_{t-1}}<1-\delta \end{align*}\]

where \(P_t\) is the closing price at time \(t\) and \(\delta>0\) is an arbitrary threshold.

We first download the data:

library(quantmod)
getSymbols("MSFT")
## [1] "MSFT"

Now we generate trading signal:

price <- Cl(MSFT)
r <- price/Lag(price) - 1
returnMSFT <- (Cl(MSFT) - Op(MSFT))/Op(MSFT)

delta<-0.005
signal <-c(NA) # first signal is NA

for (i in 2: length(Cl(MSFT))){
  if (r[i] > delta){
    signal[i]<- 1
  } else if (r[i]< -delta){
    signal[i]<- -1
  } else
    signal[i]<- 0
}
signal<-reclass(signal,Cl(MSFT))

To keep thing simple, we allow costless short selling. Otherwise, we only allow a sell after a buy.

trade <- Lag(signal)
ret<-returnMSFT *trade
names(ret) <- 'Naive'
charts.PerformanceSummary(ret)