2012-06-29 3 views
3

심벌 "T"로 표시된 & T의 주식에 퀀트 스트랫의 예제를 실행하려고 할 때 문제가 있습니다. 나는 R이 어딘가에서 T가 TRUE를 언급하고 있다고 생각하기 때문에 그것이라고 믿습니다.재고 "T"가 TRUE를 참조하여 "mktdata [, 유지] : 잘못된 치수 수"오류가 발생 했습니까?

library(quantstrat) 
ticker="T" 
total_hist.start = as.Date("2006-06-22") 
total_hist.end = as.Date("2008-06-20") 
total_hist = total_hist.end - total_hist.start 

currency("USD") 
stock(ticker,currency="USD",multiplier=1) 

getSymbols(ticker,from=total_hist.start,to=total_hist.end,to.assign=TRUE) 
init.date = initDate=total_hist.start-1 
strat.name<- "MyStrat" 
port.name <- "MyPort" 
acct.name <- "MyAcct" 

TradeSize = 1000 
initEq=as.numeric(TradeSize*max(Ad(get(ticker)))) 

port <- initPortf(port.name,ticker,initDate=init.date) 
acct <- initAcct(acct.name,portfolios=port.name, initDate=init.date, initEq=initEq) 
ords <- initOrders(portfolio=port.name,initDate=init.date) 
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=TradeSize, 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)) 

지금이 오류 메시지가 얻을 : 여기 내 코드입니다

Error in mktdata[, keep] : nombre de dimensions incorrect 

내가 상징이다 애질런트 테크놀로지스와 같은 다른 주식 "A"이다와 노력을하고이 오류를 내가 그렇게하지 않습니다 문제는 사실 T가 TRUE와 같다는 것을 확신합니다. 도와 주셔서 감사합니다!

+0

? 또는 어떤 함수 호출에서 오류 메시지가 나타 납니까? 내 생각에'initEq = as.numeric (...) '에서'get (ticker)'이라고하는 호출이 있습니다.이 변수는''변수'T'의 값을 가져와 '사실'이라고합니다. 그러나 세부 정보가 없으면 진단하기가 어렵습니다. –

+0

@ mathematical.coffee의 덧글에 추가하려면 :'mktdata' 무엇입니까? 표시하는 코드에는 정의되어 있지 않습니다. 대답은'ticker <-as.character (ticker)'처럼 간단 할 수도 있습니다 –

+0

'F'(Ford)를 시세 변수에 전달할 때 똑같은 문제가 발생합니다. – Milktrader

답변

3

귀하의 문제는 quantstrat에 아니지만, getSymbols

> head(T) 
[1] TRUE 
> get('T') 
[1] TRUE 
> getSymbols(T,from=total_hist.start,to=total_hist.end,to.assign=TRUE) 
Error in do.call(paste("getSymbols.", symbol.source, sep = ""), 
list(Symbols = current.symbols, : could not find function "getSymbols.TRUE" 
> getSymbols('T',from=total_hist.start,to=total_hist.end,to.assign=TRUE) 
[1] "T" 
> head(T) 
      T.Open T.High T.Low T.Close T.Volume T.Adjusted 
2006-06-22 27.34 27.44 27.13 27.29 14123800  19.85 
2006-06-23 27.15 27.61 27.05 27.37 10474500  19.91 
2006-06-26 27.32 27.53 27.19 27.33 11311200  19.88 
2006-06-27 27.38 27.49 27.29 27.35 9869100  19.89 
2006-06-28 27.27 27.44 27.24 27.41 14853300  19.94 
2006-06-29 27.42 27.79 27.42 27.70 17314300  20.15 

하나의 해결 방법은 대신이 같은 일을하는 것입니다 :

stock('ATT',currency='USD') 
ticker<-'ATT' 
ATT<-getSymbols('T',from=total_hist.start,to=total_hist.end,auto.assign=FALSE) 

이 어떤 T를 피할 것/TRUE/FALSE (항상 끔찍한 생각, imo)와 R의 F 혼란.

감사합니다,

  • 브라이언
  • 당신이 당신에게`currency`,`stock` 기능 등을 제공하기 위해 사용하는 패키지
+0

'getSymbols (as.character (ticker), ...)'가 문제를 해결할까 궁금합니다. –

+0

@CarlWitthoft : 아니오,'ticker'는 이미 문자입니다. –

+0

해결 방법에 대해 고맙습니다. 정말로 감사드립니다! –