代码之家  ›  专栏  ›  技术社区  ›  Rilcon42

引用其他信号的quantstrat信号

  •  0
  • Rilcon42  · 技术社区  · 8 年前

    让信号参考其他信号的正确方法是什么?它不是预期功能吗?我似乎无法在代码中找到实现它的方法。

    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
    

    请注意,这是一个通用示例。在这种特殊情况下,将第一个信号作为一个指示符并避免这个问题是微不足道的。

    1 回复  |  直到 8 年前
        1
  •  0
  •   Brian G. Peterson    8 年前

    你把错误的论点传递给了 sigThreshold 。此更正的代码按预期工作,第二个信号使用 H.gt.UpperBand 第一个信号的列(单数)。代码中缺少的参数 sig阈值 功能是 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)