2016-06-01 4 views
0

다른 신호를 참조하는 올바른 방법은 무엇입니까? 의도 한 기능이 아닌가? 나는 내 코드에서 그것을 할 수있는 방법을 찾는 것 같습니다.다른 신호를 참조하는 quantstrat 신호

library(PerformanceAnalytics) 
library(quantmod) 
library(lattice) 
startDate <- '2010-01-01' # start of data 
endDate <- '2015-05-01' # end of data 
.blotter<-new.env() 
.strategy<-new.env() 


Sys.setenv(TZ="EST") # set time zone 
symbols<-c("GOOG") 
data<-getSymbols(symbols, from=startDate, to=endDate, index.class="POSIXct",env=NULL) 

library(quantstrat) 
initDate <- '2009-12-31' 
initEq <- 1e6 
currency("USD") 
stock(symbols, currency="USD", multiplier=1) 

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

strategy("bbands", store=TRUE) 
#Indicators are applied before signals and rules, and the output of indicators may be used as inputs to construct signals or fire rules 

#mktdata is the time series object that holds the current symbols data during evaluation (pg 55) 
add.indicator("bbands", name = "BBands",arguments = list(HLC = quote(HLC(mktdata)), maType='SMA'), label='bbInd') 

test <- applyIndicators("bbands", mktdata=data) 
head(test, 10) 

add.signal("bbands", name="sigThreshold", arguments=list(columns=c("pctB.bbInd",".77"),relationship="gt"),label="H.gt.UpperBand") 

add.signal("bbands", name="sigThreshold", arguments=list(columns=c("H.gt.UpperBand","0"),relationship="gt"),label="true.upper.band") 

test <- applySignals("bbands", mktdata=test) 
head(test, 10) 

오류이 일반화 된 예이다

Error in match.names(column, colnames(data)) : 
    argument "column" is missing, with no default 

참고. 첫 번째 신호를 지시자로 만들고이 특정한 경우에이 문제를 피하는 것은 사소한 일입니다.

답변

0

sigThreshold에 잘못된 인수를 전달했습니다. 이 수정 된 코드는 첫 번째 신호에서 H.gt.UpperBand 열 (단수)을 사용하는 두 번째 신호로 예상대로 작동합니다. sigThreshold 함수의 누락 된 인수는 column (단수)이고 threshold입니다.

library(quantstrat) 

startDate <- '2010-01-01' # start of data 
endDate <- '2015-05-01' # end of data 

Sys.setenv(TZ="EST") # set time zone 
symbols<-c("GOOG") 
data<-getSymbols.yahoo(symbols, from=startDate, to=endDate, index.class="POSIXct",auto.assign=FALSE) 

initDate <- '2009-12-31' 
initEq <- 1e6 
currency("USD") 
stock(symbols, currency="USD", multiplier=1) 

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

strategy("bbands", store=TRUE) 
#Indicators are applied before signals and rules, and the output of indicators may be used as inputs to construct signals or fire rules 

#mktdata is the time series object that holds the current symbols data during evaluation (pg 55) 
add.indicator("bbands" 
       , name = "BBands" 
       , arguments = list(HLC = quote(HLC(mktdata)) 
           , maType='SMA') 
       , label='bbInd') 

test <- applyIndicators("bbands", mktdata=data) 
head(test, 10) 

add.signal("bbands" 
      , name="sigThreshold" 
      , arguments=list(column="pctB.bbInd" 
          , threshold=.77 
          , relationship="gt") 
      , label="H.gt.UpperBand") 

add.signal("bbands" 
      , name="sigThreshold" 
      , arguments=list(column="H.gt.UpperBand" 
          , threshold=0 
          , relationship="gt") 
      ,label="true.upper.band") 

test <- applySignals("bbands", mktdata=test) 
head(test, 10)