我想将雅虎金融的“最后交易”股票价格导入 R。目的是使用(几乎)实时数据。有什么解决办法吗?
提前感谢您提供任何有用的评论。
我想将雅虎金融的“最后交易”股票价格导入 R。目的是使用(几乎)实时数据。有什么解决办法吗?
提前感谢您提供任何有用的评论。
鉴于R可以直接读取给定的 URL ,这非常容易。关键是要知道如何形成 URL。这是一个基于 Dj Padzensky 在 1990 年代后期编写的代码的快速而肮脏的示例,我一直在Perl模块Yahoo-FinanceQuote(当然也在这里)中维护它几乎一样长的时间。
如果你懂一点 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>
第三栏是您的最后一笔交易。在公开市场时间,您将获得更少的 NA 和更多的数据可变性。但请注意,尽管大多数价格都有 15 或 20 分钟的延迟——但有些指数是实时的。实时数据是一项大生意,也是交易所的主要收入,因此他们往往不会放弃。另外,如果我没记错的话,谷歌和雅虎的财务页面上更新和更实时的显示使用了更多的 AJAXy,更难从外部挤奶。
这真的不是一个统计问题(也许这可以转移到 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
这是我编写的一个小函数,用于从雅虎收集和绘制“伪实时”数据:
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)})
}
它产生这样的图表:
您还可以将数据用于其他目的。
library(quantmod)
getSymbols("LT.NS",src="yahoo")