# 量化全链路方案 v1.0

> 编制：十月 | 2026-07-13 | 约束依据：《因子投资：方法与实践》《系统化交易》
> 本书籍理论标注：仅标注「书籍名称+对应章节号」

---

## 第一章：大盘评级量化判定

> 参考：《系统化交易》第5章（层级化行情分类框架）+ 第8章（滚动窗口检验机制）

### 1.1 数据标的

- 数据源：上证指数日线（ts_code = `000001.SH`）
- 数据表：`clean_index_dailybasic` 或 `clean_index_kline`
- 使用字段：`close`（前复权收盘价）
- 数据范围：当前日（T日）及历史数据

### 1.2 基础移动平均线计算

**计算公式：**
```
MA20(T) = (close(T-19) + close(T-18) + ... + close(T)) / 20
MA60(T) = (close(T-59) + close(T-58) + ... + close(T)) / 60
```

**注意：**
- 均线从最早数据开始计算，当前日之前的交易日不足窗口数量时，不产生评级
- 例如：T日距数据起始日不足20日，MA20不计算，大盘评级为NULL（不判定）

### 1.3 大盘三档判定规则

#### 条件A：牛市（Bull）
**两个条件要求同时满足：**

| 条件 | 公式 | 说明 |
|:----|:----|:-----|
| ① 多头排列 | `close(T) > MA20(T) AND MA20(T) > MA60(T)` | 收盘价>20日线>60日线 |
| ② 中期趋势向上 | `slope(MA60, 20) > 0` | MA60在最近20个交易日的线性回归斜率>0 |

**斜率计算公式：**
```
slope(MA60, 20) = [20 × Σ(i×MA60_i) - Σi × ΣMA60_i] / [20 × Σi² - (Σi)²]
其中 i = 0,1,...,19（i=0为最新日）
```

#### 条件B：熊市（Bear）
**两个条件要求同时满足：**

| 条件 | 公式 | 说明 |
|:----|:----|:-----|
| ① 空头排列 | `close(T) < MA60(T) AND MA20(T) < MA60(T)` | 收盘价<60日线 且 20日线<60日线 |
| ② 中期趋势向下 | `slope(MA60, 20) < 0` | MA60近20日斜率<0 |

#### 条件C：震荡市（Shock）
**不符合牛市、熊市任意一套判定条件的，全部归类震荡市。**

> 《系统化交易》第5章：震荡市是默认分类，避免在趋势不明确时强行判定方向

### 1.4 防抖机制

> 《系统化交易》第5章：短期噪声可能导致错误信号，需通过连续确认机制过滤

**规则：**
- 每日生成当日行情标签（Bull / Bear / Shock）
- **连续5个交易日标签相同**，才允许切换全局打分权重
- 短期穿插反向标签（1~4天）不触发切换
- 切换当天为T+1（第6日）执行

**时序案例（防抖完整过程）：**

```
交易日    当日标签    防抖结果    说明
─────────────────────────────────────────
T1        Shock      Shock      观测第1天
T2        Shock      Shock      观测第2天
T3        Bull       Shock      Bull不连续，不切换 → 防抖生效
T4        Shock      Shock      回到Shock
T5        Shock      Shock      观测第3天
T6        Shock      Shock      观测第4天
T7        Shock      Shock      连续5次(Same)Shock → 判定Shock
T8        Bull       Shock      T+1不切换（防抖拦截单日Bull）
T9        Bull       Shock      连续第2天Bull
T10       Bull       Shock      连续第3天Bull
T11       Bull       Shock      连续第4天Bull
T12       Bull       Bull       连续5天Bull → 切换为Bull权重
T13       Shock      Bull       防抖拦截单日Shock
...
```

### 1.5 观测窗口

> 《系统化交易》第8章：固定滚动窗口用于时序校验，避免全样本过拟合

