跳转至

A 股量化多因子模型与策略 (2025-2026)

最后更新: 2026年4月30日 | 状态: 研究就绪 覆盖范围: 情绪周期指标、多因子模型构建、因子择时、机器学习因子模型、回测框架


1. A 股情绪周期指标

A 股市场受散户参与度和政策驱动流动性周期影响显著。传统情绪指标已演变为复合高频信号。

1.1 核心情绪组件

换手率偏离度(TRD) 衡量散户"狂热"与机构稳定性的对比。

TRD_t = Median(换手率)(Top20% 市值) / Median(换手率)(Bottom50% 市值)
信号: TRD > 3.0 表示极端散户过热(短期反转信号)。

涨跌停比(LUR) 反映投机广度。注意:主板=10%,创业板/科创板=20%。

LUR_t = N_涨停 / (N_涨停 + N_跌停 + N_停牌)
信号: LUR > 0.6 = 强势动量区间;LUR < 0.2 = 风险规避。

北向资金动量(NBF) 北向(HK→SH/SZ)净流入 5 日滚动总和。作为"聪明钱"机构情绪的代理。

融资余额增速(MBV)

MBV_t = (MB_t - MB_{t-5}) / MB_{t-5}
融资余额快速增长通常预示局部顶部。

1.2 复合情绪指数(SASI)

使用 PCA 或等权组合标准化组件:

SASI_t = 0.3×Z(TRD) + 0.25×Z(LUR) + 0.25×Z(NBF) + 0.2×Z(MBV)
应用: 根据 SASI 区间过滤因子。(如在高 SASI 区间,低配价值因子,超配反转/质量因子)


2. 多因子模型构建

现代 A 股量化模型(2025-2026)严格执行对 Barra CNE6 风险模型的正交化,避免风格押注伪装为 alpha。 价值因子,超配反转/质量因子)


2. 多因子模型构建

现代 A 股量化模型(2025-2026)严格执行对 Barra CNE6 风险模型的正交化,避免风格押注伪装为 alpha。### 2.1 标准因子公式与处理

预处理管线: 1. Winsorization: 在 μ±3σ 处截断极端值(推荐 MAD 方法提高鲁棒性) 2. 标准化: 横截面排名 Z-score: Z_i = (X_i - Median(X)) / MAD(X) 3. 行业/市值中性化: 对因子回归行业哑变量和 ln(市值)。使用残差。

因子类别 具体指标 公式/逻辑 回看期
价值 现金流收益率 CF/P = 经营现金流(TTM) / 市值 TTM
调整后盈利收益率 EP_adj = (净利润 - 非经常性损益) / 市值 TTM
质量 应计项目 Accruals = (ΔCA - ΔCL - ΔCash + ΔSTD - Dep) / 总资产 1Y/2Y
ROE 稳定性 -StdDev(8个季度 ROE) 2Y
动量 中期动量 MOM = Return_{t-60, t-21}(跳过近月反转) 60D
反转 短期反转 REV = Return_{t-5, t-1} 5D
波动率 特质波动率 FF3 模型回归残差标准差 60D
情绪 分析师修正 (EPS预测新 - EPS预测旧) / 价格 30D 滚动

3. 因子择时与区间切换

静态加权(IC-IR)在 A 股因快速区间切换而表现不佳。

3.1 区间识别(HMM)

在以下指标上使用 2 状态隐马尔可夫模型: - 沪深 300 波动率 - 信用脉冲(社融同比增速) - SASI(来自第 1 节)

区间: 1. 牛市/流动性扩张: 超配动量、情绪。低配波动率。 2. 熊市/收缩: 超配质量、高股息、低波动率。 3. 震荡/轮动: 超配反转、分析师修正。

3.2 动态 IC 加权

使用轻量时间序列模型预测下月 IC:

W_factor^{t+1} ∝ LightGBM(IC_t, IC_{t-1}, ..., SASI_t, Macro_t)
训练目标:最大化 Rank IC 相关性。


4. 回测框架配置

^{t+1} ∝ LightGBM(IC_t, IC_{t-1}, ..., SASI_t, Macro_t)

训练目标:最大化 Rank IC 相关性。

---

## 4. 回测框架配置### 4.1 Qlib(AI 原生回测)
微软 Qlib 是国内 ML 驱动量化研究的行业标准。

**配置示例(workflow_config.yaml)**:
```yaml
qlib_init:
  provider_uri: "~/.qlib/qlib_data/cn_data"
  region: cn
market: &market csi500
benchmark: &benchmark SH000905
data_handler_config: &data_handler_config
  start_time: 2018-01-01
  end_time: 2026-04-01
  fit_start_time: 2018-01-01
  fit_end_time: 2023-12-31
  instruments: *market
port_analysis_config: &port_analysis_config
  strategy:
    class: TopkDropoutStrategy
    module_path: qlib.contrib.strategy
    kwargs:
      model: <trained_lgbm_model>
      dataset: <dataset>
      topk: 50
      n_drop: 10  # 卖出底部10只,买入顶部10只新信号
  backtest:
    start_time: 2024-01-01
    end_time: 2026-04-01
    account: 10000000
    benchmark: *benchmark
    exchange_kwargs:
      limit_threshold: 0.095  # 现实处理10%涨跌停
      deal_price: "close"
      open_cost: 0.0003
      close_cost: 0.0013  # 含0.05%印花税+0.08%佣金
      min_cost: 5
"close" open_cost: 0.0003 close_cost: 0.0013 # 含0.05%印花税+0.08%佣金 min_cost: 5 ```### 4.2 Backtrader(事件驱动执行) 适用于测试 T+1 约束和自定义执行逻辑。

