【问题标题】:Hourly Data using Bloomberg .Net API使用 Bloomberg .Net API 的每小时数据
【发布时间】:2012-08-20 13:10:28
【问题描述】:

我正在努力使用 .Net API 3.0 从 Bloomberg 获取每小时 OPEN、HIGH、LOW 和 LAST_PRICE 快照的逻辑。我用谷歌搜索了很多次,但没有运气!对此的任何帮助将不胜感激。

我试图在 Bloomberg .Net API (C#) 中找到与以下 VBA BDH 函数等效的函数。

BDH(B5,C6:F6,TODAY()-30,"","BarTp=T","BarSz=120","days=T","Dir=V","Dts=S",,"Quot‌​e=C","UseDPDF=Y","Sort=D",,"cols=5;rows=271") 

其中 B5 是安全名称,C6:F6 包含 OPEN、HIGH、LOW 和 LAST_PRICE 字段。我尝试过 Intraday Bar 请求,但它返回的值与此 BDH 函数返回的值不同。此外,历史数据请求没有 HOURLY 间隔选项,它从 DAILY 间隔开始。

以下是我目前尝试过的代码:

BBService refDataService = session.GetService("//blp/refdata"); 
BBRequest request = refDataService.CreateRequest("IntradayBarRequest"); 
request.Set("security", "SPX INDEX"); 
request.Set("eventType", "TRADE"); 
request.Set("interval", 120); // bar interval in minutes
request.Set("startDateTime", new BBDateTime(2012, 08, 11, 07, 30, 0, 0)); 
request.Set("endDateTime", new BBDateTime(2012, 08, 20, 18, 30, 0, 0)); 
session.SendRequest(request, null);

【问题讨论】:

  • 欢迎!您能否向我们展示一些您迄今为止尝试过的代码,您在哪里遇到了困难?

标签: .net api bloomberg


【解决方案1】:

在 Bloomberg API 发行版中,查看出色的“示例”文件夹。

下面的示例应用程序实现了您的请求。:

\blp\API\APIv3\DotnetAPI\v3.2.9.0\examples\WinForm\C#\SimpleIntradayBarExample

基本上“核心”是这样的:

        Service refDataService = d_session.GetService("//blp/refdata");
        // create intraday bar request 
        Request request = refDataService.CreateRequest("IntradayBarRequest");
        // set request parameters
        request.Set("eventType", "TRADE");
        request.Set("security", "SPX Index");
        DateTime startDate = dateTimePickerStartDate.Value;
        DateTime endDate = dateTimePickerEndDate.Value;
        request.Set("startDateTime", new BDateTime(startDate.Year, startDate.Month, startDate.Day,
                startDate.Hour, startDate.Minute, startDate.Second, 0));
        request.Set("endDateTime", new BDateTime(endDate.Year, endDate.Month, endDate.Day,
            endDate.Hour, endDate.Minute, endDate.Second, 0));
        request.Set("gapFillInitialBar", True);
        request.Set("interval",60);
        // create correlation id
        CorrelationID cID = new CorrelationID(1);
        d_session.Cancel(cID);
        // send request
        d_session.SendRequest(request, cID);
        toolStripStatusLabel1.Text = "Submitted request. Waiting for response...";

在提交之后,您必须获取 Bloomberg 响应,对其进行解析并使用它。

编码愉快。

已编辑:

请找到示例 C# 代码的结果以及 Bloomberg 提出的等效请求。 请记住时区的差异!当您使用 C# 编码时,Bloomberg 库使用 UTC,而使用 Excel 插件时区是您的本地区域。

【讨论】:

  • 感谢 stexcec 的回复,我会试一试的。但是,正如我已经提到的,我已经尝试过 IntradayBarRequest 类型的请求,但是我通过 IntradayBarRequest 获得的结果与从 Excel BDH 函数收到的结果不匹配。您的代码中唯一的区别是“gapFillInitialBar”属性和“CorrelationID”的使用。您认为设置这两项会使 IntradayBarRequest 的结果正确吗?
  • @RavinderSingh:请查找已编辑的帖子。按照示例进行操作,C# 和 Bloomberg Excel 插件是等效的。
  • 哦...我想整个问题都与时区有关。非常感谢您的帮助@stexcec。将检查并相应地投票您的解决方案。
  • @RavinderSingh:你找到解决方案了吗?
  • 是的,它成功了!我尝试了 60 分钟的间隔,现在数据与 Excel 请求数据匹配。只是我们需要小心您指出的时间偏移。例如,Excel 中“8/30/2012 12:00:00 AM”的数据与 C# 结果的“8/29/2012 6:30:00 PM”数据匹配。非常感谢您的帮助。不幸的是,我无法对您的解决方案进行投票(它说我需要至少 15 个声望点才能投票)。
【解决方案2】:

您可能已经解决了这个问题,但您需要注意您所处时代的时区。

Bloomberg 盘中时间都是格林威治标准时间 - 我认为它在某处的文档中说明了这一点。这适用于"IntradayBarRequest""IntradayTickRequest"

注意这与订阅实时数据(例如使用SubscriptionSession)不同,后者使用您的本地时区(在您的彭博终端中设置)。也就是说,当然,除非您使用覆盖 "useGMT"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 2013-03-25
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    相关资源
    最近更新 更多