精华帖子

策略分享——小盘价值质量复合因子(行业中性 + 动量过滤)

由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)
  • 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


\

{link}