第三章 因子分类与数据获取:基本面因子、技术面因子、另类因子、常见数据源介绍

做多因子模型,说白了就是找一堆能解释股票涨跌的「特征」。但特征从哪来?怎么分?数据又去哪搞?

这一章,我带你把这些基础问题彻底理清楚。嗯,先看一张图,帮你建立整体认知。

多因子模型数据生态 基本面因子 技术面因子 另类因子 市盈率 PE 市净率 PB ROE / 营收增速 资产负债率 动量因子 反转因子 成交量 / 换手率 波动率 舆情因子 供应链数据 卫星图像 搜索热度 常见数据源:Tushare / Wind / 聚宽

3.1 基本面因子:最传统的「硬数据」

基本面因子,就是看一家公司到底值多少钱、赚不赚钱。我刚开始做量化时,觉得技术面才是王道,后来被市场教育了——没有基本面支撑的因子,回测再漂亮也是空中楼阁。

常见的几类:

  • 估值类:市盈率(PE)、市净率(PB)、市销率(PS)。说白了就是「这股票贵不贵」。
  • 盈利类:ROE(净资产收益率)、毛利率、净利率。看公司赚钱能力。
  • 成长类:营收增速、净利润增速。看公司是不是在长大。
  • 财务健康类:资产负债率、流动比率、现金流。别踩到财务造假的雷。
我的经验: 做A股多因子,PE和ROE是必选因子。但要注意——银行股的PE天然低,不能和科技股放一起比。我习惯先做行业中性化处理,再计算因子值。

3.2 技术面因子:市场行为的「痕迹」

技术面因子,说白了就是从价格和成交量里挖信号。你想想看,K线图里其实藏着很多信息,只是需要量化手段把它提取出来。

我常用的几类:

  • 动量因子:过去N个月的累计收益率。强者恒强?还是物极必反?
  • 反转因子:短期涨多了要跌,跌多了要涨。A股里短期反转效应挺明显的。
  • 量价因子:成交量变化、换手率、资金流向。量在价先,这句话不是白说的。
  • 波动率因子:历史波动率、振幅。低波动股票往往有超额收益,这个现象叫「低波动异象」。
避坑指南: 我曾经在回测中用了「未来函数」——用当天的收盘价计算当天的因子,然后预测当天的收益。结果回测曲线漂亮得像假的一样。嗯,确实是假的。计算技术因子时,一定要确保只用历史数据。

3.3 另类因子:非传统数据的「金矿」

另类因子,就是那些不在传统财务报表里的数据。这几年越来越火,因为传统因子已经被挖烂了,超额收益越来越薄。

几个方向:

  • 舆情因子:新闻情感分析、股吧评论热度。散户情绪高涨时,往往离顶部不远了。
  • 供应链数据:上下游企业的订单、库存变化。比如苹果的供应商财报好,苹果大概率也不差。
  • 搜索热度:百度指数、微信指数。搜索量暴增,说明关注度来了。
  • 卫星图像:停车场车位数、工厂烟囱冒烟量。这个门槛高,但信号价值极大。
我的看法: 另类因子最大的问题是数据清洗成本高。我做过一个舆情因子项目,光清洗无效评论就花了两周。但一旦跑通,收益确实可观——因为用的人少,因子还没失效。

3.4 常见数据源:去哪搞数据?

数据是量化研究的「米」。没米下不了锅。我整理了几个主流数据源,各有优劣。

数据源 特点 费用 适合场景
Tushare 开源、社区活跃、接口丰富 基础免费,高级付费 个人研究、小规模回测
Wind 机构标准、数据质量高、覆盖全 年费数万 机构、专业量化团队
聚宽 自带回测平台、因子库、策略模板 免费版够用 快速原型、策略验证
东方财富 Choice 性价比高、数据较全 年费几千 中小团队、个人进阶

我个人习惯: 研究阶段用 Tushare 或聚宽,免费且够用。真要跑实盘了,再上 Wind 或 Choice,数据质量更稳定。别一开始就砸钱买 Wind,万一策略不行,钱就白花了。

3.5 实战:用 Tushare 拉取因子数据

光说不练假把式。我写个简单示例,用 Tushare 拉取几只股票的 PE 和 ROE 数据。

import tushare as ts
import pandas as pd

# 设置 token(去 tushare.pro 注册获取)
ts.set_token('你的token')
pro = ts.pro_api()

# 获取股票列表(沪深300成分股)
hs300 = pro.index_weight(index_code='000300.SH', 
                         trade_date='20250110')
stocks = hs300['con_code'].tolist()[:5]  # 取前5只演示

# 拉取基本面数据
data_list = []
for code in stocks:
    df = pro.daily_basic(ts_code=code, 
                         trade_date='20250110',
                         fields='ts_code,pe,roe')
    data_list.append(df)

result = pd.concat(data_list)
print(result)
注意: Tushare 的免费接口有频率限制,每分钟最多 200 次。我建议一次别拉太多股票,分批处理。另外,记得把 token 存成环境变量,别硬编码在代码里——我以前吃过这个亏,代码传到 GitHub 上,token 被人盗用了。

3.6 数据获取的常见坑

做数据获取这几年,我踩过的坑能写一本书。挑几个最要命的说说:

  • 未来数据:回测时用了未来才知道的数据。比如用「当天收盘价」计算因子,然后预测「当天涨跌」——这等于作弊。
  • 幸存者偏差:只用了现在还活着的股票。退市的、ST的都被忽略了,回测结果虚高。
  • 复权问题:股票分红送股后,价格会跳空。不用复权数据,技术因子全是错的。
  • 数据对齐:不同数据源的日期格式、字段名可能不一样。合并时一定要做对齐检查。
我曾经犯过的错: 有一次做回测,用了 Tushare 的日线数据,但没检查是否有停牌日。结果某只股票停牌一个月,我的因子在那段时间全是 NaN,回测直接报错。后来我养成了习惯——拿到数据先做缺失值检查,再填充或剔除。

好了,这一章的内容就到这。因子分类和数据获取是量化研究的基石,基础打牢了,后面构建模型才不慌。记住:数据质量决定策略上限,别在数据上偷懒。


公众号:蓝海资料掘金营,微信deep3321