**规则：**
- 固定120个交易日滚动窗口
- 仅在当前行情档位（Bull/Shock/Bear）内部微调因子权重（见第四章权重调整）
- 不允许跨档位更换整套权重框架
- 窗口每过一日，移除最旧一日数据，加入最新一日

### 1.6 大盘档位绑定最终上仓上限

| 大盘档位 | 最大持仓数量 | 说明 |
|:-------:|:-----------:|:----|
| 牛市(Bull) | 最多10只 | 趋势向上可较分散 |
| 震荡(Shock) | 最多6只 | 不确定市中控制暴露 |
| 熊市(Bear) | 最多3只 | 趋势向下严控仓位 |
| 极端熊市 | 0只（空仓）| MA60连续20日斜率<-0.5且close<MA60且close<MA20 |

> 第六章回测中会进一步结合净值回撤阶梯做最终仓位上限 = min(大盘仓位上限, 净值回撤阶梯仓位上限)

---

## 第二章：一层总候选池（四道强制粗筛）

### 2.1 数据源

> 统一使用三层因子表的合并数据集，详见第2.4节《因子数据源合并》

### 2.2 四道强制筛选规则

**规则1：ST/风险警示过滤**
- 剔除当日标记为ST、*ST的个股
- 剔除退市整理期个股
- 数据源：`clean_ccass_hold` 或行情接口ST标记字段
- 实现：每日获取ST清单，交集排除

**规则2：次新过滤**
- 剔除上市未满180个交易日的个股
- 上市日期 = 首次在`daily_kline`中出现（该股最早trade_date）
- `次新过滤结果 = 当前日 - 最早trade_date ≥ 180个交易日`

**规则3：流动性过滤**
- 剔除近20个交易日内日均成交额 < ¥8,000万的个股
- `avg_amount_20 = sum(amount(T-19 to T)) / 20`
- 剔除条件：`avg_amount_20 < 80_000_000`（注：daily_kline中amount单位为元）
- 不足20个交易日数据的个股直接剔除

**规则4：财务过滤**
- 剔除当期净利润为负且净资产也为负的个股
- 数据源：`financial_data`表的 `netprofit_yoy` + `equity_yoy` 或 `financial_data`中的EPS+ROE组合判断
- 取最近一期财务数据（按end_date降序取第一条）
- 剔除条件：`eps < 0 AND bps < 0`（每股收益为负 且 每股净资产为负）

### 2.3 层内统一数据处理

> 《因子投资：方法与实践》第3章：数据清洗是因子分析的前置条件

**空值处理：**
- 任意因子值为NULL的个股直接剔除（不纳入候选池）
- 三个因子源表合并后做全量空值检查

**极值缩尾：**
> 《因子投资：方法与实践》第3.3节：极值处理采用1%和99%分位数缩尾

- 对每个因子，分别计算全部候选个股的1%分位数（P1）和99%分位数（P99）
- 因子值 < P1 → 设为P1
- 因子值 > P99 → 设为P99

**五分层标准化（详见第三章第3.3节）**

### 2.4 因子数据源合并规则

#### 2.4.1 三张因子源表

| 表名 | 全量字段数 | 核心选股因子 | 统一关联键 |
|:----|:---------:|:------------|:---------|
| **基础因子表** (`factor_precalc`) | 21+字段 | mf_5d, ret7, volume_ratio, rsi, large_flow, ret20, ma20_direction 等 | (trade_date, code) |
| **专用因子表** (`clean_tech_factors_pro`) | 260+字段(含_qfq) | WR_qfq, VR_qfq, DMI_pdi_qfq, OBV_qfq, RSI_qfq, CCI_qfq, MACD_qfq, BOLL_qfq 等 | (trade_date, ts_code) |
| **存量行情因子表** (`factor_precalc` + 行情派生) | 存量因子 | close_qfq, open_qfq, high_qfq, low_qfq, amount, volume | (trade_date, code) |

#### 2.4.2 合并规则

