याहू वित्त से आर में स्टॉक मूल्य आयात करें?


26

मैं याहू फाइनेंस से "लास्ट ट्रेड" स्टॉक मूल्य को आर में आयात करना चाहूंगा। इरादा लगभग वास्तविक समय डेटा के साथ काम करना है। क्या कोई उपाय है?

किसी भी उपयोगी टिप्पणी के लिए अग्रिम धन्यवाद।


जवाबों:


14

यह वास्तव में एक सांख्यिकी प्रश्न नहीं है (शायद इसे एसओ में स्थानांतरित किया जा सकता है?), लेकिन क्वांटमोड में एक अच्छा कार्य है जो कि डर्क ने हाथ से किया है। देखें 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

आपके उत्तर के लिए धन्यवाद। मैं यहां स्टैटेक्सचेंज में काफी नया हूं। मैं अपने प्रश्न को SO पर कैसे ले जा सकता हूं?
स्टीवन

@ उत्तर: आपका स्वागत है। मुझे यकीन नहीं है कि सवाल कैसे उठाए जाएं; मुझे लगता है कि मॉडरेटर इसे कर सकते हैं।
जोशुआ उलरिच

15

यह बहुत आसान है कि R किसी दिए गए URL को सीधे पढ़ सकता है। कुंजी केवल यह जानने के लिए है कि URL कैसे बनाया जाए। यहाँ एक त्वरित और गंदा उदाहरण है, जो कि Dj Padzensky ने 1990 के दशक के उत्तरार्ध में लिखा था और जिसे मैं पर्ल मॉड्यूल Yahoo-FinanceQuote (जो निश्चित रूप से यहाँ CPAN पर भी है ) में लंबे समय से बनाए हुए है ।

यदि आप थोड़ा आर जानते हैं, तो कोड स्व-व्याख्यात्मक होना चाहिए। प्रारूप स्ट्रिंग के लिए दस्तावेज़ीकरण प्राप्त करना थोड़ा मुश्किल है लेकिन उदाहरण के लिए पर्ल मॉड्यूल में कुछ है।

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> 

कॉलम तीन आपका अंतिम व्यापार है। खुले बाजार के घंटों के दौरान आपको कम NA और अधिक डेटा परिवर्तनशीलता मिलेगी। लेकिन ध्यान दें कि ज्यादातर कीमतें 15 या 20 मिनट देरी से हैं --- लेकिन कुछ सूचकांक वास्तविक समय हैं। रीयल-टाइम डेटा एक्सचेंजों के लिए एक बड़ा व्यवसाय और प्रमुख राजस्व है, इसलिए वे इसे दूर नहीं करते हैं। इसके अलावा, और अगर मुझे सही से याद है, तो Google और Yahoo पर वित्त पृष्ठों पर नए और अधिक वास्तविक समय प्रदर्शित करने वाले कुछ और AJAXy का उपयोग करते हैं जो बाहर से दूध के लिए कठिन है।


यह मेरे लिए आज काम नहीं करता है, मैं 2001 से पहले वापस जाने वाले समग्र नैस्डैक इंडेक्स को डाउनलोड करने में सक्षम नहीं हुआ, अपने सामान्य डेटा स्रोतों (क्वांडल और क्वांटमॉड) से किसी कारण से, और विकल्प की तलाश कर रहा था।
पैट्रिक

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.