C#调用彭博Historical API查询债券价格时如何获取对应价格来源
解决方案
你遇到的报错是因为PRICING_SOURCE和FEED_SOURCE属于静态参考数据字段,仅支持在ReferenceDataRequest(参考数据请求)中返回,不支持在HistoricalDataRequest(历史数据请求)中作为返回字段查询,所以会返回NOT_APPLICABLE_TO_HIST_DATA的错误。
可以通过以下两种方案解决:
- 方案一:拆分两次请求
- 保留原有历史数据请求,只请求价格相关字段(
px_last、px_bid等)获取历史时间序列价格 - 新增一笔参考数据请求,传入相同的债券代码列表,查询
PRICING_SOURCE和FEED_SOURCE字段,拿到对应债券的默认定价来源后和历史价格数据做关联即可
- 保留原有历史数据请求,只请求价格相关字段(
- 方案二:查询对应价格的历史来源字段
如果需要获取每个历史时间点对应的价格来源,可以直接在历史数据请求中添加价格对应的历史来源字段,比如和px_last对应的是PX_LAST_SRC,和px_bid对应的是PX_BID_SRC,这类字段属于合法历史字段,不会触发报错。你可以在彭博终端通过FLDS命令查询你需要的价格对应的历史来源字段名。
调整后的代码示例
Service refDataService = d_session.GetService("//blp/refdata"); // 构造历史数据请求 Request request = RefDataService.CreateRequest("HistoricalDataRequest"); // 设置查询的证券列表 Element securities = request.GetElement("securities"); foreach (string sec in ticker){ securities.AppendValue(sec); } // 设置查询字段 Element fields = request.GetElement("fields"); fields.AppendValue("px_last"); // 替换为对应价格的历史来源字段 fields.AppendValue("PX_LAST_SRC"); // 若需要指定定价源作为请求覆盖参数,可添加如下配置 Element overrides = request.GetElement("overrides"); Element override1 = overrides.AppendElement(); override1.SetElement("fieldId", "PRICING_SOURCE"); override1.SetElement("value", "BVAL"); // 示例:指定使用BVAL定价源 // 发送请求 d_session.SendRequest(request, null);
注意:如果需要获取不同时间点对应的不同定价源信息,优先使用方案二的历史来源字段,可以直接返回对应时点的价格来源信息。
内容的提问来源于stack exchange,提问作者stexcec
相关产品推荐
相关产品推荐

