历史库存数据来源


239

我正在尝试制作一个股市模拟器(也许最终会发展成为一种可预测的AI),但是在查找要使用的数据时遇到了麻烦。我正在寻找(希望免费的)历史股票市场数据来源。

理想情况下,这将是一个非常精细的(秒或分钟间隔)数据集,其中包含纳斯达克和纽约证券交易所(如果我喜欢冒险的话,可能还有其他)的每个交易品种的价格和交易量。有人知道这种信息的来源吗?

我发现了这个问题该问题表明Yahoo提供了CSV格式的历史数据,但是我一直无法通过粗略检查链接的网站来找到如何获取它。

我也不喜欢将数据逐个下载到CSV文件中的想法……我想Yahoo在最初的几千个请求后会不高兴并关闭了我。

我还发现了另一个问题,使我认为自己已经中奖了,但是不幸的是,OpenTick网站似乎已经关门了……太糟糕了,因为我认为它们正是我想要的。

我还可以使用每天只是每个交易品种的开盘价/收盘价和交易量的数据,但是如果可以的话,我希望所有数据都是这样。还有其他建议吗?


4
@rmeador,无论您发出多少请求,雅虎都不会关闭您,但Google会关闭您。我已经能够在大约5-6个小时内从Yahoo下载约4GB的EOD历史价格,而无需关机。自从他们加入市场以来,大约有7,000只股票具有其EOD的所有历史价格。请参阅我的答案以获取更多信息和示例源代码。
基里尔

我觉得EOD数据不够丰富。如果您想逐笔报价和交易,我相信polygon.io是最便宜的。
Quinton Pike

Answers:


226

让我加2美分,这是我为对冲基金获取良好和干净数据的工作,我已经看到了很多数据源和历史数据提供者。这主要是关于美国股票数据。

首先,如果您有足够的钱不花时间从Yahoo下载数据,则直接从CSI数据获取当天结束的数据,这是Yahoo在此获取其EOD数据以及AFAIK的地方。他们有一个API,您可以在其中提取所需格式的数据。我认为每年的数据订阅费用为几百美元。

从免费服务下载数据的主要问题是,您只会得到仍然存在的存货,这被称为生存偏差,并且如果您查看许多存货,可能会给您错误的结果,因为您只会包括那些存有的存货。远非被除名的股票。

为了处理一些日内数据,我将研究IQFeed,它们提供了几个API来提取历史数据,尽管它们主要是用于实时提要。但是这里有很多选择,一些经纪人甚至通过其API提供历史数据下载,因此只需选择您的毒药即可。

但是通常所有这些数据都不是很干净,一旦真正开始回测,您会发现某些股票缺失或显示为两个不同的符号,或者没有正确地考虑了股票分割等。然后您意识到历史还需要股息数据,因此您开始循环运行,将来自100个不同数据源的数据修补在一起,依此类推。因此,从“折扣”数据供稿开始就可以,但是一旦您进行更全面的回测,您可能会遇到问题,具体取决于您的操作。如果您只看标准普尔500指数股票,那么这将不是什么大问题,而“便宜”的日内交易将成为问题。

您将找不到免费的日内数据。我的意思是,您可能会找到一些示例,我敢肯定会有大约5年的MSFT滴答数据浮动,但这不会使您走得太远。

然后,如果您需要真正的东西(II级订单,所有交易所都发生的所有价格变动),那么它是一种“价格合理”的商品,而Nanex则是绝佳的选择。他们实际上会为您提供具有TB级数据的驱动器。如果我没记错的话,每年大约$ 3k-4K的数据。但是请相信我,一旦您了解了获取良好的日内数据有多么困难,您根本不会认为这是很多钱。

不劝阻你,但要获得良好的数据是很难的,所以很难在事实上,许多对冲基金和银行花费几十万美元一个月拿到他们可以信任的数据。同样,您可以从某个地方开始,然后再从那里开始,但是很高兴在上下文中看到它。


编辑:上面的答案是根据我自己的经验。来自加州理工学院的有关可用数据提要的文章将提供更多见解,尤其是建议QuantQuote


