2016-04-08 16 views
1

Ben R için yeniyim ve çok basit bir ticaret stratejisi oluşturmaya çalışıyorum (VIX'i% 2 artırdığınızda satın al,% 2'ye varan indir). Add.signal komutu ile bir hata alıyorum: "match.names (sütun, colnames (data)) hatası: argüman" sütun ", hiçbir varsayılan ile eksik." Her yerde aradım ve düzeltmeyi bulamıyorum ya da R'nin bana ne anlatmaya çalıştığını anlayamıyorum. Herhangi bir girdi takdir edilecektir. senin add.rule aramalar (var olmayan) sütunları "Cl.lt.lagROC" ve "Cl.gt.lagROC" referans olurken, "lt.ROCThresh1" ve "gt.ROCThresh2":Quantstrat paketinde bir sinyal eklerken hata oluştu

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") 

cevap

1

Sizin add.signal aramalar iki sütun oluşturur.

İhtiyacınız için ya:

  1. Değişim "Cl.lt.lagROC" ve "Cl.gt.lagROC" sırasıyla veya
  2. Değişim "Cl.lt.lagROC" ve "Cl.gt.lagROC" adresinin add.rule çağrılarında sigcol= argüman için "lt.ROCThresh1" ve "gt.ROCThresh2" adresinin add.signal çağrılarında label= argüman Sırasıyla "lt.ROCThresh1" ve "gt.ROCThresh2"'a.