历史股票数据来源
我试图做一个股票市场模拟器(也许最终成长为预测人工智能),但我很难find数据使用。 我正在寻找(希望是免费的)历史股票市场数据的来源。
理想情况下,它将是纳斯达克和纽约证券交易所(NYSE)每个交易品种的价格和交易量(如果冒险的话也许是其他交易)的细粒度(二级或分钟)数据集。 有谁知道这样的信息来源?
我发现这个问题表明雅虎提供的CSV格式的历史数据,但我一直无法find如何得到它在链接的网站粗略检查。
我也不喜欢在CSV文件中下载数据的想法……我想雅虎会在前几千请求之后感到沮丧并closures我。
我还发现了另外一个问题 ,让我觉得我中了大奖,但不幸的是,OpenTick网站似乎已经closures了…太糟糕了,因为我认为他们正是我想要的。
我也可以使用每天只是打开/closures每个符号的价格和数量的数据,但是如果我能得到它,我更喜欢所有的数据。 还有其他build议吗?
让我加上我的2分,我的工作就是为对冲基金获得一个好的和清洁的数据,我已经看到了相当多的数据源和历史数据提供者。 这主要是关于美国股票数据。
首先,如果你有一些钱不要从雅虎下载数据,直接从CSI数据获得date数据的结束,这是雅虎得到他们的EOD数据以及AFAIK。 他们有一个API,您可以将数据提取到任何您想要的格式。 我认为每年的数据订阅是几百美元。
从免费服务中下载数据的主要问题是,您只能获得仍然存在的股票,这称为Survivorship Bias ,如果您查看多个股票,可能会给您错误的结果,因为您只会包括那些创build而不是那些被取消的。
为了玩弄一些日内的数据,我会考虑IQFeed ,他们提供了几个API来提取历史数据,虽然他们主要是一个实时的饲料服装。 但是这里有很多select,一些经纪人甚至通过API提供历史数据下载,所以只需select你的毒药。
但通常所有这些数据都不是很干净,一旦你真的开始回testing,你会发现某些股票缺失或出现两个不同的符号,或股票分裂没有适当考虑,等等。然后,你意识到历史红利数据也是需要的,所以你开始用圆圈运行,从100个不同的数据源一起修补数据,等等。 因此,首先使用“折扣”数据馈送,但只要您运行更全面的回测,您可能会遇到问题,具体取决于您所做的事情。 如果你只是看看,比方说,标准普尔500股票这不会是一个问题,但一个“便宜”的盘中饲料将做。
你不会find什么是免费的盘中数据。 我的意思是你可能会find一些例子,我肯定有5年的MSFT tick数据浮动,但是这不会让你走得很远。
那么,如果你需要真正的东西(第二级订单,所有交易所都会发生所有的蜱),一个“负担得起的”,但是最好的select是Nanex 。 他们实际上会向你发送一个有千兆字节数据的驱动器。 如果我记得它每年的数据大概是3k-4K。 但是相信我,一旦你明白要获得好的盘中数据是多么的困难,你不会觉得这是多less钱。
不要气馁,要获取好的数据是困难的,事实上,许多对冲基金和银行每月花费数十万美元来获取他们可以信任的数据。 再次,你可以从某个地方开始,然后从那里开始,但是在上下文中可以看到它有好处。
编辑:上面的答案是从我自己的经验。 加州理工学院关于可用数据源的文章将给予更多的见解,特别推荐QuantQuote 。
这个答案不再像雅虎饲料已经存在一样准确
使用上面的雅虎CSV方法,您也可以获得历史数据! 您可以对以下示例进行反向工程:
http://ichart.finance.yahoo.com/table.csv?s=YHOO&d=0&e=28&f=2010&g=d&a=3&b=12&c=1996&ignore=.csv
主要有:
sn = TICKER a = fromMonth-1 b = fromDay (two digits) c = fromYear d = toMonth-1 e = toDay (two digits) f = toYear g = d for day, m for month, y for yearly
完整的参数列表:
a Ask a2 Average Daily Volume a5 Ask Size b Bid b2 Ask (Real-time) b3 Bid (Real-time) b4 Book Value b6 Bid Size c Change & Percent Change c1 Change c3 Commission c6 Change (Real-time) c8 After Hours Change (Real-time) d Dividend/Share d1 Last Trade Date d2 Trade Date e Earnings/Share e1 Error Indication (returned for symbol changed / invalid) e7 EPS Estimate Current Year e8 EPS Estimate Next Year e9 EPS Estimate Next Quarter f6 Float Shares g Day's Low h Day's High j 52-week Low k 52-week High g1 Holdings Gain Percent g3 Annualized Gain g4 Holdings Gain g5 Holdings Gain Percent (Real-time) g6 Holdings Gain (Real-time) i More Info i5 Order Book (Real-time) j1 Market Capitalization j3 Market Cap (Real-time) j4 EBITDA j5 Change From 52-week Low j6 Percent Change From 52-week Low k1 Last Trade (Real-time) With Time k2 Change Percent (Real-time) k3 Last Trade Size k4 Change From 52-week High k5 Percent Change From 52-week High l Last Trade (With Time) l1 Last Trade (Price Only) l2 High Limit l3 Low Limit m Day's Range m2 Day's Range (Real-time) m3 50-day Moving Average m4 200-day Moving Average m5 Change From 200-day Moving Average m6 Percent Change From 200-day Moving Average m7 Change From 50-day Moving Average m8 Percent Change From 50-day Moving Average n Name n4 Notes o Open p Previous Close p1 Price Paid p2 Change in Percent p5 Price/Sales p6 Price/Book q Ex-Dividend Date r P/E Ratio r1 Dividend Pay Date r2 P/E Ratio (Real-time) r5 PEG Ratio r6 Price/EPS Estimate Current Year r7 Price/EPS Estimate Next Year s Symbol s1 Shares Owned s7 Short Ratio t1 Last Trade Time t6 Trade Links t7 Ticker Trend t8 1 yr Target Price v Volume v1 Holdings Value v7 Holdings Value (Real-time) w 52-week Range w1 Day's Value Change w4 Day's Value Change (Real-time) x Stock Exchange y Dividend Yield
我知道你想要“免费”,但是我认真考虑从csidata.com那里得到大约300美元/年的数据,如果我是你的话。
这是雅虎用来提供他们的数据。
它带有一个体面的API,数据(据我所知)非常干净。
你订阅的时候有10年的历史,然后晚上更新。
他们也照顾各种讨厌的事情,如分裂和分红给你。 如果您还没有发现数据清洗的乐趣,那么您将不会意识到您需要多less钱,直到您的ATS(自动交易系统)第一次认为有些股票真的很便宜,仅仅是因为它分裂了2 :1,你没有注意到。
介绍:
从雅虎你可以得到EOD(一天结束)的历史价格,或实时价格。 EOD的价格是非常简单的下载。 查看我的博客 ,了解如何获取数据和C#代码示例的说明。
我正在编写实时数据馈送“引擎”,将实时价格下载并存储在数据库中。 引擎最初可以从雅虎和盈透证券下载历史价格,并能够将数据存储在您select的数据库中:MS SQL,MySQL,SQLite等。它是开源的,但我会发布更多当我接近释放时(在几天之内),我的博客上的信息。
另一种select是日食交易者 …它允许您logging历史数据的粒度低至1分钟,并将价格本地存储在文本文件中。 它基本上以15分钟的延迟从雅虎下载实时数据。 由于我想要一个更强大的解决scheme,而且我正在为我们需要数据的大型学校项目工作,所以我决定编写自己的数据馈送引擎(我在上面提到过)。
示例代码:
以下是演示如何下载实时数据的示例C#代码:
public void Start() { string url = "http://finance.yahoo.com/d/quotes.csv?s=MSFT+GOOG&f=snl1d1t1ohgdr"; //Get page showing the table with the chosen indices HttpWebRequest request = null; IDatabase database = DatabaseFactory.CreateDatabase( DatabaseFactory.DatabaseType.SQLite); //csv content try { while (true) { using (Stream file = File.Create("quotes.csv")) { request = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url)); request.Timeout = 30000; using (var response = (HttpWebResponse)request.GetResponse()) using (Stream input = response.GetResponseStream()) { CopyStream(input, file); } } Console.WriteLine("------------------------------------------------"); database.InsertData(Directory.GetCurrentDirectory() + "/quotes.csv"); File.Delete("quotes.csv"); Thread.Sleep(10000); // 10 seconds } } catch (Exception exc) { Console.WriteLine(exc.ToString()); Console.ReadKey(); } }
数据库:
在数据库端,我使用OleDb
连接到CSV文件来填充DataSet
,然后通过DataSet
更新我的实际数据库,它基本上可以将从Yahoo返回的CSV文件中的所有列直接匹配到数据库(如果你的数据库不支持批量插入CSV数据,比如SQLite)。 否则,插入数据是一个单线…只是批量插入CSV到您的数据库。
您可以在这里阅读更多关于url格式的信息: http : //www.gummy-stuff.org/Yahoo-data.htm
纳斯达克和纽约证券交易所上的每一个交易品种的数据集会在第二个或每个分钟的时间间隔都会变得非常庞大 。
假设两家交易所共有4000家公司上市(这可能是非常低的,因为在纳斯达克上市的公司超过了3200家 )。 对于第二个时间间隔的数据,假设一天有6.5个交易时间,那么每个公司每天将会给出23400个数据点,或者这一天总共有9360万个数据点。 假设一年有200个交易日,那大约有一百八十七亿二千万个数据点只有一年的时间。
也许你想先从一个较小的集合开始?
纳斯达克为每个交易品种提供10年的历史EOD数据
http://www.nasdaq.com/aspx/historical_quotes.aspx?symbol=AAPL&selected=AAPL
你可以自动下载这个数据的过程。
对于生存偏差的免费数据,我发现唯一可靠的来源是QuantQuote( http://quantquote.com )
数据以分钟,秒或分辨率的forms出现,链接到他们的历史股票数据 。
上面有一个关于kibot的build议。 我会做一个快速的谷歌search之前,从他们购买,你会发现这样的警告有关kibot数据质量问题很多post。 这也是说,他们所谓的生存偏见免费sp500只有570个符号14年。 这几乎是不可能的,sp500每个月改变1-2个符号….
不幸的是,历史的免费股票数据很难获得。 现在,开球已经死了,我不知道任何其他供应商。
在过去的一段时间里,我曾为拥有自动交易系统的对冲基金工作过,我们大量使用历史数据。
我们使用TickData作为我们的来源。 他们的价格是合理的,数据有第二个决议。
让我添加一个我刚发现的来源,在这里find。
它有许多以CSV格式的历史股票数据,由Andy Pavlo收集,他的主页是“卡耐基梅隆大学计算机科学系助理教授”。
我们从Kibot.com网站购买了12年的盘中数据,对质量相当满意。
至于存储要求:所有美国股票(超过8000个符号)的12年1分钟数据约为100GB。
随着滴答滴答的数据情况有点不同。 如果只logging时间和销售额,那么美国所有股票每月的数据量大约为30GB。 如果您想要将出价/要求更改与交易一起存储,您可以预计每月大约150GB。
我希望这有帮助。 请让我知道,如果有什么我可以帮助你。
现在Mathematica还提供了当前和历史股票价格,请参阅http://reference.wolfram.com/mathematica/ref/FinancialData.html ,如果你碰巧有一个副本。
你可以使用雅虎获取日常数据(一个更加可pipe理的数据集),但你必须构build的url。 看到这个链接 。 你并没有提出很多小的请求,而是提出了更less的请求。 很多免费软件都使用它,所以他们不应该closures你。
编辑: 这个人做的,也许你可以看看他的软件所做的调用。
雅虎是获得初步免费数据的最简单的select。 在eckesicle的回答中描述的链接可以很容易地用在python代码中,但是你首先需要所有的代码。 我将使用纽约证券交易所作为这个例子,但是这也可以用于不同的交易所。
我用这个wiki页面下载了所有的公司代码和下面的脚本(我不是一个非常有才华的Pythonist,对不起,如果这个代码效率不高):
import string import urllib2 from bs4 import BeautifulSoup global f def download_page(url): aurl = urllib2.urlopen(url) soup = BeautifulSoup(aurl.read()) print url for row in soup('table')[1]('tr'): tds = row('td') if (len(tds) > 0): f.write(tds[1].string + '\n') f = open('stock_names.txt', 'w') url_part1 = 'http://en.wikipedia.org/wiki/Companies_listed_on_the_New_York_Stock_Exchange_' url = url_part1 + '(0-9)' download_page(url) for letter in string.uppercase[:26]: url_part2 = letter url = url_part1 + '(' + letter + ')' download_page(url) f.close()
为了下载每个股票,我使用了另一个非常相似的脚本:
import string import urllib2 from bs4 import BeautifulSoup global f url_part1 = 'http://ichart.finance.yahoo.com/table.csv?s=' url_part2 = '&d=0&e=28&f=2010&g=d&a=3&b=12&c=1996&ignore=.csv' print "Starting" f = open('stock_names.txt', 'r') file_content = f.readlines() count = 1; print "About %d tickers will be downloaded" % len(file_content) for ticker in file_content: ticker = ticker.strip() url = url_part1 + ticker + url_part2 try: # This will cause exception on a 404 response = urllib2.urlopen(url) print "Downloading ticker %s (%d out of %d)" % (ticker, count, len(file_content)) count = count + 1 history_file = open('C:\\Users\\Nitay\\Desktop\\Historical Data\\' + ticker + '.csv', 'w') history_file.write(response.read()) history_file.close() except Exception, e: pass f.close()
请注意,这种方法的主要缺点是不同的公司可以获得不同的数据 – 在请求的date(新列出的)中没有数据的公司将为您提供一个404页面。
另外请记住,这种方法只适用于初步数据 – 如果你真的想testing你的algorithm,你应该付出一点,并使用像CSIData或其他信任的数据供应商
我会抓取finance.google.com(报价) – 或finance.yahoo.com。
这两个将返回世界各地的大多数交stream的HTML页面,包括历史。 然后,这只是parsingHTML来提取你所需要的。
我过去做过这个,取得了很大的成功。 或者,如果您不介意使用Perl,那么CPAN上有几个模块为您完成了这项工作 – 即从Google / Yahoo中提取报价。
更多信息,请参阅报价历史
我使用eodData.com。 它相当体面的价格。 对于每个月30美元,您可以获得30天的所有美国交易所的1,5和60分钟的杠杆以及大多数其他交易所的1年的EOD数据。
我以前的一个项目将使用EODData免费下载的数据。
看看Mergent历史证券数据API – http://www.mergent.com/servius