C# 使用彭博API的棒材数据(即OHLCV)

C# 使用彭博API的棒材数据(即OHLCV),c#,api,bloomberg,C#,Api,Bloomberg,我试图终止旧的数据源流程(在一张工作表上使用Excel BDH公式),而是尝试将一个非常简单的C#console应用程序编码到Bloomberg C#Desktop API 我所需要的就是复制这个BDH公式——它基本上返回给定时间间隔的条形图数据: =BDH(安全性、字段、startdatetime、enddatetime,“BarTp=T”、“BarSz=1”) 我尽了最大努力复制彭博文档中的示例,但无法处理下面提到的错误 我查看了openbloomberg.com,当然还有stackover

我试图终止旧的数据源流程(在一张工作表上使用Excel BDH公式),而是尝试将一个非常简单的C#console应用程序编码到Bloomberg C#Desktop API

我所需要的就是复制这个BDH公式——它基本上返回给定时间间隔的条形图数据:

=BDH(安全性、字段、startdatetime、enddatetime,“BarTp=T”、“BarSz=1”)

我尽了最大努力复制彭博文档中的示例,但无法处理下面提到的错误

我查看了openbloomberg.com,当然还有stackoverflow问题,查找相关示例,但简单地说,最接近的示例是我在复制代码时发现的返回错误

以下代码是我迄今为止完成的总体结构:

using System;
using System.Collections.Generic;
using System.Text;


using CorrelationID = Bloomberglp.Blpapi.CorrelationID;
using Element = Bloomberglp.Blpapi.Element;
using Event = Bloomberglp.Blpapi.Event;
using Message = Bloomberglp.Blpapi.Message;
using Request = Bloomberglp.Blpapi.Request;
using Service = Bloomberglp.Blpapi.Service;
using Session = Bloomberglp.Blpapi.Session;
using SessionOptions = Bloomberglp.Blpapi.SessionOptions;
using BDateTime = Bloomberglp.Blpapi.Datetime;




namespace RequestResponseMultiple
{


class RequestResponseMultiple
{

    public static Request request;
    public static Session session;


    static void Main(string[] args)
    {


        open_one_bb_session();


        // Add securities
        request.Set("security", "GARAN TI Equity");
        request.Set("eventType", "TRADE");
        request.Set("interval", 1); // bar interval in minutes
        request.Set("startDateTime", new BDateTime(2014, 03, 21, 13, 30, 0, 0));
        request.Set("endDateTime", new BDateTime(2014, 03, 21, 15, 30, 0, 0));


        // send request and handle response!
        while (true)
        {

            //... SEND THE REQUEST...
            session.SendRequest(request, new CorrelationID(1));

            //... AND, HANDLE THE RESPONSE!
            bool continueToLoop = true;
            while (continueToLoop)
            {
                Event eventObj = session.NextEvent();
                switch (eventObj.Type)
                {
                    case Event.EventType.RESPONSE:
                        continueToLoop = false;
                        handleResponseEvent(eventObj);
                        break;

                    case Event.EventType.PARTIAL_RESPONSE:
                        handleResponseEvent(eventObj);
                        break;

                    default:
                        handleOtherEvent(eventObj);
                        break;
                }
            } // each eventobj

            Console.ReadKey();



        } // time

    } // void









    private static void open_one_bb_session()
    {
        // open session
        SessionOptions sessionOptions = new SessionOptions();
        sessionOptions.ServerHost = "localhost";
        sessionOptions.ServerPort = 8194;
        session = new Session(sessionOptions);
        if (!session.Start())
        {
            System.Console.WriteLine("Could not start session.");
            System.Environment.Exit(1);
        }

        // open server from the session
        if (!session.OpenService("//blp/refdata"))
        {
            System.Console.WriteLine("Could not open service " + "//blp/refdata");
            System.Environment.Exit(1);
        }

        // get server from the session
        Service refDataSvc = session.GetService("//blp/refdata");

        // Create request from this server
        // request = refDataSvc.CreateRequest("ReferenceDataRequest");
        request = refDataSvc.CreateRequest("IntradayBarRequest");

        // create intraday bar request 
        // request = refDataSvc.CreateRequest("IntradayBarRequest");
    }







