Task #5 — A 股领头羊策略 (CANSLIM + Minervini SEPA) · Brief v0
Author: @RayDario
Sources: O'Neil 《How to Make Money in Stocks》 + Minervini 《Trade Like a Stock Market Wizard》 + 《Think and Trade Like a Champion》 + A 股 2015-2025 实证
Status: v0 — Kaite verification + @JimSimons data/backtest spec
---
0. 一页摘要
A 股 stock-picking strategy = **CANSLIM** (O'Neil 7 维度 基本面 + 价格 + 大盘) × **Minervini SEPA** (Stage 2 + VCP + 严格风控) × A 股本土化
**目标** (Kaite locked): **年化 15-25%, MDD ≤ 25%**
**核心选股 5 步**:
1. 大盘环境过滤 (M, 没有 ≠ 等于不交易, 是 mini-cypress 该策略最重要的开关)
2. 基本面筛选 (C + A: 单季 + 年度 EPS / 营收 / ROE / 现金流加速)
3. 价格强度 + 趋势 (L + Stage 2 trend template)
4. 入场 形态 (突破 + VCP 近似)
5. 风控硬规则 (-7% 到 -10% 止损, 单票 ≤ 8% NAV)
**A 股 4 大本土化关键**:
1. **M (大盘) 滤波器权重高于美股** (A 股 beta 占年化收益 70%+, 熊市硬选股是徒劳)
2. **涨跌停影响形态识别 + 止损执行** (止损不一定即时, 需要次日开盘价确认)
3. **概念股 / 题材股 是 leader 假象主要来源** (排除规则必备)
4. **机构 sponsorship 用北向资金 + 龙虎榜 + 主动型公募季报** 替代美股 Mutual Fund holdings
**关键不做** (v0):
- 不做 行业 ETF (那是 Task #6)
- 不做 题材 / 概念股 (排除)
- 不做 Pre-IPO / 次新股 (流动性 + 上市时间过滤)
- 不做 ST / *ST / 退市 风险股 (硬剔除)
- 不做 涨停接力 (短线游资玩法, 不是 leader strategy)
- 不做 主观选股 (v0 纯量化 CANSLIM 量化版)
---
1. 框架综合
1.1 CAN SLIM (O'Neil, 1959)
七维度筛选, 综合权重思想:
- **C** — Current Quarterly EPS: 最近季度 EPS YoY ≥ +25%
- **A** — Annual Earnings: 近 3 年 EPS CAGR ≥ +25%
- **N** — New: 新产品 / 新管理 / 新高 (catalyst)
- **S** — Supply and Demand: 低流通量 (small float) preferred + 量价配合
- **L** — Leader: RS rank ≥ 80 (in universe)
- **I** — Institutional sponsorship: 机构持仓 增加 + accelerating
- **M** — Market direction: only buy in uptrending market (O'Neil estimates this is ~75% of strategy success)
1.2 Minervini SEPA (Specific Entry Point Analysis)
- **Stage 2 Uptrend Trend Template** (8 条, 全部满足):
1. Current price > 150 MA
2. 150 MA > 200 MA
3. 200 MA trending up ≥ 1 month
4. 50 MA > 150 MA AND 50 MA > 200 MA
5. Current price > 50 MA
6. Current price ≥ 30% above 52-week low
7. Current price ≥ 75% of 52-week high (within 25%)
8. RS rank ≥ 70 (preferred ≥ 80)
- **VCP (Volatility Contraction Pattern)**: 横盘整理 with 波动率收敛 (3-5 次 contraction, 后一次比前一次窄)
- **入场**: 突破 pivot point with 放量 (≥ 1.5x 30 日均量)
- **风控**: **-7% 到 -10% 止损 (硬规则)**, 持仓 cap
1.3 两个 framework 的共通核心
- **基本面加速** (CANSLIM C/A + Minervini "earnings up" criterion)
- **相对强度** (CANSLIM L = Minervini Trend Template 第 8 条)
- **大盘环境** (CANSLIM M = Minervini Market Health)
- **严格风控** (Minervini -7% / O'Neil "cut your losses fast")
1.4 我对两者的整合 + 取舍
| 元素 | O'Neil CANSLIM | Minervini SEPA | mini-cypress v0 采纳 |
|---|---|---|---|
| 基本面加速 | C + A 单季 + 年度 EPS | "earnings up" + "sales up" | ✅ 整合: 季度 EPS YoY + 3 年 EPS CAGR + 经营现金流 sanity check |
| 价格强度 | L (RS ≥ 80) | RS ≥ 70-80 | ✅ A 股版: 250 日 RS rank ≥ 80 vs 沪深 300 |
| 趋势 | 不显式 | Trend Template 8 条 | ✅ 直接采用 Minervini 8 条, 量化版 |
| 入场形态 | 突破 + 放量 | VCP + pivot breakout | ✅ 量化近似: 突破 60 日 high + 放量, VCP 用 volatility contraction 量化标准 |
| 大盘环境 | M (very critical) | Market Health | ✅✅ A 股权重比美股高, 必须独立模块 |
| 止损 | "cut losses fast" | -7% 到 -10% 硬规则 | ✅ -8% 硬规则 (中位数) |
| 机构 | I (mutual fund) | 不显式 | ✅ A 股版: 北向资金净买入 + 龙虎榜 + 公募季报 |
| 新事件 N | 新产品 / 管理 / 新高 | 不直接, 但 trend template 第 7 条含义类似 | ⚠️ "新事件" 难量化, 我用 252 日新高 + 公告事件流近似 |
| 供给侧 S | Small float preferred | 不显式 | ⚠️ A 股 small cap 流动性问题, 我反向用 — 排除流通市值 < 30 亿 |
---
2. A 股本土化关键调整
2.1 涨跌停 (vs 美股无此限制)
- **影响形态识别**: 突破日涨停 → 形态确认变滞后 (买不到 + 量真假难辨)
- **影响止损执行**: 跌停时无法即时止损 → 实际止损价可能远低于 -8% (次日开盘价确认)
- **应对**:
- 入场: 突破日涨停 → 待 T+1 / T+2 缩量回踩确认后再买 (避免追涨停)
- 止损: 跌停时不强制平仓 (没法成交), 待复牌或解封 → 按 close 价格触发 (实际可能 -15% 或更深)
- 回测: 涨跌停的实际成交假设要保守 (滑点 50bp+)
2.2 大盘环境 (M) — 最重要的本土化
- A 股 beta 占年化收益 70%+ (vs 美股 ~40%): **熊市硬选股是徒劳**
- M 滤波器开 / 关:
- **开** (允许新建仓): 沪深 300 收盘价 > 50 日 MA AND 50 日 MA > 200 日 MA
- **关** (停止新建仓, 持仓维持但触发止损正常): 沪深 300 跌破 200 日 MA OR 50 日 MA 跌破 200 日 MA
- **紧急关** (清仓): 沪深 300 单月跌 > 12% + 北向资金净流出 > ¥200 亿 → 全部持仓减至 30%, 等 M 重新开
- **历史校准**:
- 2018 全年 M 关 → 应该没有新仓位
- 2020-2021 H1 M 开 → 标准 stock-picking 期
- 2022 全年 M 关 → 减仓
- 2024 H1 M 关 → 减仓 (避开 1 月小盘股闪崩)
- 2024-09-24 后 M 重新开 → 抓反弹
2.3 排除规则 (题材 / 概念股 leader 假象)
- **排除**:
- ST / *ST / 即将 ST (硬过滤)
- 上市时间 < 12 月 (次新股波动失真)
- 流通市值 < 30 亿 (流动性 + 操控风险)
- 主营业务无 (壳公司)
- 行业属性: 高度概念 / 题材依赖 (e.g. 仅有"AI 概念" 但无 AI 实际收入的) — 用"基本面加速"过滤天然排除
2.4 机构 sponsorship A 股代理
- 北向资金净买入 (近 20 日 / 近 60 日) — 大资金外资风向
- 龙虎榜机构净买入 (近 60 日) — 主力监测
- 公募基金季报持仓变化 (季度更新, 慢但权威)
- 沪股通 / 深股通 持股比例增量
2.5 行业政策风险
- 风险: 个别行业被政策定点打压 (2021 教育 / 互联网, 2024 房地产)
- 应对: 不预判政策, 让基本面 + 价格信号说话; 但加 "行业近 20 日有重大监管利空" 触发筛除该行业新建仓 (e.g. 财新 / 国务院 政策事件流监控)
- 这条 v0 难自动化, v0+ 加入
---
3. CANSLIM 量化版 spec (JimSimons 可执行)
3.1 基本面层 (C + A)
对每只 A 股 i, 计算:
- **EPS_QoQ_i**: 最近季度 EPS YoY 增长率 (%)
- **EPS_YoY_3Y_i**: 近 3 年 EPS CAGR (%)
- **REV_QoQ_i**: 最近季度 营收 YoY (%)
- **ROE_TTM_i**: 滚动 12 月 ROE
- **OCF/NI_i**: 最近 4 季 经营现金流 / 净利润 (sanity check, 防"利润高但收不到钱")
**Pass 条件** (全部满足):
- EPS_QoQ_i ≥ +25%
- EPS_YoY_3Y_i ≥ +20% (略松, A 股 3 年 25% CAGR 太严)
- REV_QoQ_i ≥ +15% (营收增速作为利润支撑)
- ROE_TTM_i ≥ 12% (or 行业前 30%)
- OCF/NI_i ≥ 0.5 (防"利润高但现金流差")
3.2 价格强度层 (L + Stage 2)
对每只 通过 §3.1 的股票:
- **RS_250_i**: 过去 250 日收益 - 沪深 300 同期收益
- **RS_rank_i**: cross-section rank (1 = best)
- **Trend Template 8 条** (全部通过):
1. close > 150 日 MA
2. 150 日 MA > 200 日 MA
3. 200 日 MA 近 21 个交易日 斜率 > 0
4. 50 日 MA > 150 日 MA AND 50 日 MA > 200 日 MA
5. close > 50 日 MA
6. close ≥ 52 周低点 × 1.30
7. close ≥ 52 周高点 × 0.75
8. RS_rank_i ≤ universe top 20% (即 rank in top 20% of stocks passing §3.1)
3.3 入场形态 (S + VCP 量化近似)
对每只通过 §3.2 的股票, 计算最近 60 日:
- **VCP 量化**: 过去 60 日, 用 12 日窗口滚动计算"高点-低点" 振幅. 振幅序列应**单调收敛** (后一窗振幅 < 前一窗 × 0.85, 至少出现 2 次)
- **Pivot point**: 60 日 high
- **突破信号**: close > pivot point × 1.005 (≥0.5% 突破, 防假突破)
- **放量确认**: 当日成交量 ≥ 30 日均量 × 1.5
**入场触发**: VCP 通过 + 突破 + 放量 三条件**全部满足** → 当日收盘买入
3.4 机构 sponsorship (I, A 股版)
- **北向资金 60 日净买入** (基于持仓变化) > 0 → +0.5 score
- **龙虎榜近 60 日机构净买入** > 0 → +0.3 score
- **最近季报 公募基金持仓占流通股** 比上一季报增加 → +0.2 score
(I 不作为硬过滤, 作为打分加权, score 越高 优先级越高)
3.5 大盘环境 (M, 已 §2.2 详述)
- M 开 → 允许新建仓
- M 关 → 不新建仓, 持仓维持
- M 紧急关 → 减仓至 30% NAV
3.6 排除规则 (§2.3)
- ST / *ST / 上市 < 12 月 / 流通市值 < 30 亿 — 硬过滤前置
3.7 最终选股流程
1. **§3.6** 排除规则 → 全 A 股 - 排除 = 候选池 (~3500)
2. **§3.1** 基本面 → 通过 ~200-500 (因 regime 而异)
3. **§3.2** 价格强度 + Trend Template → 通过 ~30-80
4. **§3.3** VCP + 突破 + 放量 → 通过 5-15 (这是 trigger 信号, 不是当日全部入场)
5. **§3.4** sponsorship score → 排序
6. 选 top score 入场, 配合 §4 风控 (单票 ≤ 8% NAV, 单行业 ≤ 30%, 持仓 ≤ 15 只)
---
4. 风控 (硬规则 + 软监测)
4.1 单票风控
- **-8% 单笔止损** (硬规则) — 入场后 8% 跌幅自动 stop-loss (按 close 触发)
- 涨跌停时止损顺延至次日开盘 (无法即时成交)
- **保护性止损**: 持仓涨 ≥ 20% 后, 止损位上移至成本价 (breakeven)
- **趋势止损**: 持仓涨 ≥ 50% 后, 止损位上移至 50 日 MA
4.2 组合风控
- **持仓数 ≤ 15 只** (集中度, 防止过度分散稀释 alpha)
- **单票 ≤ 8% NAV** (持仓建立时)
- **单票 ≤ 12% NAV** (持仓涨幅触发上限, 超过则强制减至 8%)
- **单行业 ≤ 30% NAV**
- **现金 / 满仓**: M 开 → 满仓 (15 只 × 6-8%); M 关 → 不新建仓, 持仓维持; M 紧急关 → 30% NAV
4.3 整体组合止损
- 月度组合 MDD > -10% → 仓位减至 70%
- 月度组合 MDD > -15% → 仓位减至 40%
- MDD > -20% → 全清仓, 等 M 重新开
4.4 调仓节奏
- **入场扫描**: 每周一次 (周一上午基于上周收盘价 + 财务数据更新), 触发信号当周内 enter
- **退场**: 触发条件即时 (单票 -8% 止损 / 财务基本面证伪 / Trend template 破坏)
- **大盘环境检查**: 每日 close 后
---
5. 失败模式备忘
5.1 大盘单边熊 (CANSLIM M 失效场景)
- 风险: M 滤波器正确关闭, 但已建仓部分被熊市 dump
- 应对: §4.3 整体组合止损; M 紧急关 触发清仓
5.2 题材 / 概念股伪 leader
- 风险: 概念股 RS 排名前 20% 但基本面无, 入场后崩盘
- 应对: §3.1 基本面硬过滤 (EPS / 营收 / 现金流) 排除题材股 (无真实业绩支撑的)
5.3 涨跌停滑点
- 风险: 跌停止损实际 -15% 而非 -8%
- 应对: 接受 (A 股结构问题), 回测中模拟 50bp+ 滑点; 实盘时 prefer 流通市值 > 100 亿股票 (较少出现一字跌停)
5.4 行业政策黑天鹅
- 风险: 2021 教育 / 2024 房地产 全行业暴跌
- 应对: §4.2 单行业 ≤ 30%; §5.5 行业事件流监控 (v0+ 加自动 trigger)
5.5 财务造假 (A 股结构风险)
- 风险: 单季 EPS 高 + 营收高 但是财务造假 (e.g. 康得新 / 康美 / 瑞幸)
- 应对: §3.1 OCF/NI ≥ 0.5 sanity check; §3.1 ROE ≥ 12% 维持基本经营质量
- v0+: 加 "审计意见非标 + 应收账款增速 > 营收增速 × 2 倍" 二次过滤
5.6 因子衰减 (CANSLIM 在国内 2025-2026 weak market 表现)
- 风险: CANSLIM 在结构性行情中 (e.g. 2022-2023 哑铃市) leader 集中在少数赛道, 模型可能 over-concentrate
- 应对: §4.2 单行业 ≤ 30%; v0+ 监测因子各季度 IC, 失效时降权
5.7 信号 lag (财报披露窗口)
- 风险: 季报披露窗口 (4/8/10 月, 年报 4 月) 之间无新数据, 信号"陈旧"
- 应对: 接受 (制度问题); 在披露窗口后第 2 周做密集扫描
---
6. JimSimons 数据 + 回测 spec
6.1 数据层
**A 股股票**:
- 全市场日线 OHLCV + 复权因子 + 停牌 / ST / *ST / 退市 标记
- 流通市值 (动态) + 上市日期
- 行业分类 (申万一级 + 中信一级)
**财务**:
- 单季 EPS / 营收 / 净利润 / 经营现金流 (基础 4 季 + 历史 12 季 累计)
- TTM ROE / ROIC / 毛利率 / 净利率
- 年报 EPS / 营收 / 净利润 (3 年历史)
**机构持仓**:
- 北向资金日级 持股 (每股 / 每天)
- 龙虎榜机构净买入 (日级)
- 公募基金季报持仓 (季度)
**Benchmark**:
- 沪深 300 / 中证 800 日线 (RS + M 滤波器用)
- 北向资金每日总流入 / 流出 (M 紧急关 用)
**历史**:
- 股价 + 财务: 2015-01-01 至今
- 北向资金: 2015-01-01 起 (沪深港通开通)
- 龙虎榜: 2018-01-01 起
- 落地: ~/data/mini-cypress/rqdata/equity/2015-2026/
6.2 回测任务
**baseline 配置**:
- §3 选股流程 → §4 风控 → 每周扫描 + 即时退出
- M 滤波器开关
- 单票 -8% 硬止损
**OOS 拆分** (与 Task #4/#6 同):
- IS: 2015-01-01 至 2023-12-31 (覆盖 2015 股灾 / 2016 熔断 / 2018 单边熊 / 2019-20 结构牛 / 2021 高低切 / 2022 全年熊 / 2023 震荡)
- OOS-A: 2024-01-01 至 2024-09-23 (M 关期 + 1 月小盘股闪崩, 关键 stress test)
- OOS-B: 2024-09-24 至 2025-06-30
- OOS-C: 2025-07-01 至今
**输出指标** (每个 OOS 段独立):
- 年化 / vol / Sharpe / Sortino / Calmar
- max DD + recovery 时长
- 单笔胜率 + 平均盈亏比 + 平均持仓周期
- 行业暴露分布 + 单行业最大占比
- vs 沪深 300 / 中证 800 alpha / IR / beta
- M 开 / 关 期间表现差异 (验证 M 滤波器有效性)
- 排除概念股 vs 不排除 alpha 对比 (验证 §2.3)
- 涨跌停滑点敏感性 (0bp / 50bp / 100bp)
- 单票止损 -7% / -8% / -10% sensitivity
6.3 Failure case (回测异常 ping 我)
- IS 年化 > 35% → 极可能 overfit, 检查 RS rank threshold 或 入场量化标准
- IS Sharpe > 2.5 → 可能未计入交易成本 + 滑点
- OOS-A 年化 > 5% → 检查 M 滤波器是否正确关闭 (2024 H1 应该 M 关)
- 单笔胜率 > 60% → 异常高, 检查是否未模拟实际涨跌停
---
7. @Kaite verification
7.1 核心 framework 取舍
- 我整合 CANSLIM + Minervini SEPA, 而非二选一 (附件 §1.4 表格) — 你接受?
- A 股本土化 4 关键 (§2): 大盘 M 权重高 / 涨跌停 / 排除概念股 / 北向替代 — 你认同?
7.2 量化阈值
- 基本面 (§3.1): EPS YoY ≥ +25% / 3 年 CAGR ≥ +20% / 营收 ≥ +15% / ROE ≥ 12% / OCF/NI ≥ 0.5 — 你 OK 还是 build / strict?
- RS (§3.2): rank top 20% — 接受?
- Trend Template 8 条全部要满足 — 接受还是要松?
- VCP 量化 (§3.3): 12 日窗口振幅单调收敛 ≥ 2 次 — 接受还是要 toggle?
7.3 排除规则
- 流通市值 < 30 亿 排除 — 接受?如果你想覆盖小盘股, 可以降到 20 亿或 15 亿, 但要小心流动性
- 上市 < 12 月 排除 — 接受?
7.4 风控
- -8% 硬止损 — 接受还是要 -7% / -10%?
- 持仓 ≤ 15 只 + 单票 ≤ 8% — 接受?
- 单行业 ≤ 30% — 接受?
- 大盘 M 触发清仓 至 30% — 接受?
7.5 调仓节奏
- 每周扫描, 即时退出 — 接受还是要 daily / monthly?
7.6 不做的部分
- v0 不做 主观选股 + 不做日内 + 不做 涨停板接力 + 不做次新股 + 不做概念股 — 你接受?
- v0+ 是否优先实现哪条?
---
8. 与其他 task 协同
- **Task #4 全天候**: 不重叠 (Task #5 = 个股, Task #4 = 宽基 ETF + 多资产)
- **Task #6 ETF 轮动**: 不重叠 (Task #6 = 行业 ETF, Task #5 = 个股); 但行业 ETF 涨跌可作为 Task #5 选股的"行业景气度" 信号 (v0+ 引入)
- **Task #7 可转债**: 正股数据复用 (Task #5 拉的正股数据可直接给 Task #7 用)
- **Task #8 组合层**: Task #5 占资金权重 20% / 风险预算 ~30% (per Kaite + 我初版)