#!/usr/bin/env Rscript # Load required libraries require(quantstrat) # Try to clean up in case the demo was run previously suppressWarnings(rm("account.faber","portfolio.faber",pos=.blotter)) suppressWarnings(rm("ltaccount", "ltportfolio", "ClosePrice", "CurrentDate", "equity", "GSPC", "stratFaber", "initDate", "initEq", "Posn", "UnitSize", "verbose")) suppressWarnings(rm("order_book.faber",pos=.strategy)) # Set initial values initDate='2012-03-29 09:30:00' #initDate='2012-03-12 09:30:00' endDate='2012-03-30 16:00:00' #endDate='2012-03-14 16:00:00' initEq=100000 # Set up instruments with FinancialInstruments package currency("USD") symbols = c("spy") for(symbol in symbols){ # establish tradable instruments stock(symbol, currency="USD",multiplier=1) } # Load data with quantmod load('spy.one_min.Rdata') spy<-spy['T09:30:00/T16:00:00'] spy<-spy['2012-03-29/2012-03-30'] for(symbol in symbols) { x<-get(symbol) colnames(x)<-gsub("x",symbol,colnames(x)) assign(symbol,x) } spy$spy.enter <- format( time(spy), format = "%H:%M:%S") == '09:30:00' spy$spy.exit <- format( time(spy), format = "%H:%M:%S") == '15:50:00' # Initialize portfolio and account initPortf('faber', symbols=symbols, initDate=initDate,endDate=endDate) initAcct('faber', portfolios='faber', initDate=initDate, endDate=endDate, initEq=100000) initOrders(portfolio='faber', initDate=initDate) print("setup completed") # Initialize a strategy object stratFaber <- strategy("faber") stratFaber <- add.rule( stratFaber, name='ruleSignal', arguments = list( sigcol="spy.enter", sigval=TRUE, orderqty=100, ordertype='market', orderside='long', pricemethod='market', TxnFees=-5 ), type='enter', path.dep=TRUE ) stratFaber <- add.rule( stratFaber, name='ruleSignal', arguments = list( sigcol="spy.exit", sigval=TRUE, orderqty='all', ordertype='market', orderside='long', pricemethod='market', TxnFees=-5 ), type='exit', path.dep=TRUE ) # Process the indicators and generate trades start_t<-Sys.time() out<-try(applyStrategy(strategy=stratFaber , portfolios='faber')) end_t<-Sys.time() print("Strategy Loop:") print(end_t-start_t) # look at the order book #print(getOrderBook('faber')) start_t<-Sys.time() updatePortf(Portfolio='faber',Dates=paste('::',as.Date(Sys.time()),sep='')) end_t<-Sys.time() print("trade blotter portfolio update:") print(end_t-start_t) # hack for new quantmod graphics, remove later themelist<-chart_theme() themelist$col$up.col<-'lightgreen' themelist$col$dn.col<-'pink' for(symbol in symbols){ #dev.new() write.zoo(mktdata, 'cross.overnight.one.min.mktdata.csv', sep=',') pdf("cross.overnight.one.min.pdf") chart.Posn(Portfolio='faber',Symbol=symbol,theme=themelist) plot(add_SMA(n=30,col='darkgreen', on=1)) } #ret1 <- PortfReturns('faber') #ret1$total<-rowSums(ret1) #ret1