18
+1用于指出3个数据级别(历史记录,内部,II级)以及对他人答案(完整性,整洁度,存储大小,数据集...)的深刻见解
Peter Host

2
CSI非常棒,但就仅供参考,退市股票现在已成为一项优质服务,不再包含在基本软件包中。仅供参考。
奥利2014年

1
CSI很棒,但是价格昂贵。如果使用Unfair Advantage,则必须遵守其应用程序。每天使用它来更新您的历史很无聊。如果您要使用CSI从http或ftp下载,则必须每月支付200欧元。对不起,但是太贵了。
davidxxx

@ davidh,CSI不公平优势拥有ActiveX API,您可以在其中自动导出订阅的所有数据。编写健壮的导出器工具大约需要一天的时间...如果您知道具有与CSI相同质量的便宜替代品,请随时发布替代品!
lukebuehler 2015年

关于QuantQuote的注意事项:他们在购买后48小时内审查/处理您的订单。万一您认为自己可以立即使用。
fionbio '16

94

由于Yahoo进餐已存在,因此此答案不再准确

使用上面的Yahoo的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

该页面有一个表特殊标记,可以在URL中使用。
user443854

9
从Yahoo或任何在线服务获取数据的一个大问题是您不会获得退市股票,因此您会很快陷入生存偏差。最好根据Eric H.的建议或我的建议,直接去CSI。
lukebuehler 2013年

该页面以前有一个表特殊标记,可以在URL中使用...“ Yahoo认为,您对工具的使用和分发以及位于...的内容构成违反第6、12和18节的内容服务条款(除其他条款外),引起不正当竞争,并诱使其他人违反服务条款。...通过干扰这些合同和业务关系,您可能在损害其他用户获取服务的能力。 Yahoo Finance网站提供的服务的好处”。拒绝Yahoo
Mustapha George

我从笔记中添加了其余的开关,这些开关以前可以在该网页上找到。这里介绍这些似乎并没有将违反与TOS在这里找到:policies.yahoo.com/us/en/yahoo/terms/product-atos/apiforydn/... 雅虎必须有关于Excel数据工具,也被打破在该站点上可用。
Fredrik E

2
该数据馈送不再可用。
MichaelICE '17

47

我知道您想要“免费”,但如果您是我,我会认真考虑以每年300美元的价格从csidata.com获取数据。

雅虎就是用来提供数据的。

它带有一个不错的API,并且数据(据我所知)非常干净。

订阅时,您已有10年的历史,然后每晚更新一次。

他们还为您处理各种令人讨厌的事情,例如拆分和红利。如果您还没有发现清理数据的乐趣,那么您将不会意识到自己需要多少数据,直到您的ATS(自动交易系统)第一次认为某些股票真的很便宜时,才因为它拆分了2 :1,您没有注意到。


1
它们的API支持哪些语言?
user443854

1
它们具有ActiveX API,您可以使用c ++代码或C#或Windows中的任何内容来调用ActiveX API以获取数据。
lukebuehler 2013年

1
有趣。股利和股息处理与Yahoo有何不同?
马修·洛克

1
@MatthewLock我对此不是100%的,但我认为Yahoo使用其他“公司事件”数据提供程序,然后仅使用由公司事件调整的原始CSI数据。这篇有点古老的文章提供了一些见解:amibroker.org/userkb/2007/09/23/yahoos-data-providers
lukebuehler 2013年

2
CSI非常棒,但就仅供参考,退市股票现在已成为一项优质服务,不再包含在基本软件包中。仅供参考。
奥利2014年

16

纳斯达克和纽约证交所上每隔一分钟或一分钟的时间,每个符号的数据集将会庞大

假设两个交易所共有4000家公司上市(这很低,因为在纳斯达克上市的公司超过3200家)。对于第二个时间间隔的数据,假设一天中有6.5个交易小时,则每家公司每天将为您提供23400个数据点,或该天总共约93,600,000个数据点。假设一年中有200个交易日,那么仅一年时间就达到了187.2亿个数据点。

也许您想先从较小的集合开始?