**关联键统一：**
```
基础因子表.code = 股票代码前缀（去掉.SZ/.SH后缀）
专用因子表.ts_code → 截取前缀 = substr(ts_code, 1, length(ts_code)-3) → code_prefix
存量行情因子表.code = 股票代码前缀
最终三表合并键：(trade_date, code_prefix)
```

**重复因子去重规则：**
- 因子存在于多张表时，按以下优先级保留唯一版本：
  1. `clean_tech_factors_pro`（含_qfq后缀的前复权版本） > 其他
  2. `factor_precalc`（原始计算版本） > 行情表直接计算版本
  3. 合并时优先保留有理据的高质量来源
- 示例：RSI值在三表中均存在时，取`clean_tech_factors_pro.rsi_qfq`

**缺失字段填充：**
- 某表有、某表无的因子：正常保留，仅填充NULL
- 空值处理见第2.3节

**合并结果的唯一键：**
- `(trade_date, code_prefix, factor_name)` — 每个因子每个票每天一条
- 最终输出用于IC测试和候选池评分的数据结构应该是：`{trade_date: {code: {factor_name: value}}}`

#### 2.4.3 全因子池（IC测试对象）

以下因子全部纳入IC测试，不提前限定：

> **来源：基础因子表 + 专用因子表_qfq字段 + 存量行情派生**
>
> - WR_qfq（威廉指标）
> - VR_qfq（成交量变异率）
> - DMI_pdi_qfq / DMI_mdi_qfq / DMI_adx_qfq（方向运动指标系）
> - RSI_qfq（相对强弱指标）
> - OBV_qfq（能量潮）
> - CCI_qfq（商品通道指数）
> - MACD_qfq / MACD_dea_qfq / MACD_dif_qfq（MACD系）  
> - BOLL_upper_qfq / BOLL_lower_qfq / close_qfq / KTN系
> - mf_5d（5日主力资金净流入）
> - ret20（20日涨幅）
> - volume_ratio（量比）
> - large_flow（大单资金流）
> - ret7（7日涨幅）
> - 以及基础因子表 + 专用因子表全部其他_qfq字段

---

## 第三章：因子检验

> 《因子投资：方法与实践》第3、4章（因子IC计算+五分分层测试+多空组合收益分析）

### 3.1 IC计算流程

> 《因子投资：方法与实践》第3.4节：IC（Information Coefficient）是因子对未来收益预测能力的度量，采用Spearman秩相关系数

#### 3.1.1 秩IC定义

对第T日所有候选个股：
- 因子值向量 X = {x₁, x₂, ..., xₙ}（每日一万候选个股的因子值，已标准化处理）
- 未来N日收益向量 Y = {y₁, y₂, ..., yₙ}
- 分别对X和Y按升序排秩 → rank_X, rank_Y

```
Spearman IC = Pearson_Correlation(rank_X, rank_Y)
            = Σ(rank_X_i - μ_rx)(rank_Y_i - μ_ry) / √[Σ(rank_X_i - μ_rx)² × Σ(rank_Y_i - μ_ry)²]
```

#### 3.1.2 观测周期

| 参数 | 值 | 来源 |
|:----|:--:|:----|
| 未来收益观测窗口 | 未来10个交易日（T+1 ~ T+10收盘价收益） | 全局固定，不可改动 |
| 最大回撤观测窗口 | 未来10个交易日最大回撤 | 用于辅助因子有效性判定 |

#### 3.1.3 收益计算公式

```
未来10日收益率(T) = (qfq_close(T+10) - qfq_close(T+1)) / qfq_close(T+1) × 100%
```

**注意：**
- 使用**前复权收盘价**（`qfq_close`）计算收益，确保除权除息调整
- 买入按T+1开盘价，卖出按T+1开始的第10日收盘价（与回测配置一致）
- 收益 = 卖出(T+10) - 买入(T+1)

#### 3.1.4 每日IC计算步骤

