2016-04-08 4 views
1

私はRを初めて使用しており、非常に単純な取引戦略を作成しようとしています(VIXを2%上げたら買う、2%下げると売る)。 add.signalコマンドでエラーが発生しました: "match.names(column、colnames(data))のエラー: 引数" column "が欠落しています。デフォルトはありません。 私はどこでも検索しましたが、修正を見つけたり、Rが私に教えようとしていることを理解できないようです。どんな入力も感謝します。あなたのadd.rule呼び出しが(存在しない)の列"Cl.lt.lagROC""Cl.gt.lagROC"を参照しながら、"lt.ROCThresh1""gt.ROCThresh2"quantstratパッケージで信号を追加する際のエラー

require(quantstrat) 

options("getSymbols.warning4.0"=FALSE) #suppress warnings 
rm(list=ls(.blotter), envir=.blotter) #house cleaning, clears blotter 
rm(list=ls(.strategy), envir=.strategy)#clears strategy 
rm.strat(qs.portfolio)#clear the portfolio environment 
rm.strat(qs.strategy)#clear the strategy environment 
rm.strat(qs.account)#clear the account environment 

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

# system settings 
initDate <- '2013-12-31' 
startDate <- '2014-01-01' 
endDate <- '2016-04-07' 
initEq <- 100000 
Sys.setenv(TZ="UTC") #Timezone 

getSymbols('^VIX', from=startDate, to=endDate, index.class="POSIXct", adjust=TRUE) 
VIX$lagROC <- lag(round(ROC(Cl(VIX)), 4), n=1, type="discrete") 
VIX$lagROC[is.na(VIX$lagROC)] <- 0 

# initialize portfolio, account, orders 
qs.strategy <- "qsJones" 
initPortf(qs.strategy,'VIX') 
initAcct(qs.strategy,portfolios=qs.strategy, initEq=initEq) 
initOrders(portfolio=qs.strategy) 
#create a new strategy object 
strategy(qs.strategy,store=TRUE) 

strat <- getStrategy(qs.strategy) 

thresh1 <- (.02*-1) 
thresh2 <- .02 

add.indicator(strategy = qs.strategy, name = "ROC", 
    arguments = list(x = quote(Cl(mktdata)), n=1), label="lagROC") 
test <- applyIndicators(qs.strategy, VIX) 

add.signal(qs.strategy, name="sigThreshold", 
    arguments=list(column="lagROC", threshold=thresh1, relationship="lte", cross=FALSE), 
    label="lt.ROCThresh1") 
add.signal(qs.strategy, name="sigThreshold", 
    arguments=list(column="lagROC", threshold=thresh2, relationship="gte", cross=FALSE), 
    label="gt.ROCThresh2") 
test <- applySignals(qs.strategy, test) 

# exit when lagROC < .02 
add.rule(qs.strategy, name='ruleSignal', 
    arguments=list(sigcol="Cl.lt.lagROC", sigval=TRUE, replace=FALSE, orderqty='all', 
        ordertype='market', orderside='long'), 
    type='exit', path.dep=TRUE) 
# go long when lagROC > .02 
add.rule(qs.strategy, name='ruleSignal', 
    arguments=list(sigcol="Cl.gt.lagROC", sigval=TRUE, replace=FALSE, orderqty=1500, 
        ordertype='market', orderside='long'), 
    type='enter', path.dep=TRUE) 

applyStrategy(strategy=qs.strategy , portfolios=qs.strategy) 
tail(mktdata) 
mktdata["2014"] 
getTxns(Portfolio=qs.strategy, Symbol="VIX") 

答えて

1

あなたadd.signal呼び出しは2つの列を作成します。

あなたがいずれかを行う必要があります。"Cl.lt.lagROC""Cl.gt.lagROC"からあなたのadd.rule通話中に自分のadd.signalそれぞれ"Cl.lt.lagROC""Cl.gt.lagROC"から"lt.ROCThresh1""gt.ROCThresh2"からの呼び出し、または

  • 変更sigcol=引数で

    1. 変更label=引数それぞれ"lt.ROCThresh1""gt.ROCThresh2"になります。
  • 関連する問題