问题描述
我正在使用 xbbg
库下载 Bloomberg 数据,只要我坚持使用股票和/或日终数据,一切都会好起来的。但是,如果我尝试获取政府债券的日内数据,则无法找到交易所。
blp.bdib(ticker='US912810SM18 Corp',dt='2020-10-17').tail()
将产生以下内容:
KeyError: 'Cannot find exchange info for US912810SM18 Corp'
但是,如果我使用 blp.bdh
作为一天结束日期,它会发现它没有任何故障。
我应该如何修改 assets.yml 和 exch.yml 文件以使其工作?
解决方法
原始的 BLP API Interface(第 85 页)本身不使用“交换”。该界面仅采用开始和结束日期时间 (UTC),因此由用户决定任何时区调整。
查看 python 源代码,xbbg 会为您进行时区调整(如果可以的话)。它首先检查 assets.yml 中的股票代码,看看它是否可以执行某种匹配,以找到交换代码。交换代码在 exch.yml 中查找,给出时区 (tz)。
我(默认?)assets.yml 中的这个部分有一个条目:
- tickers: [
USGG2YR,USGG10YR,USYC2Y10,USYC1030,USGG30YR
]
exch: IndexUS
这是 exch.yml 中的条目,它给出了交易日的时间:
IndexUS:
tz: America/New_York
allday: [930,1600]
资产查找的替代方法是自己提供交易所名称。由于您的股票代码是 TIPS 债券,它的交易时间可能与 USGG2YR(2 年通用财政部)相同,因此我们可以使用“IndexUS”作为交易所。 'ref' 参数可用于指定交换。
blp.bdib(ticker='US912810SM18 Corp',dt='2021-04-16',ref='IndexUS').tail()
给出结果:
US912810SM18 Corp ...
open high ... num_trds value
2021-04-16 15:55:00-04:00 106.632812 106.671875 ... 34 0.0
2021-04-16 15:56:00-04:00 106.640625 106.656250 ... 34 0.0
2021-04-16 15:57:00-04:00 106.625000 106.625000 ... 31 0.0
2021-04-16 15:58:00-04:00 106.617188 106.757812 ... 33 0.0
2021-04-16 15:59:00-04:00 106.710938 106.757812 ... 32 0.0
[5 rows x 7 columns]
注意。 2020 年 10 月 17 日是星期六(没有数据),无论如何 API 说 Bloomi 只存储过去 140 个工作日的逐笔报价数据(即 6 个月)。
当然,如果您想要定制交易时间,您可以在 exch.yml 中添加您自己的条目,然后引用该名称。
顺便说一句,如果您不需要 OHLC 数据,还有一个 blp.bdtick()
函数(我认为)可以拉回原始刻度数据,而不是柱线。
[编辑] 为了解释为什么它适用于股票,assets.yml 文件列出了更多的股票可能性。政府债券在交易所的交易方式不同,交易时间更符合惯例。与日终价格不同,BDH 只使用彭博为该资产定义的任何收盘时间。