3

日付と価格が次のようなデータフレームがあります。

>df
Price  Date
1.25   2012-01-05
...

通貨と株式を作成します。

currency("USD")
stock("GSPC", "USD")

次に、xtsオブジェクトを作成します。

GSPC <- xts(df$Price, df$Date)
colnames(GSPC) <- "Close"

の使用目的は、ブロッターポートフォリオを作成することです-これは機能します。しかし、私がしようとすると

updatePortf(portfolio, Symbols="GSPC", Dates = current.date)

次のエラーが発生します。

Error in get(Symbol, pos = env) : object 'GSPC' not found

GSPCは「showSymbols()」に表示されないので、どこかに登録する必要があると思います。シンボルを登録する方法はありますか?

別のstackoverflowの答えに触発された、非常にハッキーな回避策は次のとおりです。

GSPC$GSPC.High <- GSPC$Open
GSPC$GSPC.Low <- GSPC$Open
GSPC$GSPC.Close <- GSPC$Open
GSPC$GSPC.Volume <- GSPC$Open
GSPC$GSPC.Adjusted <- GSPC$Open

write.zoo(GSPC, file="GSPC.csv", sep=",")
setSymbolLookup(GSPC=list(src="csv",format="%Y-%m-%d"))

getSymbols("GSPC")

上記を作成するためのより良い方法はありますか?ボリューム、高、低、クローズ、調整がありません-ブロッターにはまだ必要ですか?

更新 私は問題を再現することができ、それがなぜであるかを理解しました。ローカル関数環境でxtsオブジェクトを宣言できないようです。再現可能なスクリプトは次のとおりです。

library(xts)
library(FinancialInstrument)
library(blotter)
library(lubridate)
rm(list=ls(envir=.blotter),envir=.blotter)

runme <- function() {
  currency("USD")
  stock("GSPC", "USD")

  dates <-ymd("2012-03-02") + seq(0,9) * ddays(1)
  prices <- abs(rnorm(10))

  GSPC <- xts(prices, dates)
  colnames(GSPC) <- "Close"

  # Initialise
  initPortf("p", symbols="GSPC", initDate=ymd("2012-01-01"), currency="USD")
  initAcct("a", portfolios="p", initDate=ymd("2012-01-01"), initEq=2e6, currency="USD")

  trade.date <- ymd("2012-03-04")
  addTxn("p", "GSPC", trade.date, 1, GSPC[trade.date])

  updatePortf("p", Symbols="GSPC", Dates = trade.date)
  updateAcct("a", Dates = trade.date)

  updateEndEq("a", Dates = trade.date)

  chart.Posn("p")

}
4

2 に答える 2

2

ブロッターパッケージは、 FinancialInstrumentパッケージを利用します。おそらく楽器を定義する必要があります。このようなことをすればうまくいくと思います。

synthetic("GSPC", currency("USD"))

そうでない場合は、再現可能な例を提供できます。(私たちはあなたのポートフォリオを持っていません)

編集:

タイトルの質問に直接答えるには、ロードに使用したすべてのシンボルの呼び出しをgetSymbols保存します。しかし、ブロッターはそれを見ていないと思います。list.getSymbols.GlobalEnvgetSymbols

編集2:

.GlobalEnv表示されるエラーメッセージは、名前の付いた「GSPC」にデータがないことを示しています。xtsにオブジェクトを含めるか、引数にオブジェクトを.GlobalEnv渡す必要があります。繰り返しになりますが、あなたの例が再現可能であれば、私はより良い助けを与えることができます(それがこのサイトの将来の訪問者にとってより役立つことは言うまでもありません)。xtsupdatePortfPrices

于 2012-08-09T13:50:12.647 に答える
1

完全を期すために、上記のスニペットを機能させるには、GSPCを.GlobalEnvに割り当てる必要があります。

assign("GSPC", GSPC, envir=.GlobalEnv)

完全なスクリプトは次のとおりです。

library(xts)
library(FinancialInstrument)
library(blotter)
library(lubridate)
rm(list=ls(envir=.blotter),envir=.blotter)

runme <- function() {
  currency("USD")
  stock("GSPC", "USD")

  dates <-ymd("2012-03-02") + seq(0,9) * ddays(1)
  prices <- abs(rnorm(10))

  GSPC <- xts(prices, dates)
  colnames(GSPC) <- "Close"
  assign("GSPC", GSPC, envir=.GlobalEnv)

  # Initialise
  initPortf("p", symbols="GSPC", initDate=ymd("2012-01-01"), currency="USD")
  initAcct("a", portfolios="p", initDate=ymd("2012-01-01"), initEq=2e6, currency="USD")

  trade.date <- ymd("2012-03-04")
  addTxn("p", "GSPC", trade.date, 1, GSPC[trade.date])

  updatePortf("p", Symbols="GSPC", Dates = trade.date)
  updateAcct("a", Dates = trade.date)

  updateEndEq("a", Dates = trade.date)

  chart.Posn("p")

}
于 2012-08-09T19:16:10.220 に答える