我尝试着创造一个股票市场模拟器(也许最终会发展成一个预测AI),但是我在寻找数据方面遇到了困难。我正在寻找(希望是免费的)历史股票市场数据的来源。
理想情况下,它将是一个非常细粒度(秒或分钟间隔)的数据集,包含纳斯达克和纽约证券交易所(如果我有冒险精神,可能还包括其他)的每个符号的价格和交易量。有人知道这类信息的来源吗?
我发现这个问题表明雅虎提供CSV格式的历史数据,但我一直无法找到如何在粗略的检查网站链接得到它。
我也不喜欢在CSV文件中逐个下载数据的想法……我想雅虎会很生气,在我收到几千个请求后就把我关了。
我还发现了另一个问题,让我觉得我中了大奖,但不幸的是,OpenTick网站似乎已经关闭了它的大门……太糟糕了,因为我觉得这正是我想要的。
我还可以使用每天每个符号的开盘/收盘价格和成交量的数据,但我更喜欢所有的数据,如果我能得到的话。还有其他建议吗?
人物介绍:
从雅虎你可以得到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