第二章:投研数据全景——结构化与非结构化的数据江湖
做量化投研,说白了就是跟数据打交道。我经常跟团队里的小朋友说,你策略写得再花哨,数据源选错了,那就是在沙子上盖楼。
这一章,咱们就把投研数据的家底翻一翻。看看哪些数据能用,哪些数据是坑,以及怎么把它们搞到手。
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 知识图谱视角下的数据全景
好了,咱们把数据源都捋了一遍。现在,我用一张图来总结一下。这张图展示了结构化数据和非结构化数据在投研分析中的位置,以及它们之间的关系。
这张图,说白了就是告诉你:结构化数据是骨架,非结构化数据是血肉。两者结合,才能构建出完整的投研知识图谱。
我个人习惯,先搞定结构化数据,把财报和行情清洗干净。然后再用非结构化数据做补充。比如,用新闻数据做情绪因子,用研报数据做分析师预期因子。最后,用知识图谱把这些数据关联起来,形成一个完整的投研分析体系。
最后一个小建议:数据清洗的时间,至少要占整个项目时间的60%。别嫌麻烦。数据干净了,策略才能跑得稳。我曾经因为一个字段没对齐,导致回测结果差了10倍。嗯,从那以后,我再也不敢偷懒了。