2
我在假设大多数公司不会每秒交易的情况下进行操作,因此数据点的数量将大大减少。也许这是一个错误的假设。不过,我仍在预测每年10 GB的数量...
rmeador

3张DVD附带了几个月的库存数据,其中包含10个交易品种的代码。数据也是压缩文本。
艾伦(Alan)2009年

1
@rmeador没错,但是有些股票的日交易量比一天中的秒数还多,这意味着它们每秒交易不止一次-并非所有交易都保证价格相同。因此,您必须决定是对间隔还是对交易价格感兴趣
matt b

2
如果您想要全部内容,例如所有交易所的二级报价等,那么一年的几个TB采用suuuuper压缩格式(每个交易日约5GB)。如果您只存储很少的数据,那么10年的所有存量大约只有
10GB

16

简介:
您可以从yahoo获取EOD(一天结束)的历史价格或实时价格。EOD价格非常容易下载。有关如何获取数据的解释以及C#代码示例,请参见我的博客

我正在编写一个实时数据供稿“引擎”,该引擎可将实时价格下载并存储在数据库中。该引擎最初将能够从Yahoo和Interactive Brokers下载历史价格,并且能够将数据存储在您选择的数据库中:MS SQL,MySQL,SQLite等。它是开源的,但是我会发布更多信息当我临近发布博客时(几天之内),查看博客中的信息。

另一个选择是eclipse trader ...它允许您以低至1分钟的粒度记录历史数据,并将价格本地存储在文本文件中。它基本上会延迟15分钟从Yahoo下载实时数据。因为我想要一个更强大的解决方案,并且我正在一个需要数据的大型学校项目中工作,所以我决定编写自己的数据提要引擎(如上所述)。

示例代码:
以下是示例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批量插入数据库中即可。

您可以在此处了解有关网址格式的更多信息:http : //www.gummy-stuff.org/Yahoo-data.htm


史诗般的,我希望我能早点找到。
ojblass 2011年

确实可以像您建议的那样提供实时数据吗?在页面上,它确实具有此参数“ k1”,但是上次我检查时,它仍然有一些延迟。
安东尼

@Antony大多数时候都有某种延迟,所以这仅取决于您对延迟的容忍度。雅虎确实说过,他们提供实时数据,但并不是所有的股票都提供。非实时行情自动收录器最多延迟15分钟。即使您在交换机上获得一台位于同一地点的服务器,也仍然会“有些延迟”。那么您愿意忍受什么样的延迟呢?
Kiril

不可靠 告诉我,为什么现在没有这个工作,例如:real-chart.finance.yahoo.com/...从使用finance.yahoo.com/q/...

9

纳斯达克为每个交易品种提供10年的历史EOD数据

http://www.nasdaq.com/aspx/historical_quotes.aspx?symbol=AAPL&selected=AAPL

您可以自动化下载此数据的过程。


好的来源。他们更改了请求系统,因此现在所有请求都使用JS处理(例如nasdaq.com/symbol/aapl/historical)。有什么办法可以使其自动化?
安东·塔拉申科

是的,有可能使其自动化。您需要使用嗅探器(例如Telerik),并查看如何获取数据(通过POST)。只要您正确发送post变量,就应该获取数据。
Nick_F

1
这仍然可用吗?它是否包含日内数据?

8

