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

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

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

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

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

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


当前回答

Mathematica现在也提供访问当前和历史股票价格,见 http://reference.wolfram.com/mathematica/ref/FinancialData.html ,如果你刚好有一本的话。

其他回答

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

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

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

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

雅虎是获得初步免费数据的最简单选择。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或其他值得信赖的数据供应商

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

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

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

让我加上我的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。

这个答案不再准确,因为雅虎feed已经不复存在

使用雅虎的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