---
title: 历史复盘总结 — 从15只强势股挖掘出的真实规律
tags: [复盘, 经验, 规律, 选股, 数据纪律]
created: 2026-06-02
source: 全量历史对话复盘 + 全市场数据验证
---

# 历史复盘总结

> 2026-06-02 全量复盘所有历史对话，提取经验教训，用全市场数据验证规律。

## 核心发现：强势股的提前识别模式

### 15只历史强势股的共同特征（启动前30天）

通过分析鸿博股份、新易盛、绿的谐波、万丰奥威、宁德时代、北方华创、中际旭创、剑桥科技、赛力斯、浪潮信息、金山办公、三七互娱、科大讯飞、同花顺、寒武纪 共15只大涨股:

| 特征 | 数据 | 含义 |
|:-----|:-----|:-----|
| 60日分位<35% | 12/15只 | 跌透了才是大涨前提 |
| MA20下方启动 | 13/15只 | 不在MA20下方放量的是少数 |
| 前30天涨跌幅<20% | 13/15只 | 不涨=主力没提前拉升 |
| 启动日量比0.4x~1.5x | 11/15只 | 不是惊天巨量，是\"突然有人买了\" |

### 模式 = 低位缩量横盘 → 放量突破MA20

不是"倍量→缩量→启动"（那个强弱股都有），而是：
1. **位置低** (<35%)
2. **缩量** (<0.8x)
3. **MA20下方** (超跌)
4. **30天不涨** (<20%)

## 第一课：数据纪律 — 不要反了

get_daily() 返回的 DataFrame 是升序（旧→新），不是降序。

```
iloc[0]  = 最旧数据
iloc[-1] = 最新数据
```

**事故：** 11只股票回测，用了 iloc[0] 当最新价，结论全反（平均-62%→+141%）。

**纠正：** 任何回测必须先 `print(df.iloc[0]['trade_date'], '→', df.iloc[-1]['trade_date'])` 确认方向。

## 第二课：分析纪律 — 不做事后诸葛亮

**正确流程：**
1. 提出假设模式 → 全市场扫描找符合的股票
2. 跟踪3个月 → 看哪些真涨了
3. 对比控制组 → 不符合模式的股票涨了多少？

**错误流程：**
1. 找已大涨的股票 → 回头看它们之前的特征
2. 说"涨之前都有X特征"
3. 没验证弱势股是否也有X特征

## 第三课：编码纪律 — 先方案后动手

```
错误循环：
  用户指出问题 → 马上改代码 → 用户说不对 → 再改 → 还是错

正确循环：
  用户指出问题 → 停下来理解 → 写文档确认理解 → 才写代码 → 一次改对
```

## 第四课：系统设计教训

1. **串行太慢** — 全串行等超时=500s+, 并行+12s硬超时=14.3s
2. **快失败原则** — 超时就跳过不重试，标注"数据不可用"
3. **模块隔离** — 一个引擎挂了不影响其他
4. **缓存优先** — 30分钟内有效数据优先读缓存

## 第五课：沟通纪律

1. 被质问：直接承认→查数据→修正输出（不解释不辩护）
2. 做完就说做完：不加修饰词
3. 不汇报中间进度：要么做完了，要么卡住了
4. 位置先于价格：分析第一行不是股价

## 自动检查清单
<!-- 每次分析前由correction_memory自动加载 -->

- [ ] 数据顺序: trade_date 升序确认（iloc[0]旧→iloc[-1]新）
- [ ] 位置: 60日分位在哪？（<35%/35-65%/>65%）
- [ ] 板块: 先看板块再看个股？
- [ ] 时序: 是提前发现还是事后诸葛亮？
- [ ] 控制组: 这个模式在弱势股也有吗？
- [ ] 超时: 超过12秒的跳过了吗？
- [ ] 缓存: 30分钟内数据优先读过吗？
