第二章:投研数据全景——结构化与非结构化的数据江湖

做量化投研,说白了就是跟数据打交道。我经常跟团队里的小朋友说,你策略写得再花哨,数据源选错了,那就是在沙子上盖楼。

这一章,咱们就把投研数据的家底翻一翻。看看哪些数据能用,哪些数据是坑,以及怎么把它们搞到手。

2.1 结构化数据:财报与行情

结构化数据,就是那种规规矩矩、一行一列的数据。你打开Excel看到的那种。这类数据是量化分析的基石。

2.1.1 财报数据

财报数据,说白了就是上市公司的成绩单。利润表、资产负债表、现金流量表,这三张表是核心。

关键字段

  • 营业收入、净利润、每股收益(EPS)
  • 总资产、总负债、净资产
  • 经营活动现金流净额

数据频率

  • 季报(每年4次)
  • 中报(半年一次)
  • 年报(每年一次)

重要提醒:财报数据有滞后性。年报通常在次年4月底前才出齐。你看到的Q4数据,可能已经是4个月前的了。

我个人习惯,拿到财报数据后,第一件事不是算指标,而是做数据对齐。不同公司的财报截止日可能不同,有的用自然年,有的用财年。嗯,这里要注意,对齐错了,后面所有分析都是白费。

2.1.2 行情数据

行情数据就是股票的价格和成交量。这是最基础、也是最重要的数据之一。

常见字段

  • 开盘价、最高价、最低价、收盘价(OHLC)
  • 成交量、成交额
  • 涨跌幅、换手率

数据频率

  • Tick级(逐笔成交)
  • 分钟级(1分钟、5分钟、30分钟)
  • 日线、周线、月线

我在项目中遇到过一个问题:某只股票在盘中突然停牌,然后复牌时价格跳空。如果你用的数据源没有处理复权,那你的回测结果会惨不忍睹。所以,复权处理是行情数据清洗的必修课。

小技巧:做回测时,建议使用后复权数据。它能真实反映股票的历史价格走势。前复权更适合看当前价格。

2.2 非结构化数据:新闻、研报与公告

非结构化数据,就是那些没有固定格式的数据。比如新闻、研报、公告。这类数据信息量大,但处理起来也最头疼。

2.2.1 新闻数据

新闻数据,说白了就是市场情绪的温度计。一条突发新闻,可能让股价瞬间涨停或跌停。

数据来源

  • 财经门户(东方财富、新浪财经)
  • 官方媒体(新华社、人民日报)
  • 行业垂直媒体

关键字段

  • 标题、正文、发布时间
  • 来源、作者
  • 相关股票、行业标签

我曾经用新闻数据做过一个情绪因子。发现一个规律:负面新闻的冲击力,远大于正面新闻。一条利空消息,可能让股价连跌三天。而一条利好,可能半天就消化完了。为什么会这样?因为人性本贪,但更怕亏。

2.2.2 研报数据

研报是券商分析师写的报告。里面有他们对公司、行业、宏观经济的看法。研报的价值在于,它包含了分析师的专业判断。

常见类型

  • 公司深度报告
  • 行业周报/月报
  • 策略报告
  • 调研纪要

关键字段

  • 标题、摘要、正文
  • 评级(买入、增持、中性、减持)
  • 目标价、盈利预测

避坑指南:我曾经踩过一个坑。某券商研报里写的目标价,用的是未来12个月的预测。但另一家券商用的是未来6个月。如果你不做时间对齐,直接比较目标价,那结论就是错的。

2.2.3 公告数据

公告是上市公司必须公开披露的信息。这是最权威的数据源之一。因为造假成本极高。

常见类型

  • 定期报告(年报、中报、季报)
  • 临时公告(重大合同、股权变动、诉讼)
  • 股东大会决议

关键字段

  • 公告编号、标题、正文
  • 公告日期、生效日期
  • 相关方、交易金额

我建议,做事件驱动策略时,优先使用公告数据。因为新闻可能滞后,但公告是第一时间发布的。你想想看,公司签了个大合同,公告一发,股价可能立马反应。

2.3 数据源与API介绍

数据源选得好,事半功倍。选得不好,天天加班洗数据。下面是我常用的几个数据源。

2.3.1 国内数据源

数据源 类型 特点 费用
Wind 综合 数据最全,覆盖A股、港股、债券、期货 高(年费数万)
聚宽 量化平台 提供API,适合回测和实盘 部分免费
Tushare 开源 免费,但数据质量参差不齐 免费
东方财富Choice 综合 性价比高,适合中小机构 中等

2.3.2 国外数据源

数据源 类型 特点 费用
Bloomberg 综合 全球最权威,但贵得离谱 极高
Quandl 开源 提供免费和付费数据 部分免费
Alpha Vantage API 免费,适合小规模实验 免费
Yahoo Finance 免费 数据不稳定,经常断流 免费

我的建议:如果你刚开始做量化,先用Tushare或聚宽练手。等策略跑通了,再考虑上Wind或Bloomberg。别一上来就花大价钱买数据,万一策略不行,钱就白花了。

2.3.3 API调用示例

下面是一个用Python调用聚宽API获取行情数据的例子。代码很简单,但很实用。

# 聚宽API示例:获取平安银行日线数据
from jqdatasdk import *

# 登录(需要注册账号)
auth('your_username', 'your_password')

# 获取数据
df = get_price(
    '000001.XSHE',  # 平安银行
    start_date='2023-01-01',
    end_date='2023-12-31',
    frequency='daily',  # 日线
    fields=['open', 'close', 'high', 'low', 'volume']
)

print(df.head())

这段代码,说白了就是三件事:登录、请求、拿数据。但要注意,聚宽的API有调用频率限制。我刚开始用的时候,写了个循环去拉1000只股票的数据,结果直接被封了半小时。嗯,后来学乖了,每次请求之间加个sleep。

2.4 知识图谱视角下的数据全景

好了,咱们把数据源都捋了一遍。现在,我用一张图来总结一下。这张图展示了结构化数据和非结构化数据在投研分析中的位置,以及它们之间的关系。

投研数据全景图 结构化数据 财报数据 利润表 | 资产负债表 | 现金流量表 频率:季报/中报/年报 滞后性:1-4个月 行情数据 OHLC | 成交量 | 成交额 频率:Tick/分钟/日/周/月 需处理:复权、停牌 其他结构化数据 宏观经济指标 | 行业数据 股东信息 | 龙虎榜 非结构化数据 新闻数据 标题 | 正文 | 发布时间 来源:财经门户/官方媒体 用途:情绪分析、事件驱动 研报数据 标题 | 摘要 | 评级 | 目标价 类型:深度/周报/策略/调研 需对齐:评级标准、预测周期 公告数据 定期报告 | 临时公告 | 决议 权威性最高,适合事件驱动 知识图谱 关联融合 数据源:Wind、聚宽、Tushare、Bloomberg、Quandl等

这张图,说白了就是告诉你:结构化数据是骨架,非结构化数据是血肉。两者结合,才能构建出完整的投研知识图谱。

我个人习惯,先搞定结构化数据,把财报和行情清洗干净。然后再用非结构化数据做补充。比如,用新闻数据做情绪因子,用研报数据做分析师预期因子。最后,用知识图谱把这些数据关联起来,形成一个完整的投研分析体系。

最后一个小建议:数据清洗的时间,至少要占整个项目时间的60%。别嫌麻烦。数据干净了,策略才能跑得稳。我曾经因为一个字段没对齐,导致回测结果差了10倍。嗯,从那以后,我再也不敢偷懒了。

专注资料整理