class MultiFactorAlgo(bt.Strategy):
    params = (('rebalance_days', 20), ('top_k', 50),)

    def __init__(self):
        self.rebalance_counter = 0

    def next(self):
        self.rebalance_counter += 1
        if self.rebalance_counter % self.params.rebalance_days == 0:
            self.rebalance()

    def rebalance(self):
        scores = load_scores(self.datas)
        targets = sorted(scores, key=lambda x: x.score, reverse=True)[:self.params.top_k]
        target_names = [t.name for t in targets]

        for position in self.broker.positions:
            if position not in target_names:
                self.close(position)

        target_weight = 1.0 / self.params.top_k
        for name in target_names:
            size = self.broker.get_cash() * target_weight / self.getdatabyname(name).close[0]
            self.order_target_size(self.getdatabyname(name), size)

5. 机器学习因子模型(2025-2026)

5.1 排序学习(GBDT)

标准 MSE 损失对组合构建次优。使用 LambdaMARTXendcg

LightGBM 配置:

params = {
    'objective': 'rank_xendcg',  # 适用于横截面排序
    'metric': 'ndcg',
    'boosting_type': 'gbdt',
    'num_leaves': 31,
    'learning_rate': 0.05,
    'feature_fraction': 0.8,
    'min_child_weight': 5000,  # 防止对微盘股过拟合
    'verbose': -1
}
': 0.05,
    'feature_fraction': 0.8,
    'min_child_weight': 5000,  # 防止对微盘股过拟合
    'verbose': -1
}# 使用组信息(日期)训练以强制执行横截面排序
train_data = lgb.Dataset(X_train, label=y_train, group=date_groups_train)
model = lgb.train(params, train_data, num_boost_round=1000)

5.2 LLM 增强另类数据

  • 财报电话 NLP: 微调中文 LLM(如 Qwen-2.5-7B、GLM-4)提取 A 股管理层讨论与分析(MD&A)文本情绪
  • 供应链图(GNN): 建模股票关系为图(客户-供应商、同行业)。GNN 层传播情绪冲击(如特斯拉延期影响中国 EV 电池供应商)

6. 风险管理与组合优化

6.1 均值方差约束优化

max_w   w^T α - λ w^T Σ w
约束条件: - Σ w_i = 1(满仓) - |w - w_bench|_1 ≤ 换手限制(如 30% 月度) - w^T B_style = 0(风格中性化:市值、Beta、价值) - w^T B_ind = 0(行业中性化) - w_i ≤ 0.02(单股上限防集中风险)

6.2 实际执行成本(2026 标准)

  • 印花税: 0.05%(仅卖方)
  • 佣金: 0.01%-0.025%(机构账户可协商)
  • 滑点: 沪深 300 为 10bps,中证 2000(小盘)为 25bps
  • T+1 规则: 当日买入不可卖出。因子模型必须考虑此限制;T 日收盘生成信号在 T+1 开盘执行

7. 可执行策略参数清单

7.1 "Alpha 工厂" 基线配置

  • 股票池: 中证 800(流动性)+ 中证 2000(Alpha)。排除 ST、*ST、停牌、IPO<60天
  • 调仓: 月度(T+1 执行)
  • 持有期: 20 个交易日
  • 因子衰减: 半衰期 40 天
  • 性能目标: 年化收益 >15%,最大回撤 <15%,信息比率 >1.5

7.2 A 股量化常见陷阱

  1. 财报前视偏差: 始终使用 ann_date(公告日)而非 report_date。财报延迟 1-4 个月发布
  2. 幸存者偏差: 必须使用时点股票池
  3. 涨停执行失败: 股票开盘涨停时买单不会成交。回测必须模拟订单簿深度和涨停拒绝率
  4. 微盘股过拟合: 小盘股(中证 2000)有巨大 alpha 但流动性极差。强制执行 ADV 约束:持仓价值 < 20日 ADV 的 10%

文档更新日期: 2026年4月30日 | 来源: Qlib 官方文档、Barra CNE6 手册、arXiv 量化论文、社区回测实践、真实 A 股数据验证** ADV 的 10%`


文档更新日期: 2026年4月30日 | 来源: Qlib 官方文档、Barra CNE6 手册、arXiv 量化论文、社区回测实践、真实 A 股数据验证**## 🧪 实盘验证 (2026-04-30)

50 沪深成分股, 新浪源 6850 条真实数据, 2025.10-2026.04:

因子 IC均值 IR t值 胜率
市值(Size) -0.024 -0.090 -0.97 50.9%
20日动量(Mom) -0.006 -0.022 -0.24 49.1%
20日波动率(Vol) 0.036 0.153 1.65 56.9%
20日换手率(TO) 0.033 0.103 1.11 54.3%

⚠️ 所有单因子 IR < 0.2,统计不显著。 理论因子在实战中需要因子合成+择时+另类数据才能产生超额收益。详见 实盘因子验证