Programming performance/KrassiVanguelov R

From HaskellWiki

Language: R

Experience level: Advanced

Time: 22 minutes


 theData=read.table(file="gspc.txt", sep=" ", comment.char='#')
 prices=rev(theData[,5])
 pctReturns=diff(prices)/prices[-length(prices)]*100
 cash=10000
 portfolio=list(shares=numeric(0),prices=numeric(0))
 trades = mapply(
               function(price,ret){
                   if(ret <= -3) {
                       portfolio$shares <<- c(portfolio$shares,0.1*cash/price);
                       portfolio$prices <<- c(portfolio$prices,price);
                       cash <<- 0.9*cash
                   }
                   else if(ret > 0){ 
                       sells = which(price/portfolio$prices >= 1.06); 
                       if(length(sells)>0){
                           cash <<- cash + sum(portfolio$shares[sells]*price); 
                           portfolio$shares <<- portfolio$shares[-sells]; 
                           portfolio$prices <<- portfolio$prices[-sells]
                       }    
                   }
               }
               , prices[-1]
               , pctReturns
 )
 cash = cash + sum(portfolio$shares*prices[length(prices)])
 cat(cash, '\n')