1

ちょっとした quantmod の問題で立ち往生しています。誰かが私のコードに微調整を提案できる場合は、本当に感謝しています。私はそのようなプログラミングを知りません。たぶんそれが私が明白なことを見逃している理由です。getSymbols入力として文字列 (例: "YHOO") を受け取りますが、データを保持する xts オブジェクトとして YHOO (引用符なし) のみを返すため、問題が発生しています。また、市場指数の場合、Yahoo はコードの文字列にキャレットを含めますが (例: "^GSPC")、quantmod はプレーンな GSPC をデータ オブジェクトとして返します。

複数のティッカーのデータをダウンロードして、個々のバイナリ ファイルに保存しようとしています。これは、必ずしもインターネット アクセスを必要とするのではなく、ディスクに保存されたデータから機能できる作業環境を作成するためです。

関数を書いてみました:

buildhist <- function(x,start,end) {
  getSymbols(x, from=start, to=end, adjust=TRUE)   
  save(get(x), file= paste(x, "hist.rda", sep="_"), ascii = FALSE)  
}

次に使用します

require(quantmod)
tckr <- c("YHOO","XLB")
lapply(tckr,buildhist,start="1995-01-01",end="2011-11-30")

しかし、保存コマンドでエラーが発生します (「オブジェクト 'get(x)' が見つかりません」と表示されます)。を使用しない場合get(x)saveコマンドはティッカー名を文字列として保存するだけなので、使用できません。作品などの他のバージョンもありませんsave(noquote(x), file=paste(x, "hist.rda", sep="_"), ascii=FALSE)

quantmod によって最初に返されたのと同じオブジェクト名を使用してティッカー データを保存するには、どのコマンドを使用すればよいですか? 上記の私のコードでは、名前からキャレット記号が存在する場合にキャレット記号を削除するという他の問題に取り組もうとさえしていません。それへのポインタも大歓迎です。

4

3 に答える 3

2

getSymbols次のようなことを行って、呼び出しが成功したことを確認できますかsummary(YHOO)? (save(get(x))「get(x)」という名前のオブジェクトがないため、 絶対に書きたくありません。

あなたの問題は の適切な使用に関連していると思われますlapply。これは機能します:

foo <- 5
oof <- 4
bar<-c("foo","oof")
lapply(lapply(bar,get),sqrt)

(もちろん、buildhistnotを使用する場所sqrt

于 2011-12-19T14:23:50.057 に答える
2

更新: 以下の解決策は、OP の問題を解決しません (コメントを参照)。ジャンプ後の編集を参照してください。

デフォルトのは、インタラクティブauto.assign=TRUEに使用するときに物事を簡単にすることになっています。関数で使用する場合にgetSymbols設定します。それは物事をずっと簡単にします。auto.assign=FALSEgetSymbols

buildhist <- function(x,start,end) {
  y <- getSymbols(x, from=start, to=end, adjust=TRUE, auto.assign=FALSE)
  save(y, file= paste(x, "hist.rda", sep="_"), ascii = FALSE)  
}

で句読点文字 (キャレットを含む) を削除できますgsub。詳細については?gsub、 と?regexを参照してください。

X <- gsub("[[:punct:]]","",x)  # remove all punctuation
X <- gsub("\\^","",x)          # remove just the carat

私は最初の答えをテストしませんでした。このソリューションは機能するはずです。

buildhist <- function(x,start,end) {
  getSymbols(x, from=start, to=end, adjust=TRUE)
  X <- toupper(gsub("\\^","",x))  # what getSymbols.yahoo does
  save(list=X, file= paste(X, "hist.rda", sep="_"), ascii = FALSE)  
}

require(quantmod)
tckr <- c("^GSPC","YHOO","XLB")
lapply(tckr,buildhist,start="1995-01-01",end="2011-11-30")

少数のシンボルで毎日のデータのみを使用している場合は、それらすべてを 1 つの環境にロードして、環境を保存するだけでよい場合があります。そうすれば、多くの手間を省くことができます。次に、環境を新しいセッションにロードしてアタッチし、すべてのデータを手元に置くことができます。

myEnv <- new.env()
getSymbols(paste(tckr,sep=";"), start="1995-01-01", end="2011-11-30",
  env=myEnv, adjust=TRUE)
save(myEnv, file="myTickerData.rda")
于 2011-12-19T14:00:53.583 に答える
2

以下では、SymbolList はシンボルを持つベクトルです。すなわち

SymbolList <- c("IBM","GOOG","YHOO")

getSymbols を使用してこれらの履歴データを取得します

getSymbols(SymbolList)

関数を定義して do.call を使用し、

fun <- function(i) {return(adjustOHLC(get(SymbolList[i]),adjust = "split", use.Adjusted=TRUE))}
mydata <- do.call(merge, lapply(1:length(SymbolList), fun))

これにより、マージされたデータが得られ、使用できる他のものを結合できます。つまり、終値のみが必要で、分割を調整する場合です。

 fun <- function(i) {return(Cl(adjustOHLC(get(SymbolList[i]),adjust = "split", use.Adjusted=TRUE)))}

データ フレームにキャストすることもできます。

mydata<-as.data.frame(mydata)

そこから、これを csv ファイルに書き込むことができます。

于 2012-01-02T00:53:56.280 に答える