Yahoo FinanceからRに株価をインポートしますか?


26

「最終取引」株価をYahooファイナンスからRにインポートしたいと思います。(ほぼ)リアルタイムのデータを処理することを意図しています。解決策はありますか?

有益なコメントをありがとうございます。


このスレッドも興味深いかもしれません:Rでパッケージとして利用可能なデータAPI /フィード
GUNG -復活モニカ

回答:


14

これは本当に(?おそらくこれはSOに移動することができる)の統計情報の質問はありませんが、での素敵な機能がありますquantmodディルクは、手作業で行っているものを行います。getQuote()およびを参照してくださいyahooQF()。入力yahooQF()すると、使用可能なすべての引用形式のメニューが表示されます。

> require(quantmod)
> getQuote("QQQQ;SPY", what=yahooQF("Last Trade (Price Only)"))
              Trade Time   Last
QQQQ 2011-03-17 12:33:00  55.14
SPY  2011-03-17 12:33:00 128.17

ご回答ありがとうございます。私はここstackstackでかなり新しいです。質問をSOに移動するにはどうすればよいですか?
スティーブン

@スティーブン:どういたしまして。質問を移動する方法がわかりません。モデレーターができると思います。
ジョシュアウルリッヒ

15

Rは特定のURLから直接読み取ることができるので、これは非常に簡単です。キーは、単にURLの形成方法を知ることです。これは、1990年代後半にDj Padzenskyが書いたコードに基づいた簡単で汚い例であり、私はPerlモジュールYahoo-FinanceQuote(もちろんここのCPANにもあります)でほぼずっと維持しています。

少しRを知っていれば、コードは一目瞭然です。フォーマット文字列のドキュメントを取得するのは少し難しいですが、たとえばPerlモジュールにはいくつかあります。

R> syms <- c("^GSPC", "^IXIC")
R> baseURL <- "http://download.finance.yahoo.com/d/quotes.csvr?e=.csv&f="
R> formatURL <- "snl1d1t1c1p2va2bapomwerr1dyj1x"
R> endURL <- "&s="
R> url <- paste(baseURL, formatURL, endURL, paste(syms, collapse="+"), sep="")
R> read.csv(url, header=FALSE)
     V1                V2      V3        V4     V5 V6    V7
1 ^GSPC S&P 500 INDEX,RTH 1256.88 3/16/2011 4:04pm  0 0.00%
2 ^IXIC  NASDAQ Composite 2616.82 3/16/2011 5:30pm  0 0.00%
          V8 V9 V10 V11     V12     V13               V14
1 4282084608  0 N/A N/A 1256.88 1279.46 1249.05 - 1280.91
2          0  0 N/A N/A 2616.82    0.00       0.00 - 0.00
                V15 V16 V17 V18 V19 V20 V21      V22
1 1010.91 - 1344.07 N/A N/A N/A N/A N/A N/A      SNP
2 2061.14 - 2840.51 N/A N/A N/A N/A N/A N/A NasdaqSC
R> 

列3は最後の取引です。公開市場の営業時間中は、NAが少なくなり、データのばらつきが大きくなります。ただし、ほとんどの価格は15分または20分遅れていることに注意してください。ただし、一部のインデックスはリアルタイムです。リアルタイムデータは大規模なビジネスであり、取引所にとって大きな収益であるため、取引所はデータを提供しません。また、正しく覚えていれば、GoogleとYahooの[金融]ページの新しいリアルタイム表示は、外部から搾乳するのが難しいAJAXyを使用します。


これは今日はうまくいきませんでした。2001年以前に戻ったコンポジットNasdaqインデックスを、何らかの理由で通常のデータソース(Quandlとquantmod)からダウンロードすることができず、代替を探していました。
PatrickT

4

次に、yahooから「疑似リアルタイム」データを収集してグラフ化するために作成した小さな関数を示します。

require(quantmod)
Times <-  NULL
Prices <- NULL
while(1) {

   tryCatch({
      #Load current quote
      Year <- 1970
      currentYear <- as.numeric(format(Sys.time(),'%Y'))
      while (Year != currentYear) { #Sometimes yahoo returns bad quotes
         currentQuote <- getQuote('SPY')
         Year <- as.numeric(format(currentQuote['Trade Time'],'%Y'))
      }

      #Add current quote to the dataset
      if (is.null(Times)) {
         Times <- Sys.time()-15*60 #Quotes are delayed 15 minutes
         Prices <- currentQuote['Last']
      } else {
         Times <- c(Times,Sys.time())
         Prices <- rbind(Prices,currentQuote['Last'])
      } 

      #Convert to 1-minute bars
      Data <- xts(Prices,order.by=Times)
      Data <- na.omit(to.minutes(Data,indexAt='endof'))

      #Plot the data when we have enough
      if (nrow(Data)>5) { 
         chartSeries(Data,theme='white',TA='addRSI(n=5);addBBands(n=5)')
      }

      #Wait 1 second to avoid overwhelming the server
      Sys.sleep(1)

   #On errors, sleep 10 seconds and hope it goes away
   },error=function(e) {print(e);Sys.sleep(10)}) 
}

次のようなチャートを生成します。 チャート

データを他の目的に使用することもできます。


しかし、私は「}」私は:(それを実行することはできませんと愚かな問題を取得しています、このスクリプトをありがとう

@acabaheそれはまだ私のためにうまく動作します。最後の行で、最後から最後require(quantmod)まですべてを確実に取得してください}。グラフが表示されるまで、少なくとも5分待つ必要があります。
ザック14

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.