我尝试着创造一个股票市场模拟器(也许最终会发展成一个预测AI),但是我在寻找数据方面遇到了困难。我正在寻找(希望是免费的)历史股票市场数据的来源。

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

我发现这个问题表明雅虎提供CSV格式的历史数据,但我一直无法找到如何在粗略的检查网站链接得到它。

我也不喜欢在CSV文件中逐个下载数据的想法……我想雅虎会很生气,在我收到几千个请求后就把我关了。

我还发现了另一个问题,让我觉得我中了大奖,但不幸的是,OpenTick网站似乎已经关闭了它的大门……太糟糕了,因为我觉得这正是我想要的。

我还可以使用每天每个符号的开盘/收盘价格和成交量的数据,但我更喜欢所有的数据,如果我能得到的话。还有其他建议吗?


当前回答

我们从Kibot.com购买了12年的日内数据,对其质量相当满意。

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

与滴答滴答的数据情况略有不同。如果只记录时间和销售额,那么所有美国股票每月大约需要30GB的数据。如果你想把买入价/卖出价的变化和交易一起存储,你可以期望每个月150GB。

我希望这能有所帮助。如果还有什么我能帮忙的,请告诉我。

其他回答

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

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

它提供了一个不错的API,数据(据我所知)非常干净。

当你订阅时,你会得到10年的历史,然后每晚更新。

他们还为你处理各种棘手的事情,比如分割和股息。如果你还没有发现数据清理的乐趣,你不会意识到你有多需要它,直到你的自动交易系统(ATS)第一次认为某只股票真的非常非常便宜,只是因为它以2:1的比例分割,而你没有注意到。

对于无生存偏差的数据,我找到的唯一可靠来源是QuantQuote (http://quantquote.com)

数据以分钟、秒或滴答的分辨率,链接到他们的历史股票数据。

上面有一个关于kibot的建议。在从他们那里购买之前,我会快速搜索谷歌,你会发现很多这样的帖子,关于kibot数据质量问题的警告。这也说明,他们所谓的无生存偏差sp500在14年里只有570个符号。这几乎是不可能的,sp500每月改变1-2个符号....

让我加上我的2美分,我的工作是为对冲基金获得良好和干净的数据,我看过相当多的数据提要和历史数据提供商。这主要与美国股市数据有关。

首先,如果你有钱,不要从雅虎下载数据,直接从CSI数据中获取数据,这是雅虎获得EOD数据以及AFAIK的地方。他们有一个API,你可以把数据提取成你想要的任何格式。我想每年的数据订阅费用大概是100美元。

从免费服务下载数据的主要问题是,你只得到仍然存在的股票,这被称为生存偏差,如果你看很多股票,可能会给你错误的结果,因为你只包括迄今为止仍然存在的股票,而不是那些已经退市的股票。

为了处理一些盘中数据,我会去IQFeed看看,他们提供了几个api来提取历史数据,尽管他们主要是一个实时feed的设备。但是这里有相当多的选择,一些代理甚至通过他们的api提供历史数据下载,所以选择你喜欢的。

BUT usually all of this data is not very clean, once you really start back testing you'll see that certain stocks are missing or appear as two different symbols, or stock splits are not properly accounted for, etc. And then you realize that historical dividend data is need as well and so you start running in circles, patching data together from 100 different data sources and so on. So to start with a "discount" data feed will do, but as soon as you run more comprehensive backtests you might run into problems depending on what you do. If you just look at, let's say, the S&P 500 stocks this will not be so much a problem though and a "cheap" intraday feed will do.

但你找不到免费的盘中数据。我的意思是你可能会找到一些例子,我确定在某个地方有5年的微软滴答数据,但这不会让你走得太远。

然后,如果你需要真正的东西(二级订单簿,所有交易都发生过),一个“负担得起的”,但很好的选择是Nanex。他们实际上会给你一个装有tb数据的驱动器。如果我没记错的话,每年大约需要3000 - 4k美元的数据。但相信我,一旦你明白获得好的盘中数据有多难,你就不会认为这是一大笔钱。

并不是要打击你的信心,但要获得好的数据是很难的,事实上,很难到许多对冲基金和银行每月花费数十万美元来获得他们可以信任的数据。同样,你可以从某个地方开始,然后从那里开始,但最好能在上下文中看到它。


编辑:上面的答案来自我自己的经历。这篇来自加州理工学院的关于可用数据来源的文章将提供更多的见解,特别推荐QuantQuote。

不幸的是,免费的历史股票数据很难获得。现在opentick已经死了,我不知道还有其他提供商。

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

我们使用TickData作为源。它们的价格合理,而且数据的分辨率低于秒级。

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

我使用这个维基页面下载了以下脚本(我不是一个很有天赋的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或其他值得信赖的数据供应商