how to optimize max position limit in quantstrat for bollinger bands strategy

36 Views Asked by At

The code below is my Bollinger bands strategy for commodity. I add a position limit and want to optimize this strategy through parameter maxpos. For the function add.distribution, it asks for a component.label, but the function addPosLimit does not have a variable called "label". I wonder how to optimize maxpos at this case.

symbol <- 'C1'
currency("USD")
#stock(symbol, currency="USD", multiplier=1)

portfName <- 'RSI_Strategy'
acctName <- portfName
suppressWarnings(rm.strat(stratName))
initPortf(name = portfName, symbols = symbol, initDate = initDate,
          currency = 'USD')
initAcct(name = acctName, portfolios = portfName, 
         initDate=initDate, initEq=initEq)
initOrders(portfolio = portfName, initDate = initDate)
stratName <- portfName 
strategy(name = stratName, store=TRUE)

SD = 2
N = 20

add.indicator(strategy = stratName, name = "BBands",
              arguments = list(HLC = quote(HLC(mktdata)), maType='SMA',
                               n=N, sd=SD), 
              label='BBands')

add.signal(strategy = stratName, name="sigCrossover",
           arguments=list(columns=c("Close","up"),relationship="gt"),
           label="Cl.gt.UpperBand")

add.signal(strategy = stratName, name="sigCrossover",
           arguments=list(columns=c("Close","dn"),relationship="lt"),
           label="Cl.lt.LowerBand")

add.signal(strategy = stratName, name="sigCrossover",
           arguments=list(columns=c("High","mavg"),relationship="gt"),
           label="Hi.Cross.Mid")

add.signal(strategy = stratName, name="sigCrossover",
           arguments=list(columns=c("Low","mavg"),relationship="lt"),
           label="Lo.Cross.Mid")

add.rule(strategy = stratName, name='ruleSignal',
         arguments=list(sigcol="Cl.gt.UpperBand",sigval=TRUE, orderqty=-nShs,
                        ordertype='market', orderside=NULL, osFUN=osMaxPos
                        ),type='enter', 
         label = "Enter.Short")

add.rule(strategy = stratName, name='ruleSignal',
         arguments=list(sigcol="Cl.lt.LowerBand",sigval=TRUE, orderqty=nShs,
                        ordertype='market', orderside=NULL, osFUN=osMaxPos
                        ),type='enter',
         label = "Enter.Long")

add.rule(strategy = stratName, name='ruleSignal',
         arguments=list(sigcol="Hi.Cross.Mid",sigval=TRUE, orderqty= 'all',
                        ordertype='market', orderside=NULL),type='exit',
         label = "Exit.All")

add.rule(strategy = stratName, name='ruleSignal',
         arguments=list(sigcol="Lo.Cross.Mid",sigval=TRUE, orderqty= 'all',
                        ordertype='market', orderside=NULL),type='exit',
         label = "Exit.All")

addPosLimit(portfName, symbol, timestamp=initDate, maxpos=maxpos, minpos=0)

.maxpos = seq(3000,8000,1000)
add.distribution(stratName,
                 paramset.label = 'PosOpt',
                 component.type = 'order',
                 component.label = 'addPosLimit',
                 variable = list(maxpos = .maxpos),
                 label = 'MaxPos')
0

There are 0 best solutions below