मैं याहू फाइनेंस से "लास्ट ट्रेड" स्टॉक मूल्य को आर में आयात करना चाहूंगा। इरादा लगभग वास्तविक समय डेटा के साथ काम करना है। क्या कोई उपाय है?
किसी भी उपयोगी टिप्पणी के लिए अग्रिम धन्यवाद।
मैं याहू फाइनेंस से "लास्ट ट्रेड" स्टॉक मूल्य को आर में आयात करना चाहूंगा। इरादा लगभग वास्तविक समय डेटा के साथ काम करना है। क्या कोई उपाय है?
किसी भी उपयोगी टिप्पणी के लिए अग्रिम धन्यवाद।
जवाबों:
यह वास्तव में एक सांख्यिकी प्रश्न नहीं है (शायद इसे एसओ में स्थानांतरित किया जा सकता है?), लेकिन क्वांटमोड में एक अच्छा कार्य है जो कि डर्क ने हाथ से किया है। देखें 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
यह बहुत आसान है कि 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 का उपयोग करते हैं जो बाहर से दूध के लिए कठिन है।
यहाँ एक छोटा सा कार्य है जिसे मैंने योहू से "छद्म वास्तविक समय" डेटा इकट्ठा और चार्ट करने के लिए लिखा है:
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)})
}
यह इस तरह चार्ट का उत्पादन करता है:
आप अन्य उद्देश्यों के लिए भी डेटा का उपयोग कर सकते हैं।
require(quantmod)
को अनुगामी }
से स्वयं में पकड़ा है । ग्राफ शो करने से पहले आपको कम से कम 5 मिनट इंतजार करना होगा।
library(quantmod)
getSymbols("LT.NS",src="yahoo")