4、函数与公式体系:核心函数(如BDP、BDS、BEH、EQS)的语法、参数与返回值解析
Bloomberg Terminal 的数据提取能力高度依赖其函数与公式体系。在 Excel 插件(Microsoft Office Add-In)和 API 环境中,BDP、BDS、BEH、EQS 是四个最核心的函数,分别对应单点数据提取、历史数据序列、事件驱动数据以及企业级数据查询。理解这些函数的语法结构、参数语义和返回值类型,是构建自动化数据管道、实现深度投研分析的基础。本章将逐一拆解这四个函数的底层逻辑,并结合实际场景演示其组合用法。
上图展示了四个核心函数在数据管道中的位置:BDP 和 BDS 负责从终端获取原始数据,BEH 处理事件类数据,EQS 则用于证券筛选和批量查询。所有数据经过清洗层后,最终输出到用户指定的目标环境。下面逐一深入解析每个函数的语法与参数。
4.1 BDP 函数:单点数据提取的基石
BDP(Bloomberg Data Point)是使用频率最高的函数,用于获取某个证券在某一时刻的特定字段值。其核心语法为:=BDP(Security, Field, Overrides...)。其中 Security 是必选参数,可以是 Bloomberg 证券代码(如 IBM US Equity)、ISIN、CUSIP 或唯一标识符;Field 是必选字段名,如 PX_LAST(最新价)、BID(买价)、EQY_FUND_YIELD(基金收益率)等;Overrides 是可选参数,用于覆盖默认设置,例如指定货币、日期范围或调整方式。
典型示例:获取苹果公司(AAPL US Equity)的当前市盈率(PE Ratio),并指定以人民币计价:
=BDP("AAPL US Equity", "PE_RATIO", "CURRENCY", "CNY")
返回值为数值类型,若字段不可用则返回 #N/A。BDP 的返回值可以是标量、数组或矩阵,取决于字段类型。例如,DVD_HIST(股息历史)会返回一个二维数组。
BDP 的 Overrides 参数是灵活性的关键。常见的 Overrides 包括:EQY_FUND_YIELD 需要指定 FUND_YIELD_METHOD;SETTLE_DT 用于指定结算日;SHOCK 用于压力测试场景。每个字段都有其特定的 Overrides 集合,建议查阅字段参考文档(FLDS)确认。
4.2 BDS 函数:历史数据序列与时间聚合
BDS(Bloomberg Data Set)用于获取历史数据序列,返回按日期排列的多行数据。其语法为:=BDS(Security, Field, StartDate, EndDate, Periodicity, Overrides...)。与 BDP 不同,BDS 的返回值是一个二维数组,第一列为日期,后续列为字段值。Periodicity 参数控制数据频率,可选值包括 D(日)、W(周)、M(月)、Q(季)、Y(年)以及 DAILY、WEEKLY 等。
BDS 的日期参数支持多种格式:"20190101"、"2019-01-01" 或 Excel 日期序列号。若省略结束日期,默认返回最近一年的数据。BDS 还支持 Per 参数(如 Per=1D)和 Fill 参数(如 Fill=Y 表示填充缺失值)。
| 参数名 | 类型 | 必选 | 说明 | 示例值 |
|---|---|---|---|---|
| Security | 字符串 | 是 | 证券标识 | "AAPL US Equity" |
| Field | 字符串 | 是 | 字段名 | "PX_LAST" |
| StartDate | 日期 | 否 | 起始日期 | "20230101" |
| EndDate | 日期 | 否 | 结束日期 | "20231231" |
| Periodicity | 字符串 | 否 | 频率 | "M" |
| Overrides | 键值对 | 否 | 附加设置 | "CURRENCY","USD" |
BDS 的返回值默认按日期升序排列,且包含日期列。若需要调整列顺序或格式,可使用 Excel 的 INDEX 和 MATCH 函数进行后处理。注意,BDS 对数据量有限制,单次请求最多返回 10,000 行,超出部分需分批次提取。
4.3 BEH 函数:事件驱动数据的处理
BEH(Bloomberg Event History)专门用于提取公司行动(Corporate Actions)数据,如分红、拆股、并购、增发等。其语法为:=BEH(Security, EventType, StartDate, EndDate, Overrides...)。EventType 参数支持 DVD(分红)、SPLIT(拆股)、MERGER(并购)、RIGHTS(配股)等。BEH 返回的数据包含事件日期、事件类型、金额、比例等详细信息。
BEH 的返回值结构比 BDS 更复杂,通常包含多列,例如:Ex-Date(除息日)、Record Date(登记日)、Pay Date(支付日)、Dividend Amount(股息金额)、Currency(货币)等。这些字段是固定的,但可通过 Overrides 调整输出格式,例如 DVD_ADJ 用于调整股息(考虑拆股影响)。
风险提示:BEH 返回的事件数据可能包含未确认或已取消的事件。务必检查 EVT_STATUS 字段(状态:确认/待定/取消),避免将未生效的事件纳入分析。此外,不同事件类型的字段结构差异较大,建议先使用 =BEH("AAPL US Equity", "DVD", "20230101", "20231231") 查看原始输出,再设计后续处理逻辑。
4.4 EQS 函数:企业级证券筛选与批量查询
EQS(Equity Screening)函数用于基于条件筛选证券列表,并返回符合条件的证券代码及字段值。其语法为:=EQS(ScreenName, Fields, Overrides...)。ScreenName 是预先定义好的筛选器名称,例如 "US Large Cap"(美国大盘股)、"Global Tech"(全球科技股)。Fields 参数指定需要返回的字段列表,可以是单个字段名或字段名数组。
EQS 的返回值是一个二维数组,第一列为证券代码,后续列为对应的字段值。与 BDP/BDS 不同,EQS 不直接接受证券代码作为输入,而是通过筛选条件动态生成证券列表。这使得 EQS 非常适合构建股票池、行业对比和策略回测。
实战技巧:EQS 的 Overrides 可以动态调整筛选条件。例如,=EQS("US Large Cap", "PX_LAST", "MAX_MARKET_CAP", "50000") 会筛选市值超过 500 亿美元的美国大盘股。但注意,Overrides 的可用性取决于 ScreenName 的定义,并非所有筛选器都支持所有 Overrides。
4.5 案例拆解:构建一个自动化估值监控模型
假设某投资团队需要每日监控标普500成分股中市值前50的股票的估值指标(PE、PB、股息率),并自动输出到 Excel 表格中。该任务需要组合使用 EQS、BDP 和 BDS 函数。
步骤 1:使用 EQS 获取股票池。在 Excel 单元格中输入:=EQS("SPX Index Members", "PX_LAST", "MAX_MARKET_CAP", "50000"),返回市值超过 500 亿美元的标普500成分股列表。假设结果输出在 A2:A51 区域。
步骤 2:使用 BDP 获取实时估值数据。在 B2 单元格输入:=BDP(A2, "PE_RATIO"),下拉填充至 B51。同理,C 列填入 =BDP(A2, "PX_TO_BOOK_RATIO"),D 列填入 =BDP(A2, "DVD_YIELD")。
步骤 3:使用 BDS 获取历史估值序列。在 E2 单元格输入:=BDS(A2, "PE_RATIO", "20230101", "20231231", "M"),返回月度 PE 序列。此步骤用于计算估值分位数,判断当前估值处于历史哪个水平。
步骤 4:数据清洗与格式化。由于 BDS 返回的是数组,需使用 IFERROR 和 INDEX 函数提取特定值。例如,计算 PE 的 5 年分位数:=PERCENTRANK(BDS(A2, "PE_RATIO", "20190101", "20231231", "M"), B2)。
结果对比:该模型运行后,团队发现部分股票的 PE 分位数超过 90%,提示估值偏高。进一步检查发现,这些股票多为科技股,其盈利波动较大,单纯使用 PE 分位数可能产生误导。因此,团队在模型中加入了 EQY_FUND_YIELD 字段,并结合行业平均 PE 进行横向对比,最终优化了筛选逻辑。
风险与代价:该模型依赖 EQS 的筛选结果,若筛选器定义发生变化(如成分股调整),可能导致股票池不完整。此外,BDS 的历史数据请求量较大,可能触发 Bloomberg 的 API 限流,需设置合理的缓存策略。
4.6 常见误区与总结复盘
误区一:混淆 BDP 与 BDS 的返回值类型。BDP 返回标量,BDS 返回数组。若将 BDS 结果直接用于计算,需使用数组公式(Ctrl+Shift+Enter)或配合 INDEX 函数。
误区二:忽略 Overrides 的优先级。当多个 Overrides 冲突时,Bloomberg 以最后一个参数为准。例如,=BDP("AAPL US Equity", "PX_LAST", "CURRENCY", "USD", "CURRENCY", "EUR") 最终返回欧元计价。
误区三:BEH 事件数据未过滤状态。未确认的事件可能导致分红预测偏差。建议在提取后增加筛选条件:=IF(BEH(...)="Confirmed", ...)。
误区四:EQS 筛选器名称拼写错误。EQS 的 ScreenName 区分大小写,且必须与终端中保存的名称完全一致。建议使用 =EQS("SPX Index Members", ...) 前,先在终端中验证筛选器名称。
总结:BDP、BDS、BEH、EQS 构成了 Bloomberg 数据提取的四维框架:BDP 解决“当前值是什么”,BDS 解决“历史值如何变化”,BEH 解决“发生了什么事件”,EQS 解决“哪些证券符合条件”。在实际应用中,应根据需求选择合适的函数,并注意参数类型、返回值结构和数据量限制。建议建立标准化的函数模板库,减少重复输入错误,同时利用 Bloomberg 的 FLDS 字段参考功能,提前验证字段名和 Overrides 的合法性。