[R-SIG-Finance] loops or other ooerations

Stephen Choularton stephen at organicfoodmarkets.com.au
Fri Nov 12 21:23:55 CET 2010


Hi

  I am trying to write some code to backtest some spread trading ideas. 
I have got this far:

library(xts)
library(quantmod)
library(foreach)



getCombined <- function(sym1, sym2, dateFilter='::')
{
   # Grab historical data for both symbols
   one <- getSymbols(sym1, auto.assign=FALSE)
   two <- getSymbols(sym2, auto.assign=FALSE)

   # Give columns more usable names
   colnames(one) <- c('Open', 'High', 'Low', 'Close', 'Volume', 'Adjusted')
   colnames(two) <- c('Open', 'High', 'Low', 'Close', 'Volume', 'Adjusted')

   # Build combined object
   return(merge(one$Close, two$Close, all=FALSE)[dateFilter])
}


sym1 <- 'CBA.AX'
sym2 <- 'NAB.AX'



spread <- getCombined(sym1, sym2)

chartSeries(spread, type='line',theme=chartTheme('white'),TA=NULL)

price <- spread$Close - spread$Close.1

m <- rollapply(price, 20, mean)
sd.2 <- rollapply(price, 20, sd)
upper.boundary <- m + sd.2
lower.boundary <- m - sd.2
spread.data <- merge(price$Close, m$Close, upper.boundary$Close, 
lower.boundary$Close, all=FALSE)
# Give columns more usable names
colnames(spread.data) <- c('Close', 'Mean', 'Upper.Boundary', 
'Lower.Boundary')

so now I have my time series and I want to iterate over it with rules like:

1. If the price exceeds 2 x standard deviation  and then returns below 
sell the spread
2. If I'm short and the price becomes smaller than the average buy the 
spread
3. and so on

In other programming languages (except prolog which favors recursion) I 
guess I would write some type of loop and iterate over the data but some 
of these R functions seem to achieve wonderful results so I thought I 
would post this to see if a loop was the way to go or if there was 
something more elegant.

Any help most welcome.
-- 
Stephen Choularton Ph.D., FIoD



More information about the R-SIG-Finance mailing list