I figured this out.My indicator has an extra XXX.Close column... Sorry about that.
On Sat, Oct 17, 2015 at 9:15 AM, Gambulator Gambulator <[email protected] > wrote: > Hi > > I saw this > http://r.789695.n4.nabble.com/Writing-sell-rules-with-quantstrat-td4389599.html > > by Sergey Pisarenko > <http://r.789695.n4.nabble.com/template/NamlServlet.jtp?macro=user_nodes&user=344717> > and I am trying to implement something similar by starting out with what > he's got (firstProfitable function below) > > The program would run and give me the 1st buy and sell signal but then it > keeps saying > "Error in if (!orderPrefer == "") prefer = orderPrefer : > missing value where TRUE/FALSE needed" > > and die right after the 1st signal. > > > So, I went into debug mode and see what's happening. I am only testing 1 > symbol SPY and there is only one order of buy and one order to sell. I > don't add positions in-between. Somehow, Ithis orderPrice variable has 2 > entries and I think that's why the prefer is also expecting 2 entries. Does > anyone have a simple sample ? By the way, for the entry, I am still using > signalRule, I only want to replace the exit with this custom function. > > add.rule(qs.strategy, name="ruleSignal", > arguments=list(sigcol="longEntry", sigval=TRUE, orderqty=100, > ordertype="market", orderside="long", > replace=FALSE, prefer="Close",orderset='rsilong', > allowMagicalThinking=TRUE,osFUN=osMaxEquity), > type='enter', label="long RDM" > ) > > add.rule(qs.strategy, name="firstProfitable", > arguments=list(sigcol="longExit", sigval=TRUE, > orderqty='all',data=mktdata,symbol,maxHold=5,orderside="long",prefer="Close" > ), > type='exit', label="sell RDM" > ) > > > > > > firstProfitable<-function(data, timestamp, portfolio, > symbol,maxHold,prefer) { > posn <- getPosQty(portfolio, symbol, timestamp) > if (posn != 0) { > pos <- getPos(portfolio, symbol, timestamp) > holdPeriod <- as.Date(timestamp) - as.Date(index(pos) ) > print(index(pos)) > print((pos)) > print(as.POSIXlt(timestamp)) > print(as.Date(index(pos))) > orderprice <- as.numeric(Cl(data[timestamp,])) > print(orderprice) > #qty <- as.vector(pos[, 1]) > > if (holdPeriod > maxHold) { > addOrder(portfolio=portfolio, symbol=symbol, > timestamp=timestamp, qty='all', > price=as.numeric(orderprice), > ordertype='market', > side='long',prefer='Close',label='maxHold') > } > > buy_price <- as.numeric(pos[1, 2]) > close_price <- as.numeric(Cl(mktdata[timestamp,])) > profit <- (close_price - buy_price) / buy_price > > if (profit > 0) { > addOrder(portfolio=portfolio, symbol=symbol, > timestamp=timestamp, qty='all', > price=as.numeric(orderprice), > ordertype='market', > side='long',prefer='Close',label='maxHold') > } > } > } > > > > > > > > > > [[alternative HTML version deleted]] _______________________________________________ [email protected] mailing list https://stat.ethz.ch/mailman/listinfo/r-sig-finance -- Subscriber-posting only. If you want to post, subscribe first. -- Also note that this is not the r-help list where general R questions should go.
