Hi

OK, I have found this in the manual:

For the purposes of backtesting, and compatibility with the trade accounting in blotter, this function will not allow a transaction to cross your current position through zero. The accounting rules for realizing gains in such cases are more complicated than we wish to support. Also, many brokers will break, revise, or split such transactions for the same reason. If you wish to do a "stop and reverse" system, first stop (flatten), and then reverse (initiate a new position).

So now I know why I couldn't model short positions. is this correct? Being able to go short is a pretty common sort of action.

I had a look at the bbands demo and it appeared to go long and short and specified NULL as the ordertype rather than long or short. That got rid of my warning that I was going short, but it didn't produce any short trades.

Any help most welcome.

##########################################################

Original posting:


Hi

I'm trying to money the bbands demo to by it on the S&P/ ASX 200.

 I think the Symbol is ^AXJO and I can get the info I want using it.

 I have amended the code as follows:

# bbands



 require(quantstrat)

 try(rm("order_book.bbands",pos=.strategy),silent=TRUE)

 try(rm("account.bbands","portfolio.bbands",pos=.blotter),silent=TRUE)


try(rm("account.st","portfolio.st","stock.str","stratBBands","initDate","initEq",'start_t','end_t'),silent=TRUE)

 # some things to set up here
 stock.str='^AXJO' # 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('AUD')

 stock(stock.str,currency='AUD',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)

 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),type='enter')

stratBBands <- add.rule(stratBBands,name='ruleSignal', arguments = list(sigcol="Cl.lt.LowerBand",sigval=TRUE, orderqty= 100, ordertype='market', orderside=NULL, threshold=NULL),type='enter')

stratBBands <- add.rule(stratBBands,name='ruleSignal', arguments = list(sigcol="Cross.Mid",sigval=TRUE, orderqty= 'all', ordertype='market', orderside=NULL, threshold=NULL),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)

 start_t<-Sys.time()

out<-try(applyStrategy(strategy=stratBBands , portfolios='bbands',mktdata='AXJO', parameters=list(sd=SD,n=N),verbose=TRUE) )


 # look at the order book
 #getOrderBook('bbands')
 end_t<-Sys.time()

 print("strat execution time:")

 print(end_t-start_t)
Time difference of 32.271 secs

 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))


###############################################################################
 # R (http://r-project.org/) Quantitative Strategy Model Framework
 #
 # Copyright (c) 2009-2010
# Peter Carl, Dirk Eddelbuettel, Brian G. Peterson, Jeffrey Ryan, and Joshua Ulrich
 #
# This library is distributed under the terms of the GNU Public License (GPL)
 # for full details see the file COPYING
 #
 # $Id: bbands.R 374 2010-08-17 18:43:35Z braverock $
 #

###############################################################################


I get my prices with thus


 getSymbols(stock.str,from=initDate)
[1] "AXJO"


but note the hat has been dropped!

and just afterwards I get thIs:

rategy=stratBBands , portfolios='bbands', parameters=list(sd=SD,n=N),verbose=TRUE) )
Error in get(symbol) : object '^AXJO' not found

I've looked at the notes for applyStrategy and I've tried specifically referring to AXJO like this:

 out<-try(applyStrategy(strategy=stratBBands ,
portfolios='bbands',mktdata='AXJO', parameters=list(sd=SD,n=N),verbose=TRUE) )
Error in get(symbol) : object '^AXJO' not found

but I still get the message.

Can anyone advise me how to resolve this?

--
Stephen Choularton Ph.D., FIoD

_______________________________________________
[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.

Reply via email to