```
对于每个交易日T：
  1. 获取一层总候选池中当日所有个股
  2. 对候选池内每个个股，获取其因子值x_i（已标准化）
  3. 对候选池内每个个股，获取T+1买入、T+10卖出的涨幅y_i
  4. 将x_i和y_i分别做秩转换
  5. 计算Spearman秩相关系数 → IC_T
  6. 记录IC_T值
```

#### 3.1.5 多日IC统计

```
均值IC = avg(IC_T for all T)
标准差IC = std(IC_T for all T)
t统计量 = 均值IC × √N / 标准差IC  (N=总交易日数)

胜率 = count(IC_T > 0) / N × 100%
绝对值胜率 = count(|IC_T| > 0.03) / N × 100%
```

#### 3.1.6 因子分类标签

> 《系统化交易》第5章：不同市场环境适用不同因子类型

按三类市场环境（牛市/震荡/熊市）分别计算IC：

- **trend（趋势因子）**：熊市和牛市IC方向一致且均>0.03
- **osc（震荡因子）**：震荡市IC > 0.03，且牛市/熊市IC方向不一致
- **rebound（反转因子）**：在至少一类环境下IC<-0.03（反转特征）

自动判定逻辑：
```
if abs(IC_bull) >= 0.03 AND abs(IC_bear) >= 0.03 AND sign(IC_bull) == sign(IC_bear):
    label = "trend"
elif abs(IC_shock) >= 0.03:
    label = "osc"  
elif min(IC_bull, IC_bear, IC_shock) < -0.03:
    label = "rebound"
else:
    label = "noisy"  # 无明确信号
```

### 3.2 因子有效性判定阈值

> 《因子投资：方法与实践》第3章：因子有效性需满足统计显著性与经济显著性

| 判定标准 | 条件 | 动作 |
|:--------|:----|:----|
| **全市场有效** | 全样本|IC| > 0.03 | 纳入候选池评分权重 |
| **单市场有效** | 至少一类市场环境|IC| > 0.03 | 纳入对应环境权重 |
| **全市场无效** | 全样本|IC| < 0.01 | **直接淘汰**，不纳入 |

### 3.3 五分分层（Quintile Portfolio）

> 《因子投资：方法与实践》第4.3节：分层测试用于判断因子单调性，是因子有效性的重要辅助验证手段

#### 3.3.1 分位数切割规则

**禁止调用Tushare/三方库内置排序接口。自主代码实现。** 具体分步执行：

```
对于每个交易日T：
  步骤1：获取当日一层总候选池全部n只个股的因子值
  步骤2：将n只个股按因子值升序排列
  步骤3：计算每份容量 = ceil(n / 5)
  步骤4：分配五分位组：
    G1（0~20%）: 排名第1 ~ 第ceil(n/5)位 → 因子值最小的一组
    G2（20~40%）: 接着ceil(n/5)位
    G3（40~60%）: 中间组
    G4（60~80%）: 
    G5（80~100%）: 排名靠后的ceil(n/5)位 → 因子值最大的一组
  步骤5：对每个五分位组，等权计算组内全部个股的未来10日平均收益率
  步骤6：记录 G1_avg_ret(T)、G2_avg_ret(T)、...、G5_avg_ret(T)
```

#### 3.3.2 单调性判断

```
累计多日统计后：
G1_avg = avg(G1_avg_ret over all T)
G5_avg = avg(G5_avg_ret over all T)

多空收益差 = G5_avg - G1_avg
            （当因子与收益正相关时，G5 > G1，差值>0）
            （当因子与收益负相关时，G1 > G5，差值<0）

单调性判定：
- 正向单调（理想）：G1<G2<G3<G4<G5 且 G5-G1 > 0
- 负向单调（可用取反）：G1>G2>G3>G4>G5 且 G1-G5 > 0
- 非单调（U型/倒U型/不规则）：谨慎使用或仅辅助参考
```

---

## 第四章：二级策略专属候选池

> 《因子投资：方法与实践》第4章（多因子加权组合）

