首页 文章

Rblpapi:使用BDH仅使用一个日期列来提取多个证券的历史数据

提问于
浏览
1

我试图在一个日期范围内提取几种证券的历史数据 . 我可以使用下面的代码获取我想要的数据,但结果列表会为每个安全性生成一个日期列 . 我想在右侧列中的列表中的每个安全性的第一个,最左边的列中找到日期,然后是安全性字段数据(px_last等) . 我知道在BBG中使用excel我可以使用覆盖(dts = H)隐藏日期字段,但我希望列表中最左边的列填充日期,

sec <- c("SPX Index","SX5E Index")
lb <- 5
startdate <- Sys.Date() - lb
opt <- c("periodicitySelection"="DAILY","nonTradingDayFillOption"="NON_TRADING_WEEKDAYS","nonTradingDayFillMethod"="PREVIOUS_VALUE")
dat <- bdh(sec,fields="px_last",start.date = startdate,options=opt)

返回:

$`SPX Index`
        date px_last
1 2016-12-19 2262.53
2 2016-12-20 2270.76
3 2016-12-21 2265.18
4 2016-12-22 2261.03

$`SX5E Index`
        date px_last
1 2016-12-19 3257.85
2 2016-12-20 3279.41
3 2016-12-21 3270.75
4 2016-12-22 3262.11

我想看到三列而不是四列 . Col1是日期,Col2是SPX索引px_last,Col3是SX5E索引px_last . 谢谢

1 回答

  • 1

    之后您只需手动合并 .

    首先重做代码:

    R> library(Rblpapi)
     Rblpapi version 0.3.5 using Blpapi headers 3.8.8.1 and run-time 3.8.8.1.
     Please respect the Bloomberg licensing agreement and terms of service.
     R> library(xts)
     Loading required package: zoo 
    
     Attaching package: ‘zoo’ 
    
     The following objects are masked from ‘package:base’:
    
         as.Date, as.Date.numeric
    
     R> sec <- c("SPX Index","SX5E Index") 
     R> lb <- 5     
     R> startdate <- Sys.Date() - lb  
     R> opt <- c("periodicitySelection"="DAILY",  
     +          "nonTradingDayFillOption"="NON_TRADING_WEEKDAYS",  
     +          "nonTradingDayFillMethod"="PREVIOUS_VALUE")  
     R> dat <- bdh(sec,fields="px_last",start.date = startdate,options=opt)
     R> str(dat)          
     List of 2  
      $ SPX Index :'data.frame':     5 obs. of  2 variables:
       ..$ date   : Date[1:4], format: "2016-12-26" "2016-12-27" "2016-12-28"  ...
       ..$ px_last: num [1:5] 2264 2269 2250 2249 2239
      $ SX5E Index:'data.frame':     5 obs. of  2 variables:   
       ..$ date   : Date[1:4], format: "2016-12-26" "2016-12-27" "2016-12-28" ...
       ..$ px_last: num [1:5] 3274 3279 3279 3272 3291
     R>
    

    我们看到我们有一个 data.frame 类型的列表 . 我们将制作一个 xts 对象列表(这就是我们上面加载该包的原因),然后合并列表元素并设置列名:

    R> datxts <- lapply(dat, function(d) xts(d[,-1], order.by=as.Date(d[,1])))
     R> res <- do.call(merge, datxts)  
     R> colnames(res) <- sec   
     R> res   
                SPX Index SX5E Index 
     2016-12-26   2263.79    3273.97  
     2016-12-27   2268.88    3278.53
     2016-12-28   2249.92    3278.72
     2016-12-29   2249.26    3271.76
     2016-12-30   2238.83    3290.52 
     R>
    

相关问题