7.4 Buy rule based on RSI
Consider following day-trading strategy based on 14-day RSI:
- buy one unit if RSI <30 and
- otherwise no trade.
Evaluate this based on day trading:
day <-14
price <- Cl(MSFT)
returnMSFT <- (Cl(MSFT) - Op(MSFT))/Op(MSFT)
signal <- c() #initialize vector
rsi <- RSI(price, day) #rsi is the lag of RSI
signal [1:day+1] <- 0 #0 because no signal until day+1
for (i in (day+1): length(price)){
if (rsi[i] < 30){ #buy if rsi < 30
signal[i] <- 1
}else { #no trade all if rsi > 30
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) <- 'RSI'
charts.PerformanceSummary(ret)