### 4.1 因子标准化处理

> 《因子投资：方法与实践》第3.4节：Z-score标准化是因子加权前的标准处理

对通过IC测试的有效因子，在一层总候选池内做横截面Z-score标准化：

```
μ_f = mean(factor值 for all 候选个股 in T日，剔除空值)
σ_f = std(factor值 for all 候选个股 in T日)
Z_i = (factor_i - μ_f) / σ_f
```

### 4.2 大盘档位对应权重表

> 《系统化交易》第5章：大周期行情框架决定因子权重分配，不同周期采用不同因子侧重

| 大盘档位 | 趋势因子权重 | 震荡因子权重 | 反转因子权重 |
|:-------:|:----------:|:----------:|:----------:|
| 牛市(Bull) | 60% | 20% | 20% |
| 震荡(Shock) | 25% | 50% | 25% |
| 熊市(Bear) | 40% | 20% | 40% |

**权重调整规则：**
- 上表为全局框架，仅在大盘防抖切换时（连续5日同标签）才允许更换
- 在120日滚动窗口内，仅允许在**当前档位内部**做±5%的微调
- 微调依据：过去120日滚动窗口内，该因子在对应市场环境下的滚动IC值

### 4.3 综合得分计算

```
综合得分_i = Σ(权重_j × Z_ij)  
其中 j 遍历所有有效因子
权重_j 根据当前大盘档位从权重表获取
Z_ij 为个股i在因子j上的标准化得分
```

**注意：**
- 综合得分可为负，仅用于排序比较
- 得分没有幅度意义（仅排名意义）

### 4.4 3日平滑降噪

> 《系统化交易》第5章：时序平滑降低短期噪声干扰

```
平滑后得分_i(T) = (综合得分_i(T-2) + 综合得分_i(T-1) + 综合得分_i(T)) / 3
```

- T、T-1、T-2均为交易日
- T-2或T-1不存在时（新上市或数据起点）：仅用可用数据平均
- 所有数据均不存在（如完全新票）：得分置NULL，不进入二级池

### 4.5 二级池截取

- 固定截取规模：**综合得分前80只**，进入二级策略专属候选池
- 数量不随市场行情变动（牛市80只、震荡80只、熊市80只，统一不变）
- 后置流程见第五章

---

## 第五章：二次过滤选股

### 5.1 个股硬性风控红线

> 《系统化交易》第8章：硬性风控规则为不可逾越的底线

对二级池80只个股逐只执行以下检查，**任何一条不满足直接剔除**：

| 风控条件 | 公式 | 说明 |
|:--------|:----|:-----|
| 个股10日最大回撤 < 6% | `max(1 - 最低价/最高价, 过去10日) < 0.06` | 偏离幅度超限→剔除 |
| 科创板阶段涨幅 ≥ 15% | `qfq_close / qfq_close(T-20) - 1 ≥ 0.15` | 科创板票需先有涨幅 |
| 买入区间检查 | `现价 ≥ 买入区间下沿 AND 现价 ≤ 买入区间上沿` | 价格落入选股区间 |

**买入区间计算方式：**
```
买入区间下沿 = 当日qfq_open × (1 + open_gap_lower%)
买入区间上沿 = 当日qfq_open × (1 + open_gap_limit%)

其中open_gap_lower和open_gap_limit由策略配置决定
默认值：lower=-9%, limit=9%（±9%全区间）
```

### 5.2 大盘档位绑定持仓上限

| 大盘档位 | 最大持仓数量 |
|:-------:|:-----------:|
| 牛市(Bull) | 10只 |
| 震荡(Shock) | 6只 |
| 熊市(Bear) | 3只 |
| 极端熊市 | 0只（空仓）|

### 5.3 净值回撤阶梯仓位约束

> 《系统化交易》第8章：账户回撤是硬性约束

