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

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

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

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

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

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


当前回答

我以前的一个项目打算使用EODData的免费下载数据。

其他回答

以秒或分钟为间隔的纳斯达克和纽约证券交易所的每个符号的数据集将是巨大的。

假设这两个交易所总共有4000家公司上市(这可能是一个非常低的数字,因为在纳斯达克上市的公司有3200多家)。对于以秒为间隔的数据,假设每天有6.5个交易小时,那么每个公司每天就有23400个数据点,或者这一天总共有大约93,600,000个数据点。假设一年有200个交易日,仅一年就有大约187.2亿个数据点。

也许你想先从一个小点的集合开始?

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

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

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

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

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

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

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

NASDAQ为每个符号提供10年的历史EOD数据

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

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

人物介绍: 从雅虎你可以得到EOD(一天结束)的历史价格,或实时价格。EOD价格下载非常简单。有关如何获取数据和c#代码示例的解释,请参阅我的博客。

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

另一个选择是日食交易者…它允许您以低至1分钟的粒度记录历史数据,并将价格存储在本地文本文件中。它基本上是从雅虎下载实时数据,有15分钟的延迟。因为我想要一个更健壮的解决方案,而且我正在做一个需要数据的大型学校项目,所以我决定编写自己的数据提要引擎(我在上面提到过)。

示例代码: 下面是演示如何下载实时数据的示例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文件来填充数据集,然后我通过数据集更新我的实际数据库,它基本上可以匹配从雅虎返回的CSV文件的所有列直接到您的数据库(如果您的数据库不支持批量插入CSV数据,如SQLite)。否则,插入数据是一行程序…只需批量插入CSV到您的数据库。

你可以在这里阅读更多关于url格式的信息:http://www.gummy-stuff.org/Yahoo-data.htm