# call all the packages we might need require(quantstrat) require(PerformanceAnalytics) rm(list = ls()) # Remove any previous remnants and set up environments try(rm("account.turtles","portfolio.turtles",pos=.blotter),silent=TRUE) try(rm("order_book.turtles",pos=.strategy),silent=TRUE) try(rm("portfolio","account","N","symbol","symbols","ClosePrice","CurrentDate","equity","Units","maxUnits","size","Stop","equity","TxnPrice","initDate","initEq","Posn","verbose"),silent=TRUE) if (!exists('.blotter')) .blotter <- new.env() if(!exists('.strategy')) .strategy <- new.env() if(!exists('.instrument')) .instrument <- new.env() # Set initial values initDate="2000-01-01" initEq=10^7 # Read in the data and make it appropriate for analysis symbols = c("Nifty","Gold") csvname <- ('C:/Users/nissim/Desktop/Gold.csv') Gold <- read.csv(csvname,header=TRUE,sep = ",") Gold <- xts(Gold[,(ncol(Gold)-3):ncol(Gold)],order.by=as.Date(Gold$Date, format = "%d/%m/%Y")) csvname <- ('C:/Users/nissim/Desktop/Nifty.csv') Nifty <- read.csv(csvname,header=TRUE,sep = ",") Nifty <- xts(Nifty[,(ncol(Nifty)-3):ncol(Nifty)],order.by=as.Date(Nifty$Date, format = "%d/%m/%Y")) # csvname <- ('C:/Users/nissim/Desktop/Crude.csv') # Crude <- read.csv(csvname,header=TRUE,sep = ",") # Crude <- xts(Crude[,(ncol(Crude)-3):ncol(Crude)],order.by=as.Date(Crude$Date, format = "%d/%m/%Y")) # # # csvname <- ('C:/Users/nissim/Desktop/Silver.csv') # Silver <- read.csv(csvname,header=TRUE,sep = ",") # Silver <- xts(Silver[,(ncol(Silver)-3):ncol(Silver)],order.by=as.Date(Silver$Date, format = "%d/%m/%Y")) # # csvname <- ('C:/Users/nissim/Desktop/USDINR.csv') # USDINR <- read.csv(csvname,header=TRUE,sep = ",") # USDINR <- xts(USDINR[,(ncol(USDINR)-3):ncol(USDINR)],order.by=as.Date(USDINR$Date, format = "%d/%m/%Y")) currency("INR") for(symbol in symbols){ stock(symbol, currency="INR",multiplier=1) } portfolio = "turtles" initPortf(name=portfolio,symbols, initDate=initDate) account = "turtles" initAcct(name=account,portfolios="turtles", initDate=initDate, initEq=initEq) initOrders(portfolio='turtles',symbols=symbols,initDate=initDate) for(symbol in symbols){ x=get(symbol) # Entries x$EntryLong1 <- lag(runMax(x[,grep('High',colnames(x))], 5)) x$EntryShort1 <- lag(runMin(x[,grep('Low',colnames(x))], 5)) # Exits x$ExitLong <- lag(runMin(x[,grep('Low',colnames(x))], 2)) x$ExitShort <- lag(runMax(x[,grep('High',colnames(x))], 2)) # Position Size Parameter c('High','Low','Close') x$N <- lag(ATR(x[,c(2,3,4)], n=5, maType=EMA, wilder=TRUE)[,'atr']) # x$OrderSize <- 0.1*initEq/x$N x$EntryLong2 <- x$EntryLong1 + 0.5*x$N x$EntryLong3 <- x$EntryLong2 + 0.5*x$N x$EntryLong4 <- x$EntryLong3 + 0.5*x$N x$EntryShort2 <- x$EntryShort1 - 0.5*x$N x$EntryShort3 <- x$EntryShort2 - 0.5*x$N x$EntryShort4 <- x$EntryShort3 - 0.5*x$N x$StopLossLong <- x$EntryLong1 - 2*x$N x$StopLossShort <- x$EntryShort1 + 2*x$N assign(symbol,x) } stratturtles <- strategy("turtles") # # Stop ATR indicator as per R-SIG-Finance 27/09/2012 # add.indicator(stratturtles, name = "stopATRLong", arguments = list(HLC=quote(HLC(mktdata)), n=5, maType="EMA", noATR=2)) # add.indicator(stratturtles, name = "stopATRShort", arguments = list(HLC=quote(HLC(mktdata)), n=5, maType="EMA", noATR=2)) # Long signals stratturtles <- add.signal(strategy = stratturtles, name="sigCrossover", arguments = list(columns=c("High","EntryLong1"),relationship="gt", cross=TRUE), label="EntryLong1Sig") stratturtles <- add.signal(strategy = stratturtles, name="sigCrossover", arguments = list(columns=c("High","EntryLong2"),relationship="gt", cross=TRUE), label="EntryLong2Sig") stratturtles <- add.signal(strategy = stratturtles, name="sigCrossover", arguments = list(columns=c("High","EntryLong3"),relationship="gt", cross=TRUE), label="EntryLong3Sig") stratturtles <- add.signal(strategy = stratturtles, name="sigCrossover", arguments = list(columns=c("High","EntryLong4"),relationship="gt", cross=TRUE), label="EntryLong4Sig") # Short signals stratturtles <- add.signal(strategy = stratturtles, name="sigCrossover", arguments = list(columns=c("Low","EntryShort1"),relationship="lt", cross=TRUE), label="EntryShort1Sig") stratturtles <- add.signal(strategy = stratturtles, name="sigCrossover", arguments = list(columns=c("Low","EntryShort2"),relationship="lt", cross=TRUE), label="EntryShort2Sig") stratturtles <- add.signal(strategy = stratturtles, name="sigCrossover", arguments = list(columns=c("Low","EntryShort3"),relationship="lt", cross=TRUE), label="EntryShort3Sig") stratturtles <- add.signal(strategy = stratturtles, name="sigCrossover", arguments = list(columns=c("Low","EntryShort4"),relationship="lt", cross=TRUE), label="EntryShort4Sig") # Long Exit stratturtles <- add.signal(strategy = stratturtles, name="sigCrossover", arguments = list(columns=c("Low","ExitLong"),relationship="lt", cross=TRUE), label="ExitLongSig") # Short Exit stratturtles <- add.signal(strategy = stratturtles, name="sigCrossover", arguments = list(columns=c("High","ExitShort"),relationship="gt", cross=TRUE), label="ExitShortSig") # Long Stop Loss stratturtles <- add.signal(strategy = stratturtles, name="sigCrossover", arguments = list(columns=c("Low","StopLossLong"),relationship="lt", cross=TRUE), label="StopLossLongSig") # Short Stop Loss stratturtles <- add.signal(strategy = stratturtles, name="sigCrossover", arguments = list(columns=c("High","StopLossShort"),relationship="gt", cross=TRUE), label="StopLossShortSig") ## Add rules # Add the rules for Long Entries stratturtles <- add.rule(strategy = stratturtles, name='ruleSignal', arguments = list(sigcol="EntryLong1Sig", sigval=TRUE, orderqty=1000,ordertype='market', orderside= 'long', pricemethod='market', osFun = osMaxPos,replace=FALSE, orderset = 'altexits'), type='enter', path.dep=TRUE) stratturtles <- add.rule(strategy = stratturtles, name='ruleSignal', arguments = list(sigcol="EntryLong2Sig", sigval=TRUE, orderqty=1000,ordertype='market', orderside= 'long', pricemethod='market', osFun = osMaxPos,replace=FALSE, orderset = 'altexits'), type='enter', path.dep=TRUE) stratturtles <- add.rule(strategy = stratturtles, name='ruleSignal', arguments = list(sigcol="EntryLong3Sig", sigval=TRUE, orderqty=1000,ordertype='market', orderside= 'long', pricemethod='market', osFun = osMaxPos,replace=FALSE, orderset = 'altexits'), type='enter', path.dep=TRUE) stratturtles <- add.rule(strategy = stratturtles, name='ruleSignal', arguments = list(sigcol="EntryLong4Sig", sigval=TRUE, orderqty=1000,ordertype='market', orderside= 'long', pricemethod='market', osFun = osMaxPos,replace=FALSE, orderset = 'altexits'), type='enter', path.dep=TRUE) ## Add the rules for Short Entries stratturtles <- add.rule(strategy = stratturtles, name='ruleSignal', arguments = list(sigcol="EntryShort1Sig", sigval=TRUE, orderqty=-1000,ordertype='market', orderside= 'long', pricemethod='market', osFun = osMaxPos,replace=FALSE, orderset = 'altexits'), type='enter', path.dep=TRUE) stratturtles <- add.rule(strategy = stratturtles, name='ruleSignal', arguments = list(sigcol="EntryShort2Sig", sigval=TRUE, orderqty=-1000,ordertype='market', orderside= 'long', pricemethod='market', osFun = osMaxPos,replace=FALSE, orderset = 'altexits'), type='enter', path.dep=TRUE) stratturtles <- add.rule(strategy = stratturtles, name='ruleSignal', arguments = list(sigcol="EntryShort3Sig", sigval=TRUE, orderqty=-1000,ordertype='market', orderside= 'long', pricemethod='market', osFun = osMaxPos,replace=FALSE, orderset = 'altexits'), type='enter', path.dep=TRUE) stratturtles <- add.rule(strategy = stratturtles, name='ruleSignal', arguments = list(sigcol="EntryShort4Sig", sigval=TRUE, orderqty=-1000,ordertype='market', orderside= 'long', pricemethod='market', osFun = osMaxPos,replace=FALSE, orderset = 'altexits'), type='enter', path.dep=TRUE) ## Add Exit rules stratturtles <- add.rule(strategy = stratturtles, name='ruleSignal', arguments = list(sigcol="ExitLongSig", sigval=TRUE, orderqty='all',ordertype='market', orderside='long', pricemethod='market', osFun = osMaxPos,replace=FALSE, orderset = 'altexits'), type='exit', path.dep=TRUE, replace = TRUE) stratturtles <- add.rule(strategy = stratturtles, name='ruleSignal', arguments = list(sigcol="ExitShortSig", sigval=TRUE, orderqty='all',ordertype='market', orderside='short', pricemethod='market', osFun = osMaxPos, replace=FALSE, orderset = 'altexits'), type='exit', path.dep=TRUE, replace = TRUE) ## Add StopLoss rules stratturtles <- add.rule(strategy = stratturtles, name='ruleSignal', arguments = list(sigcol="StopLossLongSig", sigval=TRUE, orderqty='all',ordertype='market', orderside='long', pricemethod='market', osFun = osMaxPos,replace=FALSE, orderset = 'altexits'), type='risk', path.dep=TRUE, replace = TRUE) stratturtles <- add.rule(strategy = stratturtles, name='ruleSignal', arguments = list(sigcol="StopLossShortSig", sigval=TRUE, orderqty='all',ordertype='market', orderside='short', pricemethod='market', osFun = osMaxPos, replace=FALSE, orderset = 'altexits'), type='risk', path.dep=TRUE, replace = TRUE) ## addPosLimit('turtles',symbol=symbols,timestamp='2000-01-01',maxpos=4000, minpos = -4000) out<-applyStrategy(strategy=stratturtles , portfolios='turtles',symbols=symbols) updatePortf(Portfolio='turtles',Symbols=symbols) portRet <- PortfReturns("turtles") portRet$Total <- rowSums(portRet, na.rm=TRUE) charts.PerformanceSummary(portRet$Total) tradeStats('turtles')