对于你所有的彭博和R用户来说:
我通常没有问题,通过Rblpapi包把彭博数据拉进R,但在试图提取指数级数据时遇到了一个问题。
问题是下面的代码返回错误的结果,因为它开始从1986年(而不是1950年)开始提取数据,并且留下了许多应该填充的值NA。使用excel API,数据可以很好地输入,但是我需要为一些字段添加“day= a”,因为它们直到1950年以后才开始。
可重复的示例(假设您有彭博访问权限):
# Load packages ----------------------------------------------------------
library("Rblpapi")
library("tidyverse")
library("lubridate")
# Connect to Bloomberg --------------------------------------------------
blpConnect()
# Pull equity index-level specific data over time for S&P 500, S&P Mid Cap (400) and S&P Small Cap (600) indices ----------------------
# Index tickers
tickers <- c("SPX Index", "MID Index", "SML Index")
# Bloomberg inputs
myField <- c("PX_LAST", "TRAIL_12M_EPS", "TRAIL_12M_DILUTED_EPS", "BEST_EPS", "PE_RATIO", "BEST_PE_RATIO",
"TRAIL_12M_EBITDA_PER_SHARE", "PX_TO_EBITDA", "PX_TO_BOOK_RATIO", "PX_TO_SALES_RATIO",
"PX_TO_FREE_CASH_FLOW", "EQY_DVD_YLD_12M", "TOT_DEBT_TO_EBITDA", "EV_TO_T12M_SALES", "EV_TO_T12M_EBITDA",
"TRAIL_12M_GROSS_MARGIN", "EBITDA_MARGIN", "TRAIL_12M_OPER_MARGIN", "TRAIL_12M_PROF_MARGIN",
"RETURN_ON_ASSET", "RETURN_COM_EQY", "RETURN_ON_CAP", "NET_DEBT_TO_EBITDA", "CUR_MKT_CAP", "AVERAGE_MARKET_CAP"
)
# Pull data
sp_indices_fundmtls_raw <- as.data.frame(bdh(tickers,
myField,
start.date = as.Date("1950-01-01"),
end.date = Sys.Date(),
include.non.trading.days = TRUE
)
)因为这不起作用,所以我尝试只使用Since来提取数据。同样的问题。然后,我用更少的滴答器尝试了这个公式。
# Bloomberg inputs
myField <- c("PX_LAST", "TRAIL_12M_EPS", "TRAIL_12M_DILUTED_EPS", "BEST_EPS", "PE_RATIO", "BEST_PE_RATIO",
"TRAIL_12M_EBITDA_PER_SHARE", "PX_TO_EBITDA", "PX_TO_BOOK_RATIO", "PX_TO_SALES_RATIO",
"PX_TO_FREE_CASH_FLOW", "EQY_DVD_YLD_12M",
"TOT_DEBT_TO_EBITDA", "EV_TO_T12M_SALES", "EV_TO_T12M_EBITDA"
)虽然效果更好,但还是始于1964年,而不是1950年。同样,excel API可以正常工作,如果数据丢失,就会返回NA,正如我预期的R所做的那样。
这使我认为,必须有一个字段需要一个选项或覆盖才能正确地提取数据。我试着添加
ovrd <- c("PERIODICITY_OVERRIDE" = "D")
# Pull data
sp_indices_fundmtls_raw <- as.data.frame(bdh(tickers,
myField,
start.date = as.Date("1950-01-01"),
end.date = Sys.Date(),
include.non.trading.days = TRUE,
overrides = ovrd
)
)但没有运气。
有人能解决这个问题吗?
谢谢!
发布于 2019-08-20 04:35:26
经过多次试验和错误之后,我想出了一种获取数据的方法。
我创建了一个函数来提取数据:
# Function to pull data
sp_indices_pull_fx <- function(myField, index_ticker) {
df <- as.data.frame(bdh(index_ticker,
myField,
start.date = as.Date("1950-01-01"),
end.date = Sys.Date(),
include.non.trading.days = TRUE
)
)然后我用循环每一个滴答器。例如:
# SP500
sp_500_pull <- lapply(myField, sp_indices_pull_fx, index_ticker = "SPX Index")然后,我将这些结果合并到一个数据框架中:
# Merge
sp_500_fundmtls_raw = Reduce(function(...) merge(..., all = TRUE), sp_500_pull)所以简单地说,起作用的是创建一个函数并为每个单独的滴答器提供这个功能,而不是使用bdh函数一次拉出多个滴答。
https://stackoverflow.com/questions/57562011
复制相似问题