quantStrat не распознает имена столбцов

Я написал следующие коды и получил сообщение об ошибке при применении стратегии:

Ошибка в eval(expr, envir, enclos): объект «Закрыть» не найден

похоже, что стратегия не может найти столбец «Цена закрытия», в то время как последняя строка кода «head(mktdata)» явно дает XLB.Close как имя столбца закрытия.
кстати, я намеренно пропустил добавление. Функция индикатора(), которая не нужна.
кто-нибудь может помочь? спасибо
последняя строка вывода кода имеет XLB.Close в качестве имени столбца:

head(mktdata)    
           XLB.Open XLB.High  XLB.Low XLB.Close XLB.Volume XLB.Adjusted    
2010-01-04 30.66197 31.06374 30.54327  31.06374    8287681        30.31

коды стратегий с использованием quantstrat:

------------------------------------------------------------------------

library(quantstrat)
startDate <- '2010-01-01'  # start of data    
endDate <-  '2013-07-31'   # end of data    
symbols = c("XLF", "XLP", "XLE", "XLY", "XLV", "XLI", "XLB", "XLK", "XLU")    
Sys.setenv(TZ="UTC")       # set time zone

getSymbols(symbols, src='yahoo', index.class=c("POSIXt","POSIXct"),    
           from=startDate, to=endDate, adjust=TRUE)    

initDate <- '2009-12-31'   
initEq <- 1e6   
currency("USD")  
stock(symbols, currency="USD",multiplier=1)   
head(XLB)   
Lowcut1<-1.001   
Lowcut2<-1.002   

rm.strat("multiINTRO") # remove portfolio, account, orderbook if re-run    
initPortf(name="multiINTRO", symbols, initDate=initDate)    
initAcct(name="multiINTRO", portfolios="multiINTRO",
         initDate=initDate, initEq=initEq)    
initOrders(portfolio="multiINTRO", initDate=initDate)    


strategy("multiINTRO", store=TRUE)    
summary(getStrategy("multiINTRO"))    

add.signal("multiINTRO", name="sigFormula",
           arguments=list(columns=c("Close","Low"),
                          formula="(Close > Lowcut1*Low) & (Close< Lowcut2*Low)",
                          cross=FALSE),store=TRUE,env=globalenv(),
           label="longLowenter") ##Long entry


add.rule("multiINTRO", name="ruleSignal", 
         arguments=list(sigcol="longLowenter", sigval=TRUE, orderqty=100,
                        ordertype="market", orderside="long"), type="enter") ## Long enter


out<-try(applyStrategy("multiINTRO",portfolios="multiINTRO"))    
head(mktdata)

person Rstudent    schedule 19.10.2014    source источник


Ответы (1)


head(mktdata) явно указывает "XLB.Close" в качестве имени столбца и "XLB.Close" != "Close". Используйте экстракторы столбцов quantmod Cl и Lo для рыночных данных, чтобы получить нужные столбцы.

Кроме того, ваш аргумент formula неверен, потому что это строка символов, а не формула. Ваша стратегия работает для меня, если я изменю ваш вызов add.signal на:

add.signal("multiINTRO", name="sigFormula",
  arguments=list(formula=longLowenter ~ Cl(mktdata) > Lowcut1*Lo(mktdata) & Cl(mktdata)< Lowcut2*Lo(mktdata), cross=FALSE), store=TRUE, env=globalenv(),
  label="longLowenter") ##Long entry
person Joshua Ulrich    schedule 20.10.2014