策略分享——小盘价值质量复合因子(行业中性 + 动量过滤)
由bq5973r5创建,最终由bq5973r5 被浏览 29 用户
1. 市场观察和机会发现
很多“纯小盘”或“纯价值”策略容易遇到两类问题:\n1)价值陷阱:估值便宜但基本面变差,股价继续下跌;\n2)行业偏置:长期收益其实来自行业押注(例如价值偏金融/周期),一旦行业风格切换,策略波动放大。
因此更实用的思路是:
用质量因子(ROE)减少价值陷阱;
用行业内排名实现行业中性,避免行业押注;
用动量过滤避开短期下跌趋势中的“接飞刀”。
2. 假设提出
本策略建立在以下假设上:
1)小盘溢价存在,但需要“筛选”:小盘整体更分化,必须叠加基本面与估值约束才能提高胜率。\n2)价值 + 质量更稳健:便宜且盈利质量较好(ROE 更高)的股票,在震荡与下行周期通常更抗跌。\n3)行业中性让因子收益更“纯”:将因子暴露放到行业内部比较,减少行业结构变化带来的扰动。\n4)动量过滤降低下行风险:当短期价格趋势显著走弱时,即使估值很便宜,也可能继续下跌。
3. 策略逻辑编写
3.1 策略思想
策略由三层组成:股票池过滤 → 因子打分(行业内)→ 动量过滤 → 组合持仓
3.1.1 股票池过滤
使用基础信息与可交易性约束构建股票池:
- 市场:上交所 + 深交所
- 板块:主板 + 创业板
- ST:仅“正常”
- 剔除停牌(drop_suspended=True)
进一步在因子模块里加入更严格过滤:
- 交易可得:
suspended=0 AND st_status=0 - 小盘约束:
float_market_cap <= 1750000000 - 成长/基本面过滤:
net_profit_yoy_ttm > 0.3 AND operating_revenue_yoy_ttm > 0.3 - 估值范围:
0 < pe_ttm < 50 AND 0 < pb < 5 - 上市时间:
list_days > 90 - 动量过滤:
mom_20 > -0.15
\
3.1.2 因子构建与行业中性
构建了一个综合打分 ,并且在 申万2021二级行业内做分位排名,从而实现行业内相对比较(行业中性实现方式)。
表达式核心为:
- Size(小盘):
1 - c_group_pct_rank(sw2021_level2, float_market_cap)(行业内越小越高分) - Value(价值):
- EP:
c_group_pct_rank(sw2021_level2, 1/pe_ttm) - BP:
c_group_pct_rank(sw2021_level2, 1/pb)
- EP:
- Quality(质量):
c_group_pct_rank(sw2021_level2, roe_avg_ttm) - Momentum(动量过滤项):
mom_20 = close / m_lag(close, 20) - 1
综合打分(当前权重):
- 小盘:50%
- EP:5%
- BP:5%
- ROE:40%
也就是:
score = 0.50*Size_rank + 0.05*EP_rank + 0.05*BP_rank + 0.40*ROE_rank
mom_20 = close / lag(close, 20) - 1
3.1.3 持仓数量与仓位生成
- 按 score 降序排序
- 取前 60支股票持仓
- 等权:
position_expr="1 AS position" 且 total_position=1优点是稳健、解释性强;缺点是对波动与流动性敏感,后续可以加:单票上限、流动性约束、换手约束等。
4.回测配置
- 回测区间:2022-05-01 至 2025-07-31
- 初始资金:1,000,000
- 交易频率:日频调仓
- 成交价格:开盘价
- 手续费模型:买 0.03%,卖 0.13%,最低 5 元
- 基准:沪深300指数
交易逻辑:
- 每个调仓日读取当日目标持仓列表
- 不在目标池的持仓卖出到 0
- 在目标池的股票按 position 下单到目标仓位
5. 历史数据回测
7. 风险提示
- 财务数据滞后:ROE/利润增速等务必考虑披露延迟(否则有前视偏差风险)
- 流动性与冲击成本:小盘策略对成交额和滑点敏感,建议加入成交额/换手限制
- 涨跌停/停牌可交易性:回测与实盘可能偏差
策略源码:https://bigquant.com/square/ai/d7075792-69b5-bf94-d9ab-3a6f4e52cef
\