Yahoo Finance에서 R로 주가를 가져 옵니까?


26

Yahoo 파이낸스의 "Last Trade"주가를 R로 가져오고 싶습니다. 의도는 (거의) 실시간 데이터로 작업하는 것입니다. 해결책이 있습니까?

유용한 의견에 대해 미리 감사드립니다.


이 스레드도 관심이있을 수 있습니다 : R의 패키지로 제공되는 데이터 API / 피드 .
gung-모니 티 복원

답변:


14

이것은 실제로 통계 문제는 아니지만 (아마도 SO로 옮길 수 있습니까?) quantmod 에는 Dirk이 직접 수행 한 작업을 수행 하는 멋진 기능이 있습니다. 참조 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

답변 주셔서 감사합니다. 나는 stackexchange에서 꽤 새롭습니다. 질문을 어떻게 SO로 옮길 수 있습니까?
Steven

@Steven : 천만에요. 질문을 어떻게 옮길 지 잘 모르겠습니다. 중재자가 할 수 있다고 생각합니다.
Joshua Ulrich

15

R 이 주어진 URL을 직접 읽을 수 있다는 점을 고려하면 매우 쉽습니다 . 열쇠는 단순히 URL을 구성하는 방법을 아는 것입니다. 다음은 Dj Padzensky가 1990 년대 후반에 작성한 코드를 기반으로 한 빠르고 더러운 예제입니다. 필자는 Yahoo-FinanceQuote ( 여기서는 CPAN 에도 있음) Perl 모듈 에서 거의 오랫동안 유지해 왔습니다.

약간의 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

다음은 야후의 "의사 실시간"데이터를 수집하고 차트 화하기 위해 작성한 작은 기능입니다.

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 분 이상 기다려야합니다.
Zach

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.