| 账户净值回撤幅度 | 允许仓位 |
|:--------------:|:--------:|
| < 4% | 100%（不限制）|
| 4% ~ 8% | 60% |
| 8% ~ 12% | 40% |
| 12% ~ 18% | 20% |
| ≥ 18% | 10% |

**最终仓位上限 = min(大盘档位对应持仓数量, 净值回撤阶梯换算持仓数量)**

换算方法：
```
持仓上限（阶梯换算）= max(1, round(最大持仓数量 × 阶梯允许仓位%))
示例：震荡市最大6只×阶梯60%仓位 = 3.6只 → 取整=4只
```

### 5.4 最终持仓清单生成流程

```
步骤1：二级池80只 → 个股硬性风控检查 → 剩余R只
步骤2：按综合得分从高到低排序
步骤3：计算最终允许持仓数量N
步骤4：取前N只作为今日最终买入候选
步骤5：检查行业集中度，同一行业不超过最终持仓数量的30%（向上取整）
步骤6：输出最终持仓清单
```

---

## 第六章：回测方案

### 6.1 回测时间区间

| 参数 | 值 |
|:----|:--:|
| 回测起始日 | 2023-01-03（A股2023年第一个交易日）|
| 回测结束日 | 2026-06-30 |
| 初始资金 | ¥1,000,000（100万）|

### 6.2 全局固定参数

> 以下参数全程禁止私自改动

| 参数 | 值 | 说明 |
|:----|:--:|:----|
| 因子检验观测周期 | 未来10个交易日 | 固定不动 |
| 因子有效门槛 | \|IC\|>0.03有效、\|IC\|<0.01淘汰 | 固定不动 |
| 五分分层数量 | 5组(G1~G5) | 固定不动 |
| 二阶池截取数量 | 80只 | 固定不动 |
| 回测起始日 | 2023-01-03 | 固定不动 |
| 初始资金 | ¥1,000,000 | 固定不动 |

### 6.3 费率标准

| 费用项 | 买入 | 卖出 | 费率 | 最低 |
|:------|:---:|:---:|:---:|:----:|
| 券商佣金 | ✅ | ✅ | 万1（0.01%） | ¥5 |
| 过户费 | ✅ | ✅ | 万0.1 | 无最低 |
| 印花税 | ❌ | ✅ | 万5（0.05%） | 无最低 |

### 6.4 回测引擎调用

> 基于现有OpenClaw底层框架的`backtest_engine.py`，禁止大规模重构

```python
from backtest_engine import BacktestEngine, DEFAULT_CONFIG

config = {
    **DEFAULT_CONFIG,
    # 费率
    'fee_rate': 0.0001,        # 万1佣金
    'min_fee': 5.0,            # 最低5元
    'stamp_tax': 0.0005,       # 印花税万5（仅卖出）
    'transfer_fee': 0.00001,   # 过户费万0.1
}

engine = BacktestEngine(config=config)
result = engine.run(signals, kline_data, regime, kline_open=kline_open)
```

### 6.5 输出要求

回测完毕产出3份文件：

| 文件 | 格式 | 内容 |
|:----|:----|:----|
| trade_log.csv | CSV | 逐笔交易：strategy/code/buy_date/sell_date/buy_price/sell_price/shares/pnl/return_pct/close_type |
| summary.json | JSON | 汇总：总收益/年化/最大回撤/卡玛/夏普/胜率/交易笔数/卖出分布 |
| snapshots.json | JSON | 逐日快照：date/pos_count/total_mv/cash/equity/pos_limit |

### 6.6 数据核验清单

| 检查项 | 方法 |
|:------|:----|
| 卖出类型合计 = 总交易数 | expire + stop_loss + profit_take + pos_cut = 总笔数 |
| 期末权益 = 初始资金 + 累计pnl | eq_end = eq_start + Σpnl |
| 现金 >= 0 | 逐日snapshot中cash不得为负 |
| 同步买卖 | 同一股票buy_date ≠ sell_date |
| 持仓数 <= 上限 | 任意日pos_count ≤ max_positions |
| 前复权价格 | buy_price = qfq_open, sell_price = qfq_close |
| 费率扣除 | pnl = mv_net(含卖出手续费) - total_cost(含买入手续费) |