    private static void handleResponseEvent(Event eventObj)
    {
        foreach (Message message in eventObj.GetMessages())
        {
            Element ReferenceDataResponse = message.AsElement;

            if (ReferenceDataResponse.HasElement("responseError"))
            {System.Environment.Exit(1);}

            Element securityDataArray =ReferenceDataResponse.GetElement("security");

            int numItems = securityDataArray.NumValues;

            for (int i = 0; i < numItems; ++i)
            {
                Element securityData =securityDataArray.GetValueAsElement(i);
                String security =securityData.GetElementAsString("security");
                int sequenceNumber =securityData.GetElementAsInt32("sequenceNumber");

                if (securityData.HasElement("securityError"))
                {
                    Element securityError =securityData.GetElement("securityError");
                    System.Console.WriteLine("* security =" + security);

                    securityError =securityData.GetElement("securityError");
                    securityError.Print(System.Console.Out);
                    return;
                }

                else
                {
                    Element Bars = message.GetElement("barData").GetElement("barTickData");
                     int nBars = Bars.NumValues;

                     for (int nB = 0; nB < nBars; ++nB) 
                    {
                        Element Bar = Bars.GetValueAsElement(nB);
                        BDateTime time = Bar.GetElementAsDate("time");
                        double open = Bar.GetElementAsFloat64("open");
                        double high = Bar.GetElementAsFloat64("high");
                        double low = Bar.GetElementAsFloat64("low");
                        double close = Bar.GetElementAsFloat64("close");
                        int numEvents = Bar.GetElementAsInt32("numEvents");
                        long volume = Bar.GetElementAsInt64("volume");

                        // Individually output each value
                        System.Console.WriteLine(
                            "security =" +security 
                            + " sequenceNumber =" +sequenceNumber
                            + ", " + time
                            + ", " + open
                            + ", " + high
                            + ", " + low
                            + ", " + close
                            + ", " + volume);
                    } // each Bar
                }

            } // num msg items

        } // msg

    } // void





    private static void handleOtherEvent(Event eventObj)
    {
        System.Console.WriteLine("EventType=" + eventObj.Type);

        foreach (Message message in eventObj.GetMessages())
        {
            System.Console.WriteLine("correlationID=" +message.CorrelationID);
            System.Console.WriteLine("messageType=" +message.MessageType);
            message.Print(System.Console.Out);
            if (Event.EventType.SESSION_STATUS == eventObj.Type && message.MessageType.Equals("SessionTerminated"))
            {
                System.Console.WriteLine("Terminating: " + message.MessageType);
                System.Environment.Exit(1);
            }
        } // each msg

    } // void





} // class

}// n
使用系统;
使用System.Collections.Generic;
使用系统文本;
使用CorrelationID=bloombergglp.Blpapi.CorrelationID;
使用元素=bloombergglp.Blpapi.Element;
使用Event=bloombergglp.Blpapi.Event;
使用Message=bloombergglp.Blpapi.Message;
使用Request=bloombergglp.Blpapi.Request;
使用服务=bloombergglp.Blpapi.Service;
使用Session=bloombergglp.Blpapi.Session;
使用SessionOptions=bloombergglp.Blpapi.SessionOptions;
使用BDateTime=bloombergglp.Blpapi.Datetime;
命名空间RequestResponseMultiple
{
类RequestResponseMultiple
{
公共静态请求;
公开静态会议;
静态void Main(字符串[]参数)
{
打开_one_bb_会话();
//添加证券
请求。集合(“担保”、“GARAN TI股权”);
请求集(“事件类型”、“交易”);
request.Set(“interval”,1);//以分钟为单位的bar interval
请求设置(“startDateTime”,新的BDateTime(2014,03,21,13,30,0,0));
请求.Set(“endDateTime”,新的BDateTime(2014,03,21,15,30,0,0));
//发送请求并处理响应!
while(true)
{
//…发送请求。。。
SendRequest(请求,新的CorrelationID(1));
//…还有,处理好回应!
bool continueToLoop=true;
while(continueToLoop)
{
Event eventObj=session.NextEvent();
开关(事件对象类型)
{
case Event.EventType.RESPONSE:
continueToLoop=false;
HandlerResponseEvent(eventObj);
打破
case Event.EventType.PARTIAL_响应:
HandlerResponseEvent(eventObj);
打破
违约:
handleOtherEvent(eventObj);
打破
}
}//每个eventobj
Console.ReadKey();
}//时间
}//无效
私有静态无效打开\u one\u bb\u会话()
{
//公开会议
SessionOptions SessionOptions=新SessionOptions();
sessionOptions.ServerHost=“localhost”;
sessionOptions.ServerPort=8194;
会话=新会话(会话选项);
如果(!session.Start())
{
System.Console.WriteLine(“无法启动会话”);
系统、环境、出口(1);
}
//从会话中打开服务器
if(!session.OpenService(“//blp/refdata”))
{
System.Console.WriteLine(“无法打开服务”+“//blp/refdata”);
系统、环境、出口(1);
}
//从会话中获取服务器
Service refDataSvc=session.GetService(“//blp/refdata”);
//从此服务器创建请求
//request=refDataSvc.CreateRequest(“ReferenceDataRequest”);
request=refDataSvc.CreateRequest(“IntradayBarRequest”);
//创建日内酒吧请求
//request=refDataSvc.CreateRequest(“IntradayBarRequest”);
}
私有静态无效句柄响应事件(Event eventObj)
{
foreach(eventObj.GetMessages()中的消息)
{
元素ReferenceDataResponse=message.AsElement;
if(ReferenceDataResponse.HasElement(“responseError”))
{System.Environment.Exit(1);}
Element securityDataArray=ReferenceDataResponse.GetElement(“安全”);
int numItems=securityDataArray.NumValues;
对于(int i=0;i