c# - Bloomberg .Net API - 多种证券的响应数据

标签 c# .net bloomberg

假设我们正在使用 .Net API 发送针对多种证券的彭博历史数据请求,是否有任何优雅的方法来分离/识别每种证券的响应数据?

我知道响应中有一个字段 sequenceNumber 但不确定它是如何映射到每个证券的。我的代码片段如下。

Service refDataService = session.GetService("//blp/refdata");
Request request = refDataService.CreateRequest("HistoricalDataRequest");
Element securities = request.GetElement("securities");
securities.AppendValue("EURUSD CURNCY");
securities.AppendValue("USDJPY CURNCY");
securities.AppendValue("GBPUSD Curncy");
securities.AppendValue("USDCHF Curncy");

Element fields = request.GetElement("fields");                
fields.AppendValue("OPEN");
fields.AppendValue("HIGH");
fields.AppendValue("LOW");
fields.AppendValue("PX_LAST");

request.Set("periodicityAdjustment", "CALENDAR");  
request.Set("periodicitySelection", "DAILY");
request.Set("startDate", DateTime.Now.AddDays(-30).ToString("yyyyMMdd"));
request.Set("endDate", Convert.ToString(null));

session.SendRequest(request, null);

while (true)
{
Event eventObj = session.NextEvent();
foreach (Message msg in eventObj.GetMessages()) 
{
    if (msg.MessageType.Equals(Name.GetName("HistoricalDataResponse")))
    {
        Element secDataArray = msg.GetElement("securityData");          
        Element securityData = secDataArray.GetElement(3);
        for (int index = 0; index < securityData.NumValues; index++)
        {
            Element fieldData = securityData.GetValueAsElement(index);
            Datetime time = fieldData.GetElementAsDate("date");
            decimal? open = fieldData.HasElement("OPEN") ? Convert.ToDecimal(fieldData.GetElementAsFloat64("OPEN")) : new decimal?();
            decimal? high = fieldData.HasElement("HIGH") ? Convert.ToDecimal(fieldData.GetElementAsFloat64("HIGH")) : new decimal?();
            decimal? low = fieldData.HasElement("LOW") ? Convert.ToDecimal(fieldData.GetElementAsFloat64("LOW")) : new decimal?();
            decimal? close = fieldData.HasElement("PX_LAST") ? Convert.ToDecimal(fieldData.GetElementAsFloat64("PX_LAST")) : new decimal?();
        }
    }
}
}

最佳答案

返回的 sequenceNumber 值对应于您通过调用 AppendValue 添加证券的顺序

securities.AppendValue("EURUSD CURNCY");  // Sequence number 1
securities.AppendValue("USDJPY CURNCY");  // Sequence number 2
securities.AppendValue("GBPUSD Curncy");  // Sequence number 3
securities.AppendValue("USDCHF Curncy");  // Sequence number 4

根据 BLPAPI: Developer’s Guide :

Security sequence number, specifying the position of the security in the request.

关于c# - Bloomberg .Net API - 多种证券的响应数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12315754/

相关文章:

c# - Bloomberg API - 使用 .Net API 获取底层证券上的 FUT_CHAIN

c# - 在虚拟化 WPF TreeView 中滚动非常不稳定

c# - MVC4中的Html.Serialize在哪里

c# - 在 Windows 服务中处理 MSMQ 消息

c# - LINQ:查询集合中的集合

java - 使用 java 将 Element 对象写入文件

VBA:WAITING Bloomberg BDP 通话完成

c# - 什么是等效于 SQL "in"语句的 lambda?

c# - 在内存中提取tgz文件并在C#中访问文件

c# - 使 Entity Framework 只读