2016-06-01 5 views
0

Каков правильный метод, чтобы сигналы ссылались на другие сигналы? Разве это не предназначенная функциональность? Кажется, я не могу найти способ сделать это в своем коде.сигнал квантрата, ссылающийся на другие сигналы

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)