Pietro, Please post this to r-help@r-project.org not to r-help-ow...@r-project.org which is a mailing liat concerned with list management, and does not deal with questions regarding the use of R. Best wishes, Ted.
On Sat, 2018-07-14 at 13:04 +0000, Pietro Fabbro via R-help wrote: > I will try to be as clear as possible as I have been rebuked by some users. I > deleted the last questions and I will try to be sufficiently explicative in > this one. I apologize if the data I will insert will not be enough. > > So, I am trying to run a strategy through the package Quantstrat. > > install.packages("quantstrat") > My problem is that I get the following error > > Error incolnames<-(tmp, value = seq(ncol(tmp_val))) : > attempt to set 'colnames' on an object with less than two dimensions > > when I try to run the following command: > > > out <- applyStrategy(strategy=strategy.st,portfolios=portfolio.st) > I do not have this problem if I use, as indicator, one or more indicators, > which are already defined by the package TTR. > > I have this error only when I try to use a custom indicator. Here is the code > for the custom indicator that I use: > > wma <- WMA(Cl(mktdata), 4, wts=c(1:4)) > wmamaxt <- rollmaxr(wma, 30, fill = NA) > wmamint <- - rollmaxr(- wma, 30, fill = NA) > CNOwma <- function (mktdata=quote(mktdata),x) {(wma - wmamint) / (wmamaxt - > wmamint)} > Please refer to the following code: > > library(devtools) > library(quantmod) > library(quantstrat) > library(TTR) > library(png) > library(IKTrading) > > wma <- WMA(Cl(mktdata), 4, wts=c(1:4)) > wmamaxt <- rollmaxr(wma, 30, fill = NA) > wmamint <- - rollmaxr(- wma, 30, fill = NA) > CNOwma <- function (mktdata=quote(mktdata),x) {(wma - wmamint) / (wmamaxt - > wmamint)} > initdate <- "2010-01-01" > from <- "2012-01-01" #start of backtest > to <- "2017-31-12" #end of backtest > > Sys.setenv(TZ= "EST") #Set up environment for timestamps > > currency("USD") #Set up environment for currency to be used > > symbols <- c("RUT", "IXIC") #symbols used in our backtest > getSymbols(Symbols = symbols, src = "google", from=from, to=to, adjust = > TRUE) #receive data from google finance, adjusted for splits/dividends > > stock(symbols, currency = "USD", multiplier = 1) #tells quanstrat what > instruments present and what currency to use > > tradesize <-10000 #default trade size > initeq <- 100000 #default initial equity in our portfolio > > strategy.st <- portfolio.st <- account.st <- "firststrat" #naming strategy, > portfolio and account > > #removes old portfolio and strategy from environment > rm.strat(portfolio.st) > rm.strat(strategy.st) > > #initialize portfolio, account, orders and strategy objects > initPortf(portfolio.st, symbols = symbols, initDate = initdate, currency = > "USD") > > initAcct(account.st, portfolios = portfolio.st, initDate = initdate, currency > = "USD", initEq = initeq) > > initOrders(portfolio.st, initDate = initdate) > strategy(strategy.st, store=TRUE) > > add.indicator(strategy = strategy.st, > name = 'CNOwma', > arguments = list(x = quote(Cl(mktdata)), n=4), > label = 'CNOwma4') > > > > > > add.signal(strategy.st, name = "sigThreshold", > arguments = list(column = "CNOwma4", threshold = 0.6, > relationship = "gt", cross = TRUE), > label = "longthreshold") > > > add.signal(strategy.st, name = "sigThreshold", > arguments = list(column = "CNOwma4", threshold = 0.6, > relationship = "lt", cross = TRUE), > label = "shortthreshold") > > > > > add.rule(strategy.st, name = "ruleSignal", > arguments = list(sigcol = "longthreshold", sigval = TRUE, > orderqty = "all", ordertype = "market", > orderside = "long", replace = FALSE, > prefer = "Open"), > type = "enter") > > > add.rule(strategy.st, name = "ruleSignal", > arguments = list(sigcol = "shortthreshold", sigval = TRUE, > orderqty = "all", ordertype = "market", > orderside = "long", replace = FALSE, > prefer = "Open"), > type = "exit") > > add.rule(strategy.st, name = "ruleSignal", > arguments = list(sigcol = "shortthreshold", sigval = TRUE, > orderqty = "all", ordertype = "market", > orderside = "short", replace = FALSE, > prefer = "Open"), > type = "enter") > > add.rule(strategy.st, name = "ruleSignal", > arguments = list(sigcol = "longthreshold", sigval = TRUE, > orderqty = "all", ordertype = "market", > orderside = "short", replace = FALSE, > prefer = "Open"), > type = "exit") > > > > out <- applyStrategy(strategy = strategy.st, portfolios = portfolio.st) > When I run the traceback() of the error, this is what I get: > > > traceback() > 4: stop("attempt to set 'colnames' on an object with less than two > dimensions") > 3: `colnames<-`(`*tmp*`, value = seq(ncol(tmp_val))) > 2: applyIndicators(strategy = strategy, mktdata = mktdata, parameters = > parameters, > ...) > 1: applyStrategy(strategy = strategy.st, portfolios = portfolio.st) > > ______________________________________________ > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.