|
Hello,
I have been trying to figure out why the TxnFees argument does not evaluate the pennyPerShare function when it is passed via add.rule. I receive the following error.. out<-try(applyStrategy(strategy=stratBBands , portfolios='bbands',parameters=list(sd=SD,n=N)) ) Error in rbind(deparse.level, ...) : (list) object cannot be coerced to type 'double' In addition: Warning messages: 1: In rbind(deparse.level, ...) : mismatched types: converting objects to numeric 2: In rbind(deparse.level, ...) : NAs introduced by coercion I am using the BBands demo to demonstrate below. Am I doing something wrong or is there something wrong with the code? Thank you for taking the time to help. I am using R (2.15.1 x64), Quantstrat (0.6.8), blotter (0.8.10), FinancialInstrument (0.15.2) Dan require(quantstrat) suppressWarnings(rm("order_book.bbands",pos=.strategy)) suppressWarnings(rm("account.bbands","portfolio.bbands",pos=.blotter)) suppressWarnings(rm("account.st","portfolio.st","stock.str","stratBBands","initDate","initEq",'start_t','end_t')) # some things to set up here stock.str='IBM' # what are we trying it on # we'll pass these SD = 2 # how many standard deviations, traditionally 2 N = 20 # how many periods for the moving average, traditionally 20 currency('USD') stock(stock.str,currency='USD',multiplier=1) initDate='2006-12-31' initEq=1000000 portfolio.st='bbands' account.st='bbands' initPortf(portfolio.st,symbols=stock.str, initDate=initDate) initAcct(account.st,portfolios='bbands', initDate=initDate) initOrders(portfolio=portfolio.st,initDate=initDate) addPosLimit(portfolio.st, stock.str, initDate, 200, 2 ) #set max pos stratBBands <- strategy("bbands") #one indicator stratBBands <- add.indicator(strategy = stratBBands, name = "BBands", arguments = list(HLC = quote(HLC(mktdata)), maType='SMA')) #add signals: stratBBands <- add.signal(stratBBands,name="sigCrossover",arguments = list(columns=c("Close","up"),relationship="gt"),label="Cl.gt.UpperBand") stratBBands <- add.signal(stratBBands,name="sigCrossover",arguments = list(columns=c("Close","dn"),relationship="lt"),label="Cl.lt.LowerBand") stratBBands <- add.signal(stratBBands,name="sigCrossover",arguments = list(columns=c("High","Low","mavg"),relationship="op"),label="Cross.Mid") # lets add some rules stratBBands <- add.rule(stratBBands,name='ruleSignal', arguments = list(sigcol="Cl.gt.UpperBand",sigval=TRUE, orderqty=-100, ordertype='market', orderside=NULL, threshold=NULL,osFUN=osMaxPos, TxnFees=pennyPerShare),type='enter') stratBBands <- add.rule(stratBBands,name='ruleSignal', arguments = list(sigcol="Cl.lt.LowerBand",sigval=TRUE, orderqty= 100, ordertype='market', orderside=NULL, threshold=NULL,osFUN=osMaxPos, TxnFees=pennyPerShare),type='enter') stratBBands <- add.rule(stratBBands,name='ruleSignal', arguments = list(sigcol="Cross.Mid",sigval=TRUE, orderqty= 'all', ordertype='market', orderside=NULL, threshold=NULL,osFUN=osMaxPos, TxnFees=pennyPerShare),type='exit') #alternately, to exit at the opposite band, the rules would be... #stratBBands <- add.rule(stratBBands,name='ruleSignal', arguments = list(data=quote(mktdata),sigcol="Lo.gt.UpperBand",sigval=TRUE, orderqty= 'all', ordertype='market', orderside=NULL, threshold=NULL),type='exit') #stratBBands <- add.rule(stratBBands,name='ruleSignal', arguments = list(data=quote(mktdata),sigcol="Hi.lt.LowerBand",sigval=TRUE, orderqty= 'all', ordertype='market', orderside=NULL, threshold=NULL),type='exit') #TODO add thresholds and stop-entry and stop-exit handling to test getSymbols(stock.str,from=initDate,index.class=c('POSIXt','POSIXct')) start_t<-Sys.time() out<-try(applyStrategy(strategy=stratBBands , portfolios='bbands',parameters=list(sd=SD,n=N)) ) # look at the order book #getOrderBook('bbands') end_t<-Sys.time() print("strat execution time:") print(end_t-start_t) start_t<-Sys.time() updatePortf(Portfolio='bbands',Dates=paste('::',as.Date(Sys.time()),sep='')) end_t<-Sys.time() print("updatePortf execution time:") print(end_t-start_t) chart.Posn(Portfolio='bbands',Symbol=stock.str) plot(add_BBands(on=1,sd=SD,n=N)) _______________________________________________ [hidden email] 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. |
|
On 08/07/2012 12:32 AM, Danny D wrote:
> I have been trying to figure out why the TxnFees argument does not > evaluate the pennyPerShare function when it is passed via add.rule. I > receive the following error.. > > out<-try(applyStrategy(strategy=stratBBands , > portfolios='bbands',parameters=list(sd=SD,n=N)) ) > Error in rbind(deparse.level, ...) : > (list) object cannot be coerced to type 'double' > In addition: Warning messages: > 1: In rbind(deparse.level, ...) : > mismatched types: converting objects to numeric > 2: In rbind(deparse.level, ...) : NAs introduced by coercion > > I am using the BBands demo to demonstrate below. > > Am I doing something wrong or is there something wrong with the code? > Thank you for taking the time to help. It's a bug (more precisely a missing feature). We'll try to fix this week. addTxn takes either a numeric TxnFees argument or a function. It does not evaluate a string *name* of a function to locate the function via match.fun. We'll try to add that feature shortly. Regards, - Brian -- Brian G. Peterson http://braverock.com/brian/ Ph: 773-459-4973 IM: bgpbraverock _______________________________________________ [hidden email] 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. |
| Powered by Nabble | Edit this page |
