Hi Roger, Have you seen Brian's answer in this thread? https://stat.ethz.ch/pipermail/r-sig-finance/2011q3/008470.html
I believe one of those two approaches should work for you. Best, -- Joshua Ulrich | FOSS Trading: www.fosstrading.com On Wed, Oct 19, 2011 at 12:01 PM, Roger Trimble <ro...@turningbull.com> wrote: > Good afternoon, > > I have a question regarding the usage of parameters to quantstrat. As an > example, I have a strategy that uses three moving averages ('EMA'); slow, > medium, and fast. I would like to run this strategy through > applyParameter, using different combinations of 'n' for the different EMA > indicators. > > My apply strategy command looks something like this: > out <- applyStrategy(strategy=strat, portfolios=st.name, > parameters=list(nfast=10,nmed=28,nslow=60)) > > So, I am using nfast, nmed, and nslow to represent the 'n' argument for EMA. > > In my strategy definition, I am using this: > > ## fast ma > strat <- add.indicator(strategy=strat, > name='EMA', > arguments=list(x=quote(Cl(mktdata))), > parameters=list(n=quote(nfast)), > label='fast.ma') > ## med ma > strat <- add.indicator(strategy=strat, > name='EMA', > arguments=list(x=quote(Cl(mktdata))), > parameters=list(n=quote(nmed)), > label='med.ma') > ## slow ma > strat <- add.indicator(strategy=strat, > name='EMA', > arguments=list(x=quote(Cl(mktdata))), > parameters=list(n=quote(nslow)), > label='slow.ma') > > The strategy runs without error, but the parameters do not appear to be > evaluating correctly, and the model finishes without trading. I believe > this is because the indicators are defaulting to 10, and never firing a > signal. In viewing mktdata after the run, I can confirm the indicators > are all equal. > > If I run the model explicitly setting the respective n arguments, e.g. > arguements=list(x=quote(Cl(mktdata)),n=28)..., then the strategy runs as > expected with signals and trades. > > > Looking into the code leads me to believe my intuition is wrong about how > this works: > > # see 'S Programming p. 67 for this matching > fun<-match.fun(indicator$name) > .formals <- formals(fun) > onames <- names(.formals) > > pm <- pmatch(names(indicator$arguments), onames, nomatch = 0L) > if (any(pm == 0L)) > warning(paste("some arguments stored for",indicator$name,"do > not match")) > names(indicator$arguments[pm > 0L]) <- onames[pm] > .formals[pm] <- indicator$arguments[pm > 0L] > > # now add arguments from parameters > if(length(parameters)){ > pm <- pmatch(names(parameters), onames, nomatch = 0L) > names(parameters[pm > 0L]) <- onames[pm] > .formals[pm] <- parameters[pm > 0L] > } > > > It appears to me that names(parameters) and onames need to be the same, > which leaves me confused about how to specify different parameters to > different indicator functions that are looking for the same named > argument. > > I'm sure my error is operator head-space and timing... I greatly > appreciate any feedback here. Thank you very much. > > Roger > > -- > Roger Trimble > TurningBull > > _______________________________________________ > R-SIG-Finance@r-project.org 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. > _______________________________________________ R-SIG-Finance@r-project.org 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.