如何使用R下载日内股市数据

如何使用R下载日内股市数据,r,finance,stockquotes,quandl,R,Finance,Stockquotes,Quandl,全部, 我正在寻找从雅虎或谷歌下载股票数据的时间间隔为15-60分钟,尽可能多的历史我可以得到。我提出了一个粗略的解决方案如下: library(RCurl) tmp <- getURL('https://www.google.com/finance/getprices?i=900&p=1000d&f=d,o,h,l,c,v&df=cpct&q=AAPL') tmp <- strsplit(tmp,'\n') tmp <- tmp[[1]] tm

全部,

我正在寻找从雅虎或谷歌下载股票数据的时间间隔为15-60分钟,尽可能多的历史我可以得到。我提出了一个粗略的解决方案如下:

library(RCurl)
tmp <- getURL('https://www.google.com/finance/getprices?i=900&p=1000d&f=d,o,h,l,c,v&df=cpct&q=AAPL')
tmp <- strsplit(tmp,'\n')
tmp <- tmp[[1]]
tmp <- tmp[-c(1:8)]
tmp <- strsplit(tmp,',')
tmp <- do.call('rbind',tmp)
tmp <- apply(tmp,2,as.numeric)
tmp <- tmp[-apply(tmp,1,function(x) any(is.na(x))),]
库(RCurl)

tmp我将首先尝试回答时间戳问题。请注意这是我的解释,我可能错了

使用示例中的链接
https://www.google.com/finance/getprices?i=900&p=1000d&f=d,o,h,l,c,v&df=cpct&q=AAPL
我得到以下数据:

EXCHANGE%3DNASDAQ
MARKET_OPEN_MINUTE=570
MARKET_CLOSE_MINUTE=960
INTERVAL=900
COLUMNS=DATE,CLOSE,HIGH,LOW,OPEN,VOLUME
DATA=
TIMEZONE_OFFSET=-300
a1357828200,528.5999,528.62,528.14,528.55,129259
1,522.63,528.72,522,528.6499,2054578
2,523.11,523.69,520.75,522.77,1422586
3,520.48,523.11,519.6501,523.09,1130409
4,518.28,520.579,517.86,520.34,1215466
5,518.8501,519.48,517.33,517.94,832100
6,518.685,520.22,518.63,518.85,565411
7,516.55,519.2,516.55,518.64,617281
...
...
注意第一列的第一个值
a1357828200
,我的直觉是这与
POSIXct
有关。因此,快速检查:

> as.POSIXct(1357828200, origin = '1970-01-01', tz='EST')
[1] "2013-01-10 14:30:00 EST"
所以我的直觉似乎是正确的。但时间似乎已经过去了。现在,数据中还有一个信息<代码>时区偏移量=-300
。因此,如果我们将时间戳偏移这个量,我们应该得到:

as.POSIXct(1357828200-300*60, origin = '1970-01-01', tz='EST')
[1] "2013-01-10 09:30:00 EST"
请注意,我不知道您要求的是哪一天的数据。但快速查看谷歌金融发现,这些确实是2013年1月10日的价格水平


第一列的剩余值似乎与第一行的值存在某种偏移

为什么不从中加载数据?例如



更新:对不起,我刚刚意识到Quandl只获取日常数据-但我在这里留下我的答案,因为在类似情况下,Quandl很容易查询

,因此下载和标准化数据比我想象的要困难得多-大约150行代码。问题在于,尽管谷歌为所有交易所交易股票提供了过去50个训练日的数据,但这些训练日内的时间戳并不标准化:例如,指数“1”可能指数据集中第一个交易日的第一个或第二个时间增量。更糟糕的是,只有交易量较小的股票才有记录交易的分录。对于像APPL这样的高成交量股票来说,这没有问题,但对于低成交量的小盘股来说,这意味着你的系列即使不是大部分数据,也会丢失很多。这是有问题的,因为我需要所有的股票序列整齐地相互重叠,以便进行分析

幸运的是,数据仍然有一个通用的结构。使用此链接:

https://www.google.com/finance/getprices?i=1800&p=1000d&f=d,o,h,l,c,v&df=cpct&q=AAPL 
最后更改股票代码将使您以1/2小时的增量获得过去50天的交易日。POSIX时间戳由@geektrader非常有帮助地解码,每隔3周出现在时间戳列中。虽然时间戳索引并不总是以1:1的方式方便地对应(我几乎怀疑这是谷歌有意的),但存在一种模式。例如,对于我在三周增量的第一个交易日查看的半小时序列,时间戳索引统一在1:15附近运行。这可能是1:13,1:14,2:15——这取决于股票。我不确定第14条和第15条是什么:我怀疑它们要么是每日摘要,要么是盘后交易信息。关键是,没有一种模式可以让你放心。遗憾的是,训练日的第一个戳记并不总是包含期初数据。最后一个分录和结账数据也是如此。我发现,要知道交易数据的真实代表是什么,唯一的方法就是将这些数字与谷歌地图上的序列进行比较。经过几天徒劳无益的努力,我终于找到了一个“大概”的策略。我搜集了APPL的数据(一种成交量非常大的股票),并将其在每个交易日内的时间戳指数设置为整个市场的参考值。所有交易日的增量至少为13,相当于6.5小时的交易日,但有些交易日的增量为14或15。在这种情况下,我只截短了前13个索引。在此基础上,我使用了while循环,基本上完成了下载的每个股票代码的数据,并将其在给定训练日内的时间戳索引与APPL时间戳进行了比较。我保留了重叠部分,填补了缺失的数据,并删掉了不重叠的部分

听起来像是一个简单的解决办法,但对于交易数据稀少的低成交量股票来说,实际上有几十种特殊情况需要我处理,还有很多数据需要插值。我得到了一些非常奇怪的结果,其中一些我知道是不正确的。然而,对于大成交量、中盘和大盘股票,这个解决方案非常有效:在大多数情况下,这个系列要么与APPL数据非常整齐地同步,要么与他们的谷歌财务档案完美匹配

这个方法引入了一些错误,这是无法避免的,我仍然需要对备用小盘股的方法进行微调。这就是说,将一系列数据移动半小时或填补一个时间增量的缺口,相对于市场和股票的整体走势,只会引入非常小的误差。我相信,我拥有的数据集“足够好”,可以让我对一些问题获得相关的答案。从商业上获得这些东西要花费数千美元


想法还是建议

对于时区偏移,请尝试:

as.POSIXct(1357828200,原点='1970-01-01',tz=系统时区(位置=真))


(tz将根据您的位置自动调整)

它使我在尝试使用getURL时授权失败。我自己也曾在一些拍卖网站上使用过它,我使用应用程序Emacs的函数以一定的时间间隔运行代码。它甚至可以在您编程时为您编辑文本。我不知道时间部分是否仍未解决?交互式经纪人不需要花费数千美元,您可以获得数千只股票、债券、期货、外汇、期权等的日内数据。请参阅和我的。其他想法:这看起来不错。您需要一个ibrokers帐户来实现这些包,对吗?目前,我在optionshouse,需要依靠我的手机
https://www.google.com/finance/getprices?i=1800&p=1000d&f=d,o,h,l,c,v&df=cpct&q=AAPL