1

私は次の関数を作成して、特定の株式の取引の最良/最悪の日を逃した場合の影響を自動的に評価します。残念ながら、関数の一部が失敗しているようです。

library(quantmod)
    missingDays<- function(ticker,dmiss=10,type="best",period="days",fdate="2000-01-01",tdate=Sys.Date()) {
          getSymbols(ticker,from=fdate,to=tdate) #quantmod to pull ticker info
          d<-get(ls()[1])
          x<-as.data.frame(periodReturn(Cl(d),period=period))
          x<- x[order(x[1]),]
          if(type=="best") {
            (((mean(x[1:(length(x)-dmiss)],na.rm=TRUE)+1)^(251))-1)*100      #average daily return, annualized  
          } else {
            (((mean(x[dmiss:(length(x))],na.rm=TRUE)+1)^(251))-1)*100      #average daily return, annualized
          }  
        }
missingDays("^GSPC",10,type="best",period="daily",fdate="2000-01-01")

エラーは、次の2行のコードで明らかに発生します。

  d<-get(ls()[1])
  x<-as.data.frame(periodReturn(Cl(d),period=period))

これは非常に奇妙です。関数ではなく直接実行すると、正常に機能するからです。dxtsオブジェクトとして識別できないようです。

明らかなことを見逃してしまった場合は、お詫び申し上げます。

助けてくれてありがとう。

4

2 に答える 2

2

関数内でそのように使用しないでくださいgetSymbols。の出力を直接設定auto.assign=FALSEして割り当てます。getSymbolsd

d <- getSymbols(ticker,from=fdate,to=tdate,auto.assign=FALSE)

これはすべて、で詳細に説明されてい?getSymbolsます。よくお読みになることをお勧めします。


アップデート:

もう少し考えてみると、missingDays関数がへの呼び出しからの出力を受け入れる方がおそらく良いでしょうgetSymbols。そうすれば、さまざまなパラメータセットのデータをダウンロードする必要がなくなります。

missingDays <- function(symbol, dmiss=10, type="best", period="daily",
        fdate="2000-01-01", tdate=Sys.Date()) {
  x <- as.data.frame(periodReturn(Cl(symbol),period=period))
  x <- x[order(x[1]),]
  if(type=="best") {
    #average daily return, annualized
    (((mean(x[1:(length(x)-dmiss)],na.rm=TRUE)+1)^(251))-1)*100
  } else {
    #average daily return, annualized
    (((mean(x[dmiss:(length(x))],na.rm=TRUE)+1)^(251))-1)*100
  }
}
getSymbols("^GSPC", from="2000-01-01")
missingDays(GSPC)
于 2011-11-22T17:34:22.890 に答える
1

これlsは、関数envir内で評価しているためです。.GlobalEnv地球環境で調べてもらうために使用します。

d <- get(ls(envir = .GlobalEnv), envir = .GlobalEnv)

get関数のenvirが必要かどうかはわかりません。しかし、私はそれが傷つくことはないと思います。

HTH

于 2011-11-22T17:26:09.223 に答える