2017-05-19 4 views
2

quantstratの不思議な問題。 標準のTTR関数の指標を一部のデータの上位に追加しようとしています。次のように コードスニペットは、次のとおりです。Quantstrat add.indicator x = quote(Hi(mktdata))何らかの理由で列を認識しない

add.indicator(strategy.st,name="runMax", 
      arguments = list (x=quote(Cl(mktdata)),n=entry_period), 
      label = "Max55") 

動作しますが、以下の

add.indicator(strategy.st,name="runMax", 
      arguments = list (x=quote(Hi(mktdata)),n=entry_period), 
      label = "Max55") 

はしないこと。 Iは

を試みた(X =引用(Clで(mktdata))

(X =引用(VO(mktdata))

(オペアンプ(mktdata))

すべての作業 そして

(X =引用符(こんにちは(mktdata))

(X =引用符(LO(mktdata))

これはありません。 アイデア? データはGoogleへの標準呼び出しであり、Rdataとして保存されます。それが閉じるデータと連携

Error in (function (x, n = 10, cumulative = FALSE) : 
ncol(x) > 1. runMax only supports univariate 'x' 

興味あるとして、次のように

エラーです。

フルコード:

require(quantstrat) 
require(PerformanceAnalytics) 

initDate = "1990-01-01" 
from = "2007-01-01" 
to = "2012-12-31" 

options(width =70) # set the output width 

currency('USD') 
Sys.setenv(TZ ="UTC") 

require(quantmod) 

symbols = c("MSFT") 

load("~/R_backtrade_test/MSFT.Rdata") 

stock(symbols,currency='USD',multiplier = 1) 

tradeSize <- 100000 
initEq <- tradeSize*length(symbols) 

strategy.st <- portfolio.st <- account.st <- "turtles" 

rm.strat(strategy.st) 

initPortf(portfolio.st,symbols = symbols,initDate = initDate,currency =  'USD') 
initAcct(account.st,portfolios = portfolio.st,initDate = initDate,currency = 'USD',initEq = initEq) 
initOrders(portfolio.st,initDate = initDate) 
strategy(strategy.st,store = TRUE) 

strat <- getStrategy(strategy.st) 

ATRperiod = 20 
entry_period = 55 
exit_period = 20 

add.indicator(strategy.st,name="ATR", 
      arguments = list(HLC=quote(HLC(mktdata)),n=ATRperiod), 
      label = "ATR20") 

add.indicator(strategy.st,name="runMax", 
      arguments = list (x=quote(Hi(mktdata)),n=entry_period),label = "Max55") 

test <- applyIndicators(strategy.st,mktdata= MSFT) 
head(test,60) 

答えて

0

が代わりにこれを試してみてください:

add.indicator(strategy.st,name="runMax", 
       arguments = list (x=quote(Hi(mktdata)[, 1]),n=entry_period),label = "Max55") 

これは、その列名に「高い」との最初の列を想定しているが正しいものです。それとも、この代わりに、より慎重になります

add.indicator(strategy.st,name="runMax", 
       arguments = list (x=quote(Hi(mktdata)[, "MSFT.High"]),n=entry_period),label = "Max55") 

エラーは、問題が何であるかのヒントを取得します。 applyIndi​​catorsが実行されるときに、runMaxの呼び出しに意図せずに複数の列を渡しています。

runMaxは単変量 'x'のみをサポートします。

このエラーの原因を確認するには、runMaxインジケータを追加せずにコードを実行してみてください。 mktdataを見てください:

> head(Hi(mktdata), 2) 
      MSFT.High trueHigh.ATR20 
2007-01-03 38.927    NA 
2007-01-04 38.567   38.567 

ATRを計算するための呼び出しでは、列名に「高」が含まれています。

これらの2つの列は、runMaxapplyIndicators)の呼び出しに渡され、エラーがどのように発生するかを示します。私はOpHiLoClの問題を引き起こした同じ種類の理由で発生するquantstratコードを使用することから多くのエラーが発生していることが分かりました。したがって、ほとんどの場合、これらのヘルパー関数は、特に、「高」列の特定の名前を要求すると、人々がこれらのヘルパー機能で経験し続けるこれらの問題が回避されます。

関連する問題