---

## 第七章：缺陷优化与回测稳定性

> 以下每一条优化思路，必须绑定对应书籍章节（标注依据），无理论依据直接判定不合格

### 7.1 因子衰减与时序稳定性

> 参考：《因子投资：方法与实践》第3章（时变因子收益分析）

**问题：** 因子的预测能力可能随时间变化（IC衰减），固定权重无法应对因子失效。

**优化思路：**
- 滚动窗口内（120日）实时追踪各因子IC变化
- 因子近60日IC<0.01时自动降低其权重（从现有权重中逐步释放，每次下调不超过总权重的5%）
- 因子近60日IC连续负值时（IC<-0.02且持续30日），彻底移出当前权重体系

### 7.2 过拟合风险控制

> 参考：《系统化交易》第8章（回测稳定性检验与过拟合防御）

**问题：** 回测参数可能过度拟合历史数据。

**优化思路：**
- 滚动回测：使用滑动窗口，训练期540日、持有期120日，逐窗验证
- 样本外校验：将回测期分为两段
  - 训练期 2023-01 ~ 2024-12（2年）
  - 验证期 2025-01 ~ 2026-06（1.5年）
  - 验证期卡玛不低于训练期卡玛的80%才算通过
- 随机参数扰动：对IC阈值±0.005、滑点±0.1%做敏感度分析

### 7.3 滑点与交易成本

> 参考：《系统化交易》第8章（交易成本对策略的影响）

**问题：** 回测未考虑滑点会导致收益高估。

**优化思路：**
- 买入滑点：假设按开盘价均价+0.1%（市场冲击成本）
- 卖出滑点：假设按收盘价均价-0.1%
- 极端行情滑点：涨停/跌停当日无法成交（需标记为失效信号）

### 7.4 多策略冗余

> 参考：《因子投资：方法与实践》第4章（多因子组合降低单因子波动）

**问题：** 不同策略在同一天可能选择同一只股票。

**优化思路：**
- 跨策略去重：多策略共享仓位上限
- 同一只股票被N个策略选入时，按"最早信号"优先（而非重叠加仓）

### 7.5 极端行情压力测试

> 参考：《系统化交易》第8章（极端市场情景下的回撤测试）

**问题：** 策略在正常行情下表现优于极端行情。

**优化思路：**
- 提取回测期内最大跌幅交易日TOP10（如2024-02-05、2024-01-22等）
- 分别检验策略在这些已识别的极端日期中的表现
- 要求：极端日当日净值跌幅 ≤ 全期最回撤日的1/3

---

## 附件A：文档交付检查清单

| # | 检查项 | 标准 |
|:-:|:------|:----|
| 1 | 大盘评级判定 | 完整写出Bull/Bear/Shock判定公式、MA计算、斜率公式 |
| 2 | 防抖机制 | 完整写出5日连续确认、10日完整时序案例 |
| 3 | 一层候选池 | 完整写出4道筛选的阈值、公式、数据源 |
| 4 | 因子合并 | 独立段落写三表合并键、去重规则、缺失填充 |
| 5 | IC计算 | 完整Spearman秩相关系数公式、分类标签规则 |
| 6 | 五分分层 | 自主代码切割步骤、单调性判断规则 |
| 7 | 二级池 | 标准化公式、权重表、平滑算法、80只截取 |
| 8 | 风控红线 | 逐条阈值和公式 |
| 9 | 回测参数 | 固定参数表、费率表、核验清单 |
| 10 | 缺陷优化 | 每条必须标注书籍名称+对应章节号 |

---

*本文档共7章，合计约XXX字*
*编制依据：《因子投资：方法与实践》第3/4章、《系统化交易》第5/8章*
