2017-09-26 6 views
2

ティッカーXとYの組み合わせから作成された合成資産からのシグナルに基づいて、戦略取引のティッカーXとティッカーYをバックテストする方法がわかりません。Quantstrat:ティッカーのシグナルに基づくトレーダーティッカーX

データ背景はXTSシリーズのティッカーのリストです。今、私は個々の資産、合成資産を取引することによってそれをしませ解決しています:

initDate = "1990-01-01" 
from = "2010-07-22" 
to = "2016-12-31" 
initeq = 1000000 
NBDG <- lXTS[[1]] 
UKPSPIR <- lXTS[[2]] 
CoIntV <- list(1, -9.90) 
Diff <- NBDG - as.numeric(CoIntV[2])*UKPSPIR 
colnames(Diff) <- "Close" 

strategy.st <- portfolio.st <- account.st <- "test" 
rm.strat(strategy.st) 
initPortf(portfolio.st, symbols = list("Diff"), initDate=initDate) 
initAcct(account.st, portfolios=portfolio.st) 
initOrders(portfolio.st) 
strategy(strategy.st, store = TRUE) 

Diff <- cbind(Diff, BBands(Diff, maType="SMA", n=12, sd=2)) 

add.signal(strategy=strategy.st, name="sigCrossover", 
      arguments = list(columns=c("Close", "up"), 
          relationship="gt"), 
      label="cl.gt.up") 

add.signal(strategy=strategy.st, name="sigCrossover", 
      arguments = list(columns=c("Close", "dn"), 
          relationship="lt"), 
      label="cl.lt.dn") 

add.signal(strategy=strategy.st, name="sigCrossover", 
      arguments = list(columns=c("Close", "mavg"), 
          relationship="gte"), 
      label="mid.cross.frombelow") 

add.signal(strategy=strategy.st, name="sigCrossover", 
      arguments = list(columns=c("Close", "mavg"), 
          relationship="lte"), 
      label="mid.cross.fromabove") 

tmp <- applySignals(strategy = strategy.st, mktdata=Diff) 

add.rule(stratBBands,name='ruleSignal', 
     arguments = list(sigcol="cl.gt.up", 
          sigval=TRUE, 
          orderqty=-1, 
          ordertype='market', 
          orderside=NULL, 
          threshold=NULL), 
     type='enter') 

add.rule(stratBBands,name='ruleSignal', 
     arguments = list(sigcol="cl.lt.dn", 
          sigval=TRUE, 
          orderqty=1, 
          ordertype='market', 
          orderside=NULL, 
          threshold=NULL), 
     type='enter') 

add.rule(stratBBands,name='ruleSignal', 
     arguments = list(sigcol="mid.cross.frombelow", 
          sigval=TRUE, 
          orderqty='all', 
          ordertype='market', 
          orderside=NULL, 
          threshold=NULL), 
     type='exit') 

add.rule(stratBBands,name='ruleSignal', 
     arguments = list(sigcol="mid.cross.fromabove", 
          sigval=TRUE, 
          orderqty='all', 
          ordertype='market', 
          orderside=NULL, 
          threshold=NULL), 
     type='exit') 

out <- applyStrategy(strategy=strategy.st,portfolios=portfolio.st) 

updatePortf(portfolio.st) 
dateRange <- time(getPortfolio(portfolio.st)$summary)[-1] 
updateAcct(portfolio.st,dateRange) 
updateEndEq(account.st) 

そうするとき、私は次の警告を得る:

1: In getInstrument(symbol) : 
    instrument Diff not found, please create it first. 
2: In getInstrument(Symbol) : 
    instrument Diff not found, please create it first. 
3: In .updatePosPL(Portfolio = pname, Symbol = as.character(symbol), : 
    Instrument Diff not found, things may break 

を、私は結果を取得しています。

誰も知っていますか?

答えて

1

あなたの楽器は、quantstratが期待するように定義していません(あなたのシミュレーションはおそらくまだ正常に実行されています)。ちょうど警告があなたに言うように....戦略を実行する前に(上記のコードでrm.stratの前に)あなたの合成機器を定義してください。

また、(それがGBPであるかどうかわからないが、デフォルトで、それは私がここで仮定USD、である)あなたの通貨を定義する必要があります。

currency(c("USD")) 
spread(primary_id = 'Diff', currency = "USD", members = c('NBDG','UKPSPIR'), memberratio = c(1, -9.90)) 

は、これらの変更を使用してコードを実行すると、警告が表示されなくなります。

は(また、あなたが投稿するあなたのコードで、あなたはadd.rulesstratBBandsstrategy.stから任意に変更されています。)

関連する問題