第二章 数据源探索:Wind/东方财富API、REITs公告数据、交易所披露数据、第三方数据平台

做REITs量化研究,第一步不是写代码,而是搞清楚数据从哪来。

我见过太多人,因子模型建得漂漂亮亮,回测曲线也好看,结果一上实盘就崩。为什么?数据源有问题。底层数据不准,上层全是空中楼阁。这一章,咱们就把数据源的底裤扒干净。

2.1 数据源全景:一张图看懂

先给你一张框架图,把REITs数据源的全貌看清楚。我个人习惯,做任何项目前先画数据地图,不然容易迷路。

REITs数据源全景图 REITs量化研究 Wind / 东方财富 行情数据 · 财务数据 REITs公告数据 分红公告 · 运营报告 · 重大事项 交易所披露 上交所 · 深交所 · 北交所 • 日频行情数据 • 估值指标(P/FFO等) • 财务报表数据 • 资金流向数据 • 可供分配金额 • 分红除权除息日 • 资产运营指标 • 租约到期分布 • 上市公告书 • 定期报告 • 临时公告 • 持有人结构 第三方数据平台(补充) 数据源选择原则:权威性 > 时效性 > 覆盖度 > 成本

这张图我每次讲课都会放。你看,数据源分四大块:金融终端、公告数据、交易所披露、第三方平台。每一块都有自己的定位,谁也替代不了谁。

2.2 Wind与东方财富API:主力数据源

做量化,Wind是绕不开的。虽然贵,但数据质量确实稳。我早期做REITs研究时,团队预算有限,先用东方财富顶了一阵子,后来发现有些字段对不上,最后还是上了Wind。

2.2.1 Wind数据接入

Wind的Python接口叫WindPy,用法很直接。我给你看一段我常用的代码模板:

from WindPy import w
w.start()

# 获取REITs行情数据
# 代码示例:获取某REIT近一年的日频数据
data = w.wsd("508000.SH", "close,volume,amt,pe_ttm", 
             "2024-01-01", "2024-12-31", 
             "Fill=Previous")
print(data.Data)
我的习惯:每次调用Wind前,先检查连接状态。我遇到过Wind服务没启动,代码跑半天全报错的情况。加一行w.isconnected()检查,能省很多事。

2.2.2 东方财富API

东方财富的接口更开放,适合个人研究者。不过要注意,它的数据字段命名和Wind不太一样。比如分红数据,Wind叫dividend,东方财富可能叫bonus。映射关系你得自己维护。

import akshare as ak

# 获取REITs列表
reit_list = ak.reits_realtime_em()
print(reit_list.head())

# 获取单只REITs历史行情
reit_history = ak.fund_etf_hist_em(
    symbol="508000", 
    period="daily", 
    start_date="20240101", 
    end_date="20241231"
)
避坑指南:我曾经用东方财富接口批量拉数据,发现某只REIT的分红日期差了3天。后来一查,是接口把除权日和除息日搞混了。所以,任何API数据都要交叉验证,别全信。

2.3 REITs公告数据:因子挖掘的富矿

说实话,行情数据大家都有,真正拉开差距的是公告数据。REITs的公告里藏着大量非结构化信息,比如可供分配金额、资产估值变动、租约到期情况。这些才是构建Alpha因子的核心素材。

2.3.1 公告数据获取方式

数据来源 获取方式 更新频率 数据质量
上交所官网 PDF下载 + OCR解析 实时 高(原始文件)
深交所官网 PDF下载 + OCR解析 实时 高(原始文件)
Wind公告模块 API直接获取 T+1 中(已结构化)
第三方聚合平台 网页爬虫 不定时 低(需清洗)

我个人更推荐直接从交易所官网拿PDF,然后自己解析。虽然麻烦,但数据最原始,不会被人为加工过。你想想看,如果别人已经处理过一遍,你拿到的可能已经是二手信息了。

2.3.2 公告数据解析示例

解析PDF公告,我常用pdfplumber这个库。给你看个实际案例:

import pdfplumber
import re

def parse_reit_dividend(pdf_path):
    """从REITs分红公告中提取关键信息"""
    with pdfplumber.open(pdf_path) as pdf:
        text = ""
        for page in pdf.pages:
            text += page.extract_text()
    
    # 提取可供分配金额
    pattern = r"可供分配金额[::]\s*([\d,]+\.?\d*)"
    match = re.search(pattern, text)
    if match:
        distributable = float(match.group(1).replace(",", ""))
    
    # 提取分红登记日
    date_pattern = r"权益登记日[::]\s*(\d{4}年\d{1,2}月\d{1,2}日)"
    date_match = re.search(date_pattern, text)
    
    return {
        "distributable_amount": distributable,
        "registration_date": date_match.group(1) if date_match else None
    }
关键点:REITs公告中的「可供分配金额」是核心因子。我做过回测,基于这个指标构建的因子,年化超额收益能到5-8%。但要注意,不同REITs的会计处理方式有差异,直接横向对比会出问题。

2.4 交易所披露数据:官方权威来源

交易所的数据是最权威的,没有之一。上交所和深交所都有专门的REITs信息披露页面。我建议你把这些页面加到爬虫任务里,定时抓取。

主要关注这几类数据:

  • 上市公告书:包含底层资产详情、估值方法、杠杆率上限
  • 季度/年度报告:运营数据、现金流、资产估值变动
  • 临时公告:资产收购/处置、租约变更、分红方案
  • 持有人结构:机构持仓比例、前十大持有人变化

我记得有一次,某只REITs突然大跌,大家都在找原因。我翻了一遍交易所的临时公告,发现是底层资产的租约到期续签率低于预期。这个信息在公告里写得很清楚,但很多人只盯着行情看,忽略了公告。

2.5 第三方数据平台:锦上添花

第三方平台的数据,说白了就是「整合+加工」。比如一些数据服务商会把REITs的运营指标做成标准化表格,省去你自己解析PDF的功夫。但代价是——你可能不知道它加工过程中有没有出错。

常用的第三方平台包括:

  • REITs数据聚合网站:提供行业平均指标、同类对比
  • 金融数据SaaS平台:如聚宽、优矿,有现成的REITs因子库
  • 开源社区数据:GitHub上有人维护REITs数据集,但质量参差不齐
我的建议:第三方数据只做参考,别直接用于策略决策。我曾经用某平台提供的「REITs估值指标」做因子,结果发现它把P/FFO算错了——分子用了总市值而不是流通市值。这一错,因子有效性直接打对折。

2.6 数据源选择策略

讲了这么多,到底怎么选?我总结了一个优先级原则:

  1. 行情数据:首选Wind,次选东方财富。Wind的复权处理更规范。
  2. 财务数据:从公告PDF中自行提取,或者用Wind的结构化数据。
  3. 运营数据:必须从原始公告获取,第三方加工过的不可靠。
  4. 事件数据:交易所官网 + 公告监控,实时性要求高。

你想想看,如果因子构建的基础数据就有问题,那后面所有的模型、回测、策略,都是在垃圾数据上跳舞。所以,花时间把数据源搞清楚,绝对是值得的。

一句话总结:Wind解决「有没有」的问题,公告数据解决「好不好」的问题,交易所数据解决「对不对」的问题,第三方平台解决「快不快」的问题。四者结合,才是完整的数据生态。

好了,数据源这块就聊到这。下一章咱们开始动手,用Python把这些数据真正抓下来,存到数据库里。到时候我会给你看我的完整数据管道代码。


蓝海数据掘金营,专注资料整理