2016-05-27 18 views
-1

これは私のインジケータのフォーマット上の問題だと思います。誰かがここで間違っていることを教えてもらえますか?オブジェクトmktdataが見つかりません

#....omitted the portfolio initialization above 
#returns change from past day, or NA if one of the values is invalid 
changeDaily<-function(x,y){if(is.na(x+y)==T){return(NA)};ifelse(x-y>0,"UP","DOWN")} 

#creates column called lagPredict which uses the function changeDaily 
add.indicator(strat, name = "changeDaily",arguments = list(HLC = quote(mktdata),Cl(mktdata),Lag(Cl(mktdata))), label='lagPredict') 

エラー:

Error in has.Cl(x) : object 'mktdata' not found 

トレースバック:

traceback() 
3: has.Cl(x) 
2: Cl(mktdata) 
1: add.indicator(strat, name = "changeDaily", arguments = list(HLC = quote(mktdata), 
     Cl(mktdata), Lag(Cl(mktdata))), label = "lagPredict") 

完全なコード:

source("forex.functions.R") 
startDate <- '2010-01-01' # start of data 
endDate <- '2015-05-01' # end of data 
symbols<-c("USD/EUR") 
portfolio<-acct<-strat<-"simpleLookAhead" 

initSetup(symbols,portfolio,acct,strat) 
dump<-lapply(symbols,function(x)forex.weeklyOHLC(x)) 
symbols<-gsub("/","",symbols) 
############################################################# 
#returns change from past day, or NA if one of the values is invalid 
changeDaily<-function(x,y){if(is.na(x+y)==T){return(NA)};ifelse(x-y>0,"UP","DOWN")} 

#creates column called lagPredict which uses the function changeDaily to return UP or DOWN in reference to yesterdays price 
add.indicator(strat, name = "changeDaily",arguments = list(HLC = quote(mktdata),Cl(mktdata),Lag(Cl(mktdata))), label='lagPredict') 

forex.functions.R

library(PerformanceAnalytics) 
library(quantmod) 
library(lattice) 
library(IKTrading) 
library(quantstrat) 
Sys.setenv(TZ="EST") # set time zone 
if (!exists('.blotter')) .blotter <- new.env() 
if (!exists('.strategy')) .strategy <- new.env() 

forex.weeklyOHLC<-function(ss){ 
    ss<-getSymbols(ss,src="oanda",from=startDate,to=endDate) 
    x<-get(ss) 
    #x<-adjustOHLC(x,symbol.name=symbol) #calls get Splits which calls getSymbols which fails bc src != oanda 
    x<-to.weekly(x,indexAt='lastof',drop.time=TRUE) 
    indexFormat(x)<-'%Y-%m-%d' 
    colnames(x)<-gsub("x",ss,colnames(x)) 
    assign(ss,x)  
} 

initSetup<-function(symbols,portfolio, acct, strat){ 
    initDate <- '2009-12-31' 
    initEq <- 1e6 
    currency("USD") 
    stock(symbols, currency="USD", multiplier=1) 
    rm.strat(strat) # remove portfolio, account, orderbook if re-run 
    initPortf(name=portfolio, symbols, initDate=Sys.Date()) 
    initAcct(name=acct, portfolios=portfolio,initDate=Sys.Date(), initEq=initEq) 
    initOrders(portfolio=portfolio, initDate=Sys.Date()) 
    strategy(strat, store=TRUE) 
} 
+0

あなたが再現可能な例を提供することができない場合は、少なくともあなたの質問に 'トレースバック()'出力を編集:

あなたadd.indicator呼び出しは次のようになります。 –

+0

私はTracebackを追加しました。私のコードは混乱したコードであれば、ポートフォリオのセットアップとデータフォーマット用の関数を記述しようとしていました。 – Rilcon42

答えて

0

の電話番号のargumentsリストのすべてのオブジェクトが評価されないようにするには、quoteのすべてのオブジェクトが必要です。 changeDaily関数に渡す正しい引数を指定する必要もあります。 HLCを渡しますが、changeDailyにはHLC引数がありません。

add.indicator(strat, name = "changeDaily", 
    arguments = list(x = quote(Cl(mktdata)), y = quote(Lag(Cl(mktdata)))), 
    label = 'lagPredict') 
+0

上記のようなカスタム関数にデータを渡すと、 1日の値(近い値と遅い値)、または一度にすべての値を取り込んでいますか? – Rilcon42

+1

@ Rilcon42:インジケータコードをベクトル化する必要があります。それは、入力データ内の各観測についての観測値を返すべきです。 –

+0

恐ろしい、ありがとう – Rilcon42

関連する問題