我正在尝试从雅虎财经下载 1 分钟的历史股票价格,包括当天和前一天的价格。
Yahoo(就像 Google)支持最多 15 天的数据,使用以下 API 查询:
http://chartapi.finance.yahoo.com/instrument/1.0/AAPL/chartdata;type=quote;range=1d/csv
问题是,即使市场休市,数据也会不断变化!尝试每分钟左右刷新一次,一些分钟柱会发生变化,甚至从会话开始时也是如此。
另一个有趣的事情是,所有这些查询对于相同的柱线返回的数据都略有不同: http://chartapi.finance.yahoo.com/instrument/2.0/AAPL/chartdata;type=quote;range=1d/csv
将粗体数字替换为 100000,它仍然可以工作,但返回的数据略有不同。
有人明白这个吗?
有没有一个现代的 YQL 查询可以代替这个 API 来获取历史分钟数据?
谢谢!
历史分钟数据并不像我们希望的那样容易获取。我发现收集日内股票价格数据的最经济的方法是开发自动化脚本,记录市场开盘时的价格信息。
与您共享的雅虎数据 URL 类似,彭博社以 JSON 格式维护 1 天盘中价格信息,如下所示:https://www.bloomberg.com/markets/api/bulk-time-series/price/AAPL% 3AUS?timeFrame=1_DAY
一旦您拥有了股票代码列表并理解了一致的语法,您自己输入 URL 约定就显得很容易了。
为了最初到达该 URL,在没有任何猜测/逆向工程的想法的情况下,我只是去了这里 https://www.bloomberg.com/quote/AAPL:US 并在浏览器上使用了开发人员工具,跟踪了一个后台 GET 请求,该请求引导我到达该 URL。如果您可以在其他价格数据相关网站上采用类似的方法,我不会感到惊讶。
您还可以编写脚本来以与互联网一样快的速度跟踪价格数据。我发现一个非常方便的 python 包是 ystockquote
您可以让它每隔几秒请求一次价格数据并将其记录到每日时间序列数据库中。
是的,您可以使用盈透证券的API。这是一致且准确的数据源,支持许多市场和工具。为了使用 IB 数据,您需要安装 IB TWS 或 IB 网关。
这里是外汇“EURUSD”分钟级别数据的代码片段。
from ib_insync import *
util.startLoop()
import pandas as pd
ib = IB()
ib.connect('127.0.0.1', 7497, clientId=31)
contract = Forex('EURUSD')
bars = ib.reqHistoricalData(
contract,
endDateTime='',
durationStr='7 D',
barSizeSetting='1 min',
whatToShow='MIDPOINT',
useRTH=True,
formatDate=1,
keepUpToDate=True)
df = pd.DataFrame(bars).set_index('date')
df = df[['open', 'high', 'low', 'close']] # Filter only OHLC columns
print(df)
请在配置中将已安装的 IB TWS/网关的 API 设置中的端口设置为 7497。 我希望这对某人有帮助。