2016-06-01 70 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)