Java API 用于金融数据

11

我正在进行我的硕士项目,需要收集一家特定公司的大量财务数据。

例如:假设是“苹果”公司。我想要历史价格、当前市场价格/比率、季度业绩和分析师呼叫记录。

我在StackOverflow看到了一些关于YQL的帖子。我认为我可以免费从Yahoo Finance获取当前价格和各种比率。然而,对于其他数据,有像汤森路透、彭博等公司,但它们似乎有一个封闭的系统。

我在哪里可以获得API以获取各种数据?有没有任何东西可以帮助我获取这些数据?无论是什么格式的原始数据,我都可以接受。你们能推荐任何API吗?

10个回答

4

正在开发的一个Java库是IdylFin,它具有下载历史数据的便利方法。

免责声明:我是这个库的作者。


3

如果您真的想要大量的数据,那么您可能需要付费。Stephen说得很对。

然而,在我的私人项目中,我成功地使用了这里介绍的“API”:

http://www.gummy-stuff.org/Yahoo-data.htm

我经常下载标普500指数中的所有股票数据,但是如果您想发布这些数据,请与雅虎联系,您可能需要获得许可证。

顺便说一句,所有这些数据都以CSV格式存储,所以请获取一个CSV阅读器/转换器等工具,这些工具很容易找到。


你能分享一下yahoo-data.htm的源代码吗? - Tomasz Waszczyk

2

1

谢谢。有没有编程的方法? - Kunal
编写一个解析器从HTML中提取数据非常简单。 - Joel
@Joel: 对于CSV格式来说,甚至更加容易。 - Clyde Lobo

1

好的数据并非免费。就是这么简单。原因在于所有数据最终都是从像纽约证券交易所或纳斯达克这样的交易所获得许可。

如果你能拿到一些钱,可以从Automated Trader获取高分辨率历史数据。

你还应该与你学校的商学院交流。如果他们有金融硕士/博士生或金融工程硕士生,他们应该为他们的学生提供大量高分辨率数据的存储库。

如果你把你的问题描述得更详细,我可以提供更详细的答案。


1

我之前处理过这个问题。

对于价格历史数据,我使用了雅虎的API。当我说API时,我是指通过HTTP请求获取价格历史数据的CSV文件。不幸的是,这只能让你获得一个公司在你指定的时间范围内的数据。所以我首先列出了所有股票代码,并对其进行了迭代,为每一个调用雅虎的API。你也可以找到一个列出股票代码的网站,并定期下载该列表。

如果你这样做得太频繁且太快,他们的网站可能会屏蔽你。我添加了一些代码来限制我的HTTP请求频率。我还持久化了我的数据,这样我就不必再次获取它。我总是持久化原始/未经处理的数据,因为你的代码可能会发生改变,使得难以使用其他形式的数据。除了Avro/Thrift可能是个例外,因为它们支持模式演化。

对于其他类型的数据,你可能没有任何可以提供漂亮CSV文件的API。我多次面对这个问题。以下是我的建议。

有时候一个网站在后台调用RESTful web服务,你可以通过使用Firebug来发现这一点。有时它也需要特定的标头,你也可以使用Firebug来发现它们。

如果你被迫使用HTML,有几个Java库可以帮助你。apache.commons.http是一个库,可以轻松地进行HTTP请求并处理其响应。Google也有一个http-client jar,值得研究一下。
JSoup API在解析HTML数据方面非常出色,即使格式不正确,也不是XHTML。它也适用于XML。与遍历或访问JSoup层次结构中的节点不同,学习XPath并使用它来选择所需内容。如果网站定期更改其网页格式,则使用JSoup应该很容易应对和修复,否则会很困难。
如果你必须使用JSON,请使用Jackson库来解析它。
如果你必须使用CSV,请使用OpenCSV库来解析和处理它。
此外,始终将数据存储为原始数据,并避免进行不必要的HTTP请求,以便避免被阻止。我曾经被Google Finance封锁过几次,他们确实可以这样做。幸运的是,阻塞会过期。你甚至可能想在请求之间添加随机等待时间。

1

0

你真正需要的是一个免费的金融数据服务...而不是一个API。

问题在于这些数据是有价值的商品。提供商可能花了很多钱来建立他们的系统,而且维护这些系统所需的成本更高。他们自然希望回报他们的投资,其中一部分是通过销售他们的数据/服务来实现的。

(在Yahoo、Google等公司的情况下,数据是从其他人那里购买的,并且Yahoo/Google将受到他们如何使用数据的限制。这些限制将反映在各自的服务条款中;例如,您只能“用于个人使用”访问服务)。

我认为你最好的选择是联系一些金融数据提供商,询问他们是否可以为你提供免费访问(受任何他们想要施加的限制)到他们的数据服务。你可能会有好运气......


嘿,谢谢Stephen。它是一个金融数据服务的API,就像我们可以使用API获取Twitter Feeds一样。我知道这需要花费他们的成本。我可以支付一些费用给他们。有任何已知的公司吗? - Kunal
如果您只需要当前股价(10分钟延迟),以及历史上每日的收盘价格(不包含盘中数据),那么您可能可以免费获得它。如果您需要实时的股价和盘中交易数据历史记录,那么您可能需要从彭博社或证券交易所购买。 - Rune Aamodt

0

嗨。我看到了那个。我想要使用那些数据进行后端处理。看起来财务小工具只适用于HTML。 - Kunal
哎呀...其实这是基于JSON的服务。您可以在服务层中调用此服务。我要求您查看小部件,这样您就会知道是否获得所需数据。 - uncaught_exceptions
谢谢。你的意思是说http://goo.gl/jsrFl吧。不是更多的投资组合管理吗? - Kunal
是的,这就是我使用它的原因。投资组合管理需要股票当前价格的数据,对吧 :)。请查看标有“检索特定职位”的部分。 - uncaught_exceptions
检索特定职位要检索特定职位,请将该职位的股票代码附加到Feed URL。例如,要检索经过身份验证的用户对GOOG的持仓,请向以下URL发送HTTP GET请求:http://finance.google.com/finance/feeds/default/portfolios/1/positions/NASDAQ%3AGOOGGoogle Finance将响应HTTP 200 OK状态代码和标准Atom 1.0条目,其中包含与上面的职位Feed中相同格式的指定职位条目。 - uncaught_exceptions
此 API 不再可用。 - Ishmael

0

这是我每周至少一次会自责的事情。早在互联网只有Gopher等时,你可以登录纳斯达克和纽约证交所的FTP服务器,并免费下载各种股票历史文件。 我曾经这样做过,甚至已经将其导入到数据库中并进行了一些操作.....但那可能是10台电脑之前的事情了,现在已经消失了。


他们为什么现在停止做那件事了? - Kunal
2
因为他们发现可以向人们收取很多钱。 - mezmo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接