对于没有生存偏差的数据,我发现的唯一可靠来源是QuantQuote(http://quantquote.com

数据以分钟,秒或刻度表示,链接到其历史库存数据

上面有关于kibot的建议。在从他们那里购买产品之前,我会先进行一次快速的Google搜索,您会发现很多这样的帖子,其中包含有关kibot数据质量问题的警告。它还告诉我们,他们所谓的生存偏差自由sp500在14年中只有570个符号。这几乎是不可能的,SP500改变每1-2个符号每月 ....


3
kibot只有3个免费符号。其余的要付钱!他只是在做广告
弹跳

quantquote的免费每日数据没有记录:csv文件中没有列标题,也没有文档。
user443854

有文档,格式基本上与分钟分辨率数据集相同。
user788171 2013年

quantquote.com有很多错误的数据
Ivelin

自1998年以来,他们为IBM提供免费的分钟数据。这对我来说已经足够了。我只需要一个符号就可以测试压缩力:kibot.com/buy.aspx
Sergei Rodionov

7

不幸的是,很难获得免费的历史行情自动收录器数据。现在,opentick已死,我不知道任何其他提供者。

在前一生中,我曾在一家拥有自动交易系统的对冲基金工作,并且大量使用了历史数据。

我们使用TickData作为源。它们的价格合理,数据具有次秒分辨率。


6

我们已经从Kibot.com购买了12年的日内数据,并对质量非常满意。

关于存储要求:美国所有股票(超过8000个符号)的12年1分钟数据约为100GB。

逐笔数据情况几乎没有什么不同。如果仅记录时间和销售量,则所有美国股票每月大约有30GB的数据。如果您想将出价/要价变化与交易一起存储,则每月约150GB。

我希望这有帮助。如果还有其他需要协助的地方,请告诉我。


1
还是对KiBot @ boe100满意?
JaredBroad13年

@ boe100他们是否同时调整价格和调整价格?他们有beta和delta吗?
user443854 2013年

调整和未调整的数据均可用。每天可以使用HTTP API更新数据或从FTP服务器下载新档案。没有计算Beta或增量。
boe100

@ boe100您可以共享您的数据吗?
Tomasz Waszczyk

2
@Tomasz哈哈,您的评论让我
感动



4

您可以使用yahoo获取每日数据(可管理性更高的数据集),但必须构造URL。请参阅此链接。您不会发出很多小的请求,而是发出更少的大请求。许多免费软件都在使用此功能,因此它们不应该让您失望。

编辑:这个家伙做到了,也许您可​​以看一下他的软件发出的呼叫。


起初我以为该链接看起来很有希望,但是我似乎找不到如何指定历史数据的方式……看起来好像是实时的。我想念什么吗?
rmeador

你是对的。我添加了某人的另一个链接,该链接包含执行历史记录的软件,因此我知道这是可能的。也许看看他的软件发出的呼叫。
jimconstable,2009年

4

雅虎是获取初步免费数据的最简单选择。eckesicle的答案中描述的链接可以很容易地在python代码中使用,但是您首先需要所有的代码。在此示例中,我将使用纽约证券交易所,但这也可以用于不同的交易所。

我使用此Wiki页面下载了具有以下脚本的所有公司代码(我不是非常有才华的Python专家,如果这段代码效率不高,请您谅解):

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()

请注意,此方法的主要缺点是不同公司可以使用不同的数据-在要求的日期(新列出的日期)中不存在数据的公司将为您提供404页。

还请记住,此方法仅适用于初步数据-如果您真的想测试算法,则应该花点钱并使用CSIData或其他可靠的数据提供商


不必在全局名称空间中放入全局声明,尽管如此,它还是会产生良好的响应。
卢克·泰勒

1
服务下降...
Brethlosze

3

为什么不使用Brownian Motion模拟假股票市场呢?

足够的资源来做。易于实现。

http://introcs.cs.princeton.edu/java/98simulation/


1
:-)要使其更真实,您需要创建分数布朗运动,即使那不是很真实,对于最真实的假市场数据,您还需要具有分形时间维度。变得很复杂。最好只是购买真实的市场数据……
lukebuehler 2013年

股票走势不是对数正态也无济于事:)
Paul Milovanov 2016年

3

我使用eodData.com。它的价格相当不错。每月支付30美元,您可以在所有美国交易所获得30天的1,5和60分钟的柱线,而对于大多数其他交易所,则获得1年的EOD数据。


2

我会搜寻finance.google.com(以获取报价)-或finance.yahoo.com。

两者都将返回html页面,供世界范围内的大多数交流使用,包括历史交流。然后,只需解析HTML以提取所需内容即可。

我过去曾经这样做过,并取得了巨大的成功。另外,如果您不介意使用Perl,则CPAN上有多个模块已为您完成了这项工作-即从Google / Yahoo中提取报价。

有关更多信息,请参见报价历史记录。


对perl模块+1,它们使获取数据变得非常容易
Matthew Lock 2013年


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.