2013-06-28 5 views
1

나는 다음과 같은 분석과 붙어있어 실행 :오류는 quantstrat 분석

library(quantstrat) 

stock_size = 200 
tickers = c("XOM", "MCD") 
init.date = as.Date("2008-01-01") 

usd = "USD" 
currency(usd) 
for(ticker in tickers){ 
    stock(ticker, currency=usd, multiplier = 1) 
} 

options("getSymbols.warning4.0"=FALSE) 
getSymbols(tickers,from=init.date,to.assign=TRUE) 

suppressWarnings(rm(strat, port, acct, ords)) 

port.name <- "MyPort" 
port <- initPortf(port.name,tickers,initDate=init.date) 
acct.name <- "MyAcct" 
acct <- initAcct(acct.name,portfolios=port.name, initDate=init.date, initEq=35000) 
ords <- initOrders(portfolio=port.name,initDate=init.date) 

strat.name <- "MyStrat" 
strat<- strategy(strat.name) 
strat<- add.indicator(strategy = strat, name = "SMA", arguments = list(x=quote(Ad(mktdata)), n=20),label= "ma20") 
strat<- add.indicator(strategy = strat, name = "SMA", arguments = list(x=quote(Ad(mktdata)), n=50),label= "ma50") 

strat<- add.signal(strat, name="sigCrossover", arguments = list(columns=c("ma20","ma50"), relationship="gte"), label="ma20.gt.ma50") 
strat<- add.signal(strat, name="sigCrossover", arguments = list(column=c("ma20","ma50"), relationship="lt"), label="ma20.lt.ma50") 

strat<- add.rule(strategy = strat,name='ruleSignal', arguments = list(sigcol="ma20.gt.ma50", sigval=TRUE, orderqty=stock_size, ordertype='market', orderside='long', pricemethod='market'), type='enter', path.dep=TRUE) 
strat<- add.rule(strategy = strat,name='ruleSignal', arguments = list(sigcol="ma20.lt.ma50", sigval=TRUE, orderqty='all', 
ordertype='market', orderside='long', pricemethod='market'), type='exit', path.dep=TRUE) 

out<-try(applyStrategy(strategy=strat, portfolios=port.name)) 
charts.PerformanceSummary() 

나는 오류의 몇 얻었 기 때문에 :

Error in `colnames<-`(`*tmp*`, value = c("XOM.Adjusted.SMA.50", "XOM.Adjusted.SMA.20.ma20.SMA.50" : 
    length of 'dimnames' [2] not equal to array extent 
Error in inherits(x, "xts") : argument "R" is missing, with no default 

사람이 뭐가 잘못 찾아 도와 줄 수 있습니까?

+0

이 사이트는 "내 오류 찾기"를위한 장소가 아닙니다. 특정 프로그래밍 관련 질문이 필요합니다. –

+6

@ SeñorO IMO, 이것은 모델 질문입니다. 패키지와 함께 제공되는 데모와 거의 동일하게 보이는 간결하고 재현 가능한 예제를 제공하지만이 코드는 오류를 나타내며 퀀트 스트랫 코드의 어딘가에서 발생하기 때문에이 코드가 어디에서 오는 것인지 분명하지 않습니다. 그래서 오류가 발생하는 이유를 알아내는 데 도움을 요청할 수있는 곳입니다. – GSee

답변

5

현재 버전의 TTR에서 MA 표시기가 반환하는 열의 이름 앞에는 입력 열의 이름이 접두사로 붙습니다. 예 : SMA (MCD.Adjusted, n = 20)MCD.Adjusted.SMA.20이라는 열을 반환합니다.

광고() 문자열 를 조정 일치하는 모든 열 이름을 반환합니다. 두 번째 SMA-표시가 호출되는 시간으로

, 광고() 2 열 이름 (원래 MCD.Adjusted 열을 더한 제 1 지시 MCD.Adjusted.SMA.20의 출력 열을 일치합니다). 현재 구현에서 SMA()는 한 번에 하나의 입력 열만 처리 할 수 ​​있으므로 치수 오류가 발생합니다.

해결 방안은 인수 목록에 견적 (Ad (mktdata) [, 1])을 사용하여 첫 번째 일치 항목 만 전달하는 것입니다.

+0

@ Jan Humme, 감사합니다. 이제 스크립트는 37 행까지 진행됩니다. 여기에는'charts.PerformanceSummary()'가 있습니다. '상속의 오류 (x, "xts") : 인수 "R"이 빠졌고 기본값이 없습니다. 이 마지막 오류를 제거 할 수있는 방법이 있습니까? – alexyz78

+0

@ user601423 인수없이'charts.PerformanceSummary'를 호출 할 수 없습니다. 'R'은 필수 인수입니다. '? charts.PerformanceSummary'를보세요. – GSee