【问题标题】:Rblpapi R Bloomberg data downloadRblpapi R 彭博数据下载
【发布时间】:2017-05-17 12:12:59
【问题描述】:

我正在尝试从彭博下载一些外汇远期点数据来计算一些收益率差异。为此,我需要降低定价日期和结算日期之间的天数(即期限)。我已经尝试如下,但这个 dows 不起作用并返回 NA。虽然要点显示:

require(Rblpapi)
blpConnect()
bdh("AUD1M Curncy",field=c("PX_MID","DAYS_TO_MTY"),start.date=as.Date("2017-05-01"))


         date             PX_MID DAYS_TO_MTY
1  2017-05-01 -4.505000000000000          NA
2  2017-05-02 -4.350000000000000          NA
3  2017-05-03 -4.150000000000000          NA
4  2017-05-04 -4.210000000000000          NA
5  2017-05-05 -4.257000000000000          NA
6  2017-05-08 -4.710000000000000          NA
7  2017-05-09 -4.930000000000000          NA
8  2017-05-10 -4.800000000000000          NA
9  2017-05-11 -4.505000000000000          NA
10 2017-05-12 -4.500000000000000          NA
11 2017-05-15 -4.855000000000000          NA
12 2017-05-16 -4.525000000000000          NA
13 2017-05-17 -4.403000000000000          NA

现在彭博社的小伙子告诉我,您不能使用 bdh 下载男高音,但是可以通过使用 excel bdp 公式来下载。因此,我编写了一个循环如下:

mydates <-  c("20170510,"20170511,"20170512,."20170515","20170516
for(i in 1:length(mydates)){print(as.numeric(bdp("AUD1M Curncy",c("PX_BID","DAYS_TO_MTY"),overrides=c("Reference Date"=mydates[i]))))}

这里是印刷品

[1] -4.49 32.00
[1] -4.49 31.00
[1] -4.49 31.00
[1] -4.49 33.00
[1] -4.49 32.00

我的问题是,当我覆盖参考日期时,PX_MID 值确实会发生变化,尽管这些日子都是如此(应该如此)。我的另一个问题是,这是有史以来最无用的代码行......它需要很长时间,因为我必须在 [mydate] 中进行尽可能多的查询。

有没有办法一次性下载上述查询和/或更有效地编写代码?

任何帮助表示赞赏。

亲切的问候

皮埃尔

【问题讨论】:

  • 你不是刚在 GitHub 存储库的问题单中问我们吗?
  • 对不起,德克,我只是想吸引更广泛的观众......我希望我没有违反“礼仪”......
  • 投更广一点没有错,但至少参考之前的尝试以及您已经给出的相当全面的答案。简而言之,您最好的帮助来源可能是在彭博终端上按 F1。
  • 谢谢 Dirk,我的第一个联系点确实是彭博社,我将明确地提供参考。我的问题是关于如何使代码更有效,而不是在 hwo 上下载数据。当您对 bdp 函数进行多次调用时,执行循环只需要很长时间...我只是想知道是否有人对此进行了调查,或者 BDS 是否可以用于此目的....

标签: bloomberg rblpapi


【解决方案1】:

我的猜测是 PX_BID 字段不支持 REFERENCE_DATE 覆盖 而字段DAYS_TO_MTY 可以。如果您查看FLDS 命令 彭博终端你可以看到REFERENCE_DATE同时出现 DAYS_TO_MTY 但不是 PX_BID。正如德克在 cmets 中指出的那样 虽然确认这一点的最佳方法是通过终端上的帮助。

关于您的性能问题,此类查询的方式是 工作是发送多个请求并接收多个响应。如果你看 你可以看到这个回复。

mydates <- c("20170510","20170511","20170512")
for(i in 1:length(mydates)){
    print(as.numeric(bdp("AUD1M Curncy",c("PX_BID","DAYS_TO_MTY"),
                         overrides=c("REFERENCE_DATE"=mydates[i]),
                         verbose=TRUE)))
}

ReferenceDataResponse = {
    securityData[] = {
        securityData = {
            security = "AUD1M Curncy"
            eidData[] = {
            }
            fieldExceptions[] = {
            }
            sequenceNumber = 0
            fieldData = {
                PX_BID = -4.180000
                DAYS_TO_MTY = 32
            }
        }
    }
}
[1] -4.18 32.00
ReferenceDataResponse = {
    securityData[] = {
        securityData = {
            security = "AUD1M Curncy"
            eidData[] = {
            }
            fieldExceptions[] = {
            }
            sequenceNumber = 0
            fieldData = {
                PX_BID = -4.180000
                DAYS_TO_MTY = 31
            }
        }
    }
}
[1] -4.18 31.00
ReferenceDataResponse = {
    securityData[] = {
        securityData = {
            security = "AUD1M Curncy"
            eidData[] = {
            }
            fieldExceptions[] = {
            }
            sequenceNumber = 0
            fieldData = {
                PX_BID = -4.180000
                DAYS_TO_MTY = 31
            }
        }
    }
}
[1] -4.18 31.00

我相信彭博在这里所做的只是使用国内(例如澳大利亚)和 外国(例如美国)假期日历来构建DAYS_TO_MTY。 这些因假期和周末而波动。所以一种方法是 在内部复制该逻辑,根本不使用彭博社。这还有一个好处是不会限制您的数据限制,我似乎记得这是这类查询的一个不幸的副作用。

【讨论】:

  • 谢谢,这是一个非常详细和简洁的答案。我很感激你花时间研究这个。这对我非常有帮助,希望对其他人也有帮助。
  • 很高兴您发现它很有帮助 @user3690243。由于您是 SO 新手,因此值得一试meta.stackexchange.com/questions/5234/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-05
  • 1970-01-01
相关资源
最近更新 更多