# A 股量化交易：从学习到实盘的完整路径
## 学习路径规划与注意事项指南

> **定位**：本文档是整个演示系列的"导航图"，帮助已完成五篇 Demo 学习的入门者，规划从学习到 A 股实盘的完整路径，并系统指出当前 Demo 的局限性与实盘中必须注意的陷阱。  
> **目标读者**：量化入门者，主要关注中国 A 股市场  
> **关键提示**：本文中所有带 ⚠️ 标记的内容，是初学者最容易踩坑的地方

---

## 目录

1. [当前五篇 Demo 的知识地图](#1-当前五篇-demo-的知识地图)
2. [A 股特有规则：Demo 与现实的差距](#2-a-股特有规则demo-与现实的差距)
3. [回测七大陷阱](#3-回测七大陷阱)
4. [风险管理：能否活到盈利那天](#4-风险管理)
5. [真实数据接入](#5-真实数据接入)
6. [基本面因子：价格因子的补充](#6-基本面因子)
7. [执行层：从信号到成交](#7-执行层从信号到成交)
8. [推荐工具与平台](#8-推荐工具与平台)
9. [完整学习与实践路径](#9-完整学习与实践路径)
10. [心理与纪律：最后也是最重要的](#10-心理与纪律)

---

## 1. 当前五篇 Demo 的知识地图

### 1.1 已完成的内容

```
┌─────────────────────────────────────────────────────────────┐
│                    量化交易知识体系                          │
│                                                              │
│  ✅ 第1篇  数据管道         ← 原始数据清洗、复权、收益率计算  │
│  ✅ 第2篇  策略与向量化回测  ← 技术指标、策略逻辑、绩效评估   │
│  ✅ 第3篇  事件驱动回测     ← 模拟真实撮合、成本模型          │
│  ✅ 第4篇  Alpha 因子研究   ← IC/ICIR、分层回测、因子合成     │
│  ✅ 第5篇  组合优化         ← MVO、风险平价、Black-Litterman  │
└─────────────────────────────────────────────────────────────┘
```

### 1.2 五篇 Demo 解决了什么问题？

| Demo | 解决的核心问题 |
|------|---------------|
| 数据管道 | 如何把原始价格数据处理成可用的研究数据 |
| 策略回测 | 如何验证一个交易规则在历史上是否有效 |
| 事件驱动回测 | 如何更真实地模拟实际交易过程 |
| Alpha 因子 | 如何发现能预测未来收益的"信号" |
| 组合优化 | 如何科学地分配多只股票的权重 |

### 1.3 五篇 Demo 没有解决的问题

```
❌  A 股特有的交易规则（T+1、涨跌停、印花税）
❌  回测结果是否可信（幸存者偏差、过拟合等）
❌  如果亏损了怎么控制损失（风险管理）
❌  如何接入真实市场数据
❌  实际下单时价格和预期不一样怎么办（执行摩擦）
❌  用财报数据选股（基本面因子）
```

**这些缺失的内容，恰恰是从"Demo 世界"走向"真实 A 股"最关键的桥梁。**

---

## 2. A 股特有规则：Demo 与现实的差距

> ⚠️ **这是全文最重要的章节**。  
> 当前五篇 Demo 均使用合成数据，在"理想世界"中运行，与 A 股真实交易规则存在根本性差异。

### 2.1 T+1 交割制度

**规则**：今天（T 日）买入的股票，**最早在 T+1 日才能卖出**。

```
对比:
  美股 / 港股:  T+0（当天买当天可以卖）
  中国 A 股:    T+1（今天买，明天才能卖）
  
  例外：科创板、创业板可以融券做空（但普通投资者很难操作）
  例外：ETF（交易型基金）支持 T+0 操作
```

**对量化策略的影响**：

| 策略类型 | 影响 |
|---------|------|
| 日内交易（Day Trading）| **完全不可行** — 日内无法平仓 |
| 日频换仓策略 | 需重新考虑成本，换仓频率受限 |
| 反转策略 | 信号当天无法止损，下跌风险暴露更大 |
| 动量策略 | 相对友好，持有周期通常 > 1 天 |

> 💡 **建议**：初学者应聚焦在**持仓周期 ≥ 5 天**的策略，让 T+1 的影响尽量小。

### 2.2 涨跌停板制度

**规则**：A 股每日价格变动有上限：
- 主板（沪深主板）：上下 **±10%**
- 科创板（STAR Market）/ 创业板（ChiNext）：上下 **±20%**
- ST 股（特别处理股票）：上下 **±5%**

**对回测的严重影响**：

```
场景1: 你的策略在 T 日发出"卖出"信号
       但 T+1 日开盘直接跌停（-10%）
       跌停板无买家，当天根本无法成交！
       → 回测用收盘价计算"已成交"是完全错误的

场景2: 你买入一只股票，连续多个涨停板
       每天想追买却买不到
       → 回测"买入成功"但现实中不可能成功
```

**解决方案**：在回测中增加"涨跌停过滤"逻辑：

```python
# 示例：过滤掉当天涨停的股票（无法以涨停价买入）
def is_limit_up(price_today, price_yesterday, limit=0.10):
    return price_today >= price_yesterday * (1 + limit - 0.001)

def is_limit_down(price_today, price_yesterday, limit=0.10):
    return price_today <= price_yesterday * (1 - limit + 0.001)

# 如果要买入但已涨停 → 放弃或等待次日
# 如果要卖出但已跌停 → 无法成交，记录为"滞留持仓"
```

### 2.3 交易成本：远比想象的高

A 股的完整交易成本结构：

| 成本类型 | 费率 | 收取方 | 说明 |
|---------|------|--------|------|
| **印花税**（Stamp Duty）| **0.1%**（单边） | 国家 | **仅卖出时收取**，买入不收 |
| 证券交易佣金（Commission）| 0.02%~0.03% | 券商 | 买卖都收，部分券商有最低佣金（5 元/笔）|
| 过户费（Transfer Fee）| 0.002%（沪市）| 交易所 | 仅上海证券交易所收取 |
| 融资利率（Margin Interest）| 5%~8%（年化）| 券商 | 使用融资买入时额外收取 |

**单次完整交易的总成本（买入+卖出）**：

```
总成本 ≈ 0.1%（印花税卖） + 0.03%×2（佣金买卖） + 0.002%（过户费沪市）
       ≈ 0.164%（单次来回）

如果月换手1次（年化12次）：
   年化交易成本 ≈ 0.164% × 12 ≈ 2.0%

如果月换手4次（每周换仓）：
   年化交易成本 ≈ 0.164% × 48 ≈ 7.9%  ← 严重侵蚀收益！
```

> ⚠️ **关键认知**：一个"回测年化收益 15%"的策略，如果实际年化换手率为 600%（每月换仓100%），交易成本就接近 10%，实盘收益只剩约 5%。

### 2.4 A 股没有做空机制（对普通投资者）

| 市场 | 做空机制 |
|------|---------|
| 美股 | 融券做空广泛可行，成本低 |
| 港股 | 大部分股票可以融券做空 |
| A 股主板 | **普通投资者基本无法做空个股** |
| A 股（股指期货）| 可以通过沪深300、中证500期货做空指数 |

**对 Demo 的直接影响**：第4篇（Alpha 因子）§9 展示的"多空组合年化 33%"在 A 股完全无法直接复制。

**A 股量化投资者的变通方案**：
1. **多头因子策略**：只做多高分股票，不做空低分股票（损失多空价差）
2. **股指期货对冲**：买入个股组合 + 做空沪深300期货（对冲系统性风险）
3. **中性化**：权重设计时尽量减少市场 Beta 暴露

### 2.5 其他 A 股特有规则

| 规则 | 内容 | 量化影响 |
|------|------|---------|
| **停牌制度**（Suspension）| 重大事件期间股票可长期停牌（数天至数月）| 持仓被锁，无法止损 |
| **退市制度**（Delisting）| 连续亏损等情形会退市 | 回测数据需包含已退市股票 |
| **集合竞价**（Call Auction）| 09:25前委托，09:30后才成交 | 开盘价 ≠ 信号时点价格 |
| **大宗交易**（Block Trade）| 大额交易需走特殊通道 | 大资金策略容量受限 |
| **北向资金**（Northbound）| 陆股通资金流向影响 A 股短期走势 | 可作为情绪指标 |

---

## 3. 回测七大陷阱

> ⚠️ 一个漂亮的回测曲线，可能只是一个"谎言"。在信任任何回测结果之前，必须对以下七个陷阱逐一排查。

### 陷阱1：幸存者偏差（Survivorship Bias）

**问题**：如果你的股票池只包含"今天仍在交易的股票"，就自动排除了所有在回测期间**退市、被 ST、长期停牌**的股票——而这些正是最差的股票。

```
错误做法（Demo 中的做法）:
  2025年选取50只股票池 → 回测2020-2025年
  这50只股票全部存活到2025年，已经是幸存者！
  那些2022年退市的烂股，从股票池中消失了

正确做法:
  回测2020年时，股票池应该是"2020年可投资的全部股票"
  包括后来退市的股票
```

**A 股幸存者偏差的严重程度**：每年有数十只股票退市或被 ST，每年也有数百只新股上市（IPO）。忽略退市/ST 股票，策略的真实表现会被高估约 **1-3%/年**。

### 陷阱2：前视偏差（Look-Ahead Bias）

**问题**：在回测中使用了"当时还不可能知道"的数据。

```
常见案例:
  ① 财报前视偏差: 用"第三季度财报数据"买入，
                   但第三季度财报通常10月底才发布
                   → 9月份就用了10月才有的数据 ✗

  ② 复权前视偏差: 用"前复权"价格回测时，
                   历史价格会因未来的分红而被修改
                   → 用了未来分红信息 ✗（需用后复权或不复权）

  ③ 指数成分前视偏差: 用"当前沪深300成分股"回测历史，
                       但该成分股是现在才进入的
                       → 历史上你不可能知道它会进入 ✗
```

**A 股财报披露时间表**（设计因子时必须遵守）：

| 财报类型 | 披露截止日 |
|---------|-----------|
| 年报（Annual Report）| 次年 **4月30日** 前 |
| 一季报（Q1）| **4月30日** 前 |
| 半年报（Interim）| **8月31日** 前 |
| 三季报（Q3）| **10月31日** 前 |

> 💡 **规则**：使用财报数据时，必须在**披露截止日 + 1 天**之后才能"知道"该数据。

### 陷阱3：过度拟合（Overfitting）

**问题**：在历史数据上反复调整参数，找到"完美契合历史"的组合，但这个组合实质上只是在记忆历史噪音，而非真正发现了规律。

```
典型案例:
  参数空间: MA 短窗口 5~30，长窗口 20~120
  遍历 26×101 = 2626 个参数组合
  每次都在同一段历史数据上计算夏普比率
  最终选出夏普最高的那对参数
  
  → 这对参数只是恰好适合这段历史，样本外可能是最差的
```

**检验方法**：

```
正确的参数验证流程:
    │─────── 训练集 70% ─────────│── 验证集 15% ──│── 测试集 15% ──│
                ↑                        ↑               ↑
           调参优化               选择最终参数         只用一次！
                                                    （评估真实表现）

测试集只能使用一次：使用后就"消耗"了，不能再用它来调参
```

### 陷阱4：数据窥探偏差（Data Snooping Bias）

**问题**：学术界或行业内已发表了数百种"有效"因子，但这些因子大多是在相同的历史数据上发现并验证的。这种"挖矿"行为本身就引入了偏差——即使随机策略，也总能找到少数"偶然有效"的参数。

**量化估算**：如果测试 100 个随机策略，在 5% 显著性水平下，期望有 5 个"偶然"通过检验。

**防范建议**：
- 策略应有明确的经济学逻辑，而不仅是统计拟合
- 在不同市场/时间段进行样本外验证
- 使用更严格的统计显著性阈值（如 1%）
- 报告所有尝试过的策略，而非只报告成功的

### 陷阱5：市场冲击忽略（Ignoring Market Impact）

**问题**：回测假设可以在任何时间以收盘价无限量成交，但现实中大额买卖会推动价格。

```
例子:
  某策略买入信号出现在收盘后
  次日买入该股票 10,000 股（市值 50 万元）
  该股票日均成交额 200 万元
  → 你的买单占了日成交量的 25%！
  → 你的买入行为会把价格推高 1-3%（市场冲击成本）
```

**A 股容量限制**：
- 小盘股（日均成交额 500 万以下）：策略容量 < 50 万
- 中盘股（日均成交额 5000 万）：策略容量 < 500 万
- 大盘股（日均成交额 1 亿+）：策略容量 > 1000 万

### 陷阱6：未来函数（Future Function）

**问题**：代码层面的 Bug，使得某个时刻用到了它"不应该知道"的数据。

```python
# 错误示例（常见 Bug）:
signal = df['close'].rolling(20).mean()  # 计算20日均线
# 问题: pandas 默认使用当日收盘价在内的20天！
# 如果在开盘时交易，当日收盘价还不知道

# 正确写法: 信号基于前一日的完整数据
signal = df['close'].shift(1).rolling(20).mean()  # shift(1) 使用昨日收盘
```

### 陷阱7：交易成本低估（Underestimating Costs）

如上文 §2.3 所述。很多初学者的回测根本不扣除成本，或只扣佣金而忽略印花税。

**建议的保守成本设定**（适用于 A 股散户量化）：

| 换仓频率 | 建议预留成本 | 对应净年化阈值 |
|---------|------------|--------------|
| 月频（每月一次）| 0.3%/次 | 策略年化 > 4% 才有意义 |
| 周频（每周一次）| 0.3%/次 | 策略年化 > 16% 才有意义 |
| 日频（每天换仓）| 0.3%/次 | 策略年化 > 78% 才有意义（基本无法盈利）|

---

## 4. 风险管理

> ⚠️ **风险管理是量化投资中最被低估、最重要的内容。**  
> 一个 "普通好" 的策略 + 优秀的风险管理 > 一个 "非常好" 的策略 + 没有风险管理。

### 4.1 为什么风险管理是第一位的？

```
数学现实:
  亏损 50% → 需要盈利 100% 才能回本
  亏损 30% → 需要盈利 43% 才能回本
  亏损 20% → 需要盈利 25% 才能回本

结论: 不亏钱比赚钱更重要。大亏损后的"恢复期"可能长达数年。
```

### 4.2 仓位管理（Position Sizing）

**固定比例法（Fixed Fractional）**：每笔交易不超过总资产的固定比例。

```python
# 每笔交易最多动用总资产的 N%
MAX_POSITION_PCT = 0.05   # 每只股票最多 5%
MAX_PORTFOLIO_PCT = 0.80  # 总仓位最高 80%（留 20% 现金）

shares_to_buy = int(capital * MAX_POSITION_PCT / price)
```

**Kelly 公式**（理论最优仓位）：

$$f^* = \frac{p \cdot b - q}{b}$$

其中 $p$ = 胜率，$q = 1-p$ = 败率，$b$ = 盈亏比（平均盈利/平均亏损）。

> 💡 **实践建议**：Kelly 仓位往往偏激进，实际使用"半 Kelly"（$0.5 \times f^*$）更稳健。

### 4.3 止损机制（Stop-Loss）

| 止损类型 | 触发条件 | 适用场景 |
|---------|---------|---------|
| 硬止损（Hard Stop）| 亏损超过固定百分比（如 -8%）立即止损 | 所有策略都应有 |
| 追踪止损（Trailing Stop）| 从最高点回落超过固定幅度（如 -15%）| 趋势策略 |
| 时间止损（Time Stop）| 持仓超过预期天数但未达到目标，离场 | 短期策略 |
| 组合止损（Portfolio Stop）| 整体组合单日/单月亏损超阈值，全部减仓 | 所有策略 |

**A 股止损的特殊考量**：
- 涨跌停板可能导致**止损单无法成交**（挂单但无法匹配）
- 解决方案：止损条件触发后，设置"次日开盘卖出"而非"即刻市价单"

### 4.4 最大回撤控制（Max Drawdown Control）

```python
# 监控组合回撤，超过阈值自动降仓
def compute_drawdown(nav_series):
    rolling_max = nav_series.cummax()
    drawdown    = nav_series / rolling_max - 1.0
    return drawdown

MAX_DD_THRESHOLD = -0.15   # 回撤超过 15% → 降至半仓
STOP_DD_THRESHOLD = -0.25  # 回撤超过 25% → 清仓，停止交易

current_dd = compute_drawdown(portfolio_nav)
if current_dd < STOP_DD_THRESHOLD:
    # 发出清仓信号，停止策略运行
    pass
elif current_dd < MAX_DD_THRESHOLD:
    # 将所有仓位减半
    pass
```

### 4.5 VaR 与 CVaR（风险度量）

**在险价值 VaR (Value at Risk)**：在给定置信水平下，**未来某段时间内可能损失的最大金额**。

$$\text{VaR}_{95\%,1D} = -\text{Percentile}_{5\%}(r_{daily}) \times \text{Portfolio Value}$$

含义：有 95% 的把握，明天的损失不超过这个金额。

**条件在险价值 CVaR / ES (Conditional VaR / Expected Shortfall)**：

$$\text{CVaR}_{95\%} = -E[r \mid r < \text{VaR}_{5\%}]$$

含义：当损失超过 VaR 时，**平均损失有多大**。CVaR 比 VaR 更保守，更适合度量尾部风险。

```python
import numpy as np

def compute_var_cvar(daily_returns, confidence=0.95):
    var   = -np.percentile(daily_returns, (1 - confidence) * 100)
    cvar  = -daily_returns[daily_returns < -var].mean()
    return var, cvar

var_95, cvar_95 = compute_var_cvar(portfolio_returns)
print(f"日 VaR(95%):  损失超过 {var_95:.2%} 的概率 < 5%")
print(f"日 CVaR(95%): 当超过 VaR 时，平均损失 {cvar_95:.2%}")
```

---

## 5. 真实数据接入

### 5.1 主要数据源对比

| 数据源 | 费用 | 数据质量 | A 股覆盖 | 适合用途 |
|--------|------|---------|---------|---------|
| **AKShare** | 免费 | 中等 | 全覆盖 | 学习、价格/财务数据 |
| **Tushare Pro** | 免费（积分制） | 较高 | 全覆盖 | 学习到轻量实战 |
| **聚宽 JoinQuant** | 免费额度 | 高 | 全覆盖 | 回测研究 |
| **掘金量化** | 付费/免费模拟 | 高 | 全覆盖 | 模拟盘到实盘 |
| **Wind** | 付费（贵）| 最高 | 最全 | 专业机构 |
| **同花顺 iFinD** | 付费 | 高 | 全覆盖 | 专业机构 |

**入门推荐路线**：

```
第一阶段（纯学习）:  AKShare（完全免费）
     ↓
第二阶段（研究）:    Tushare Pro（免费注册，积分获取数据）
     ↓
第三阶段（模拟盘）:  聚宽 / 掘金量化（含模拟交易环境）
     ↓
第四阶段（实盘）:    券商 API（XTP / CTP）或 vnpy 框架
```

### 5.2 AKShare 快速上手示例

```python
import akshare as ak

# 获取 A 股日线行情（前复权）
df = ak.stock_zh_a_hist(
    symbol="000001",        # 平安银行
    period="daily",
    start_date="20230101",
    end_date="20231231",
    adjust="qfq"            # qfq = 前复权 / hfq = 后复权
)

# 获取沪深300成分股列表
hs300 = ak.index_stock_cons(symbol="000300")

# 获取 A 股财务数据（资产负债表）
balance_sheet = ak.stock_financial_abstract_ths(symbol="000001", indicator="资产负债表")
```

### 5.3 Tushare Pro 快速上手示例

```python
import tushare as ts

# 初始化（需要注册获取 token）
pro = ts.pro_api('your_token_here')

# 获取日线行情
df = pro.daily(
    ts_code='000001.SZ',   # 深圳股票加 .SZ，上海加 .SH
    start_date='20230101',
    end_date='20231231'
)

# 获取所有 A 股列表（含已退市，解决幸存者偏差）
stocks = pro.stock_basic(
    exchange='',           # 不指定则获取全部
    list_status='L',       # L=上市中 D=退市 P=暂停
    fields='ts_code,symbol,name,area,industry,list_date,delist_date'
)

# 获取财务数据（解决前视偏差，有 ann_date 披露日字段）
income = pro.income(
    ts_code='000001.SZ',
    fields='ts_code,ann_date,end_date,total_revenue,net_income'
)
# ann_date: 实际公告日期（用这个！）
# end_date: 报告期截止日（用于标识是哪个季度）
```

### 5.4 数据处理中必须处理的 A 股特有问题

**问题1：退市股票的幸存者偏差**
```python
# 获取所有股票（包括退市的），按照每个历史时点重建股票池
all_stocks = pro.stock_basic(list_status='L')   # 上市中
delisted   = pro.stock_basic(list_status='D')   # 已退市
# 合并后，在回测中对每个历史日期，只使用"当时已上市未退市"的股票
```

**问题2：财报披露延迟**
```python
# 使用 ann_date（公告日）而非 end_date（报告期末）
# 这确保你只在数据公开披露后才能"看到"它
df = df.sort_values('ann_date')
# 在回测中，只使用 ann_date <= 当前回测日期 的财报数据
```

**问题3：ST 股过滤**
```python
# ST、*ST 股票风险极高，通常需要过滤掉
is_st = df['name'].str.contains('ST')
df_clean = df[~is_st]
```

---

## 6. 基本面因子

### 6.1 为什么需要基本面因子？

当前 Demo 中的五个因子（MOM、REV、LVOL、BAB、ILLIQ）全部基于**价格和成交量**，称为"技术因子"或"量价因子"。

基本面因子（Fundamental Factors）基于公司财务数据，反映公司的内在价值：

| 因子类型 | 数据来源 | 信号持续性 | 换仓频率 |
|---------|---------|----------|---------|
| 量价因子（技术因子）| 日线行情 | 1天~3个月 | 日频~月频 |
| 基本面因子 | 财务报表 | 3个月~数年 | 季频~年频 |

### 6.2 主要基本面因子一览

**价值类因子（Value Factors）**：

| 因子 | 公式 | 含义 |
|------|------|------|
| B/P（账净比）| 净资产 / 市值 | 越高越"便宜"（价值股）|
| E/P（盈市比）| 净利润 / 市值 | 越高越低估 |
| S/P（营收市值比）| 营业收入 / 市值 | 避免亏损股影响 |
| EBITDA/EV | EBITDA / 企业价值 | 更完整的估值指标 |

**质量类因子（Quality Factors）**：

| 因子 | 公式 | 含义 |
|------|------|------|
| ROE | 净利润 / 净资产 | 股东权益回报率 |
| ROA | 净利润 / 总资产 | 资产回报率 |
| 毛利率 | 毛利润 / 营业收入 | 定价能力 |
| 应计比率（Accrual）| (净利润 - 经营现金流) / 总资产 | 低值 = 利润质量高 |

**成长类因子（Growth Factors）**：

| 因子 | 含义 |
|------|------|
| 营收同比增速 | 当季营收 vs 去年同季 |
| 净利润 YoY | 净利润年同比增速 |
| 超预期盈利（SUE）| (实际盈利 - 预期盈利) / 波动率 |

### 6.3 A 股基本面因子的特殊性

1. **季节性强**：A 股年报集中在 3-4 月披露，导致每年 4 月底有明显的"财报效应"
2. **财务造假风险**：A 股部分公司财报质量较差，需要交叉验证（对比现金流）
3. **ROE 的 DuPont 分解**更有用：`ROE = 净利率 × 资产周转率 × 杠杆比率`

---

## 7. 执行层：从信号到成交

### 7.1 信号 → 成交的完整链路

```
                  信号生成           订单生成           执行            成交
策略逻辑    →    "买入 S01"   →    下市价单    →    发送到交易所  →  实际成交
                                                          ↓
                                              时间延迟 / 滑点 / 市场冲击
```

### 7.2 滑点（Slippage）

**定义**：实际成交价格与信号触发时预期价格之间的差异。

**主要来源**：
- 时间延迟：从信号生成到订单到达交易所需要时间
- 买卖价差（Bid-Ask Spread）：买价总高于卖价
- 订单流向：你的订单与其他订单竞争，推动价格

**A 股典型滑点估算**（中小盘股）：0.1%~0.3% 单边

**在回测中模拟滑点**：

```python
SLIPPAGE_RATE = 0.002   # 0.2% 单边滑点

# 买入时支付更高价格
actual_buy_price  = signal_price * (1 + SLIPPAGE_RATE)

# 卖出时收到更低价格
actual_sell_price = signal_price * (1 - SLIPPAGE_RATE)
```

### 7.3 A 股的订单类型

| 订单类型 | 说明 | 优点 | 缺点 |
|---------|------|------|------|
| 限价单（Limit Order）| 指定价格，不成交则等待 | 价格确定 | 可能无法成交 |
| 市价单（Market Order）| 以当前最优价立即成交 | 必定成交 | 价格不确定，滑点大 |
| 最优五档即时成交 | A 股特有，匹配5档后剩余撤销 | 平衡 | 大单可能只成交部分 |

**量化策略推荐**：使用**限价单**（设置在当前卖一价或稍微高一点），避免市价单的大滑点。

### 7.4 算法交易（Algorithmic Execution）

对于资金量较大的策略，需要将大单拆分执行，避免冲击市场：

| 算法 | 全称 | 适用场景 |
|------|------|---------|
| VWAP | Volume-Weighted Average Price（成交量加权均价）| 跟踪市场均价，减少冲击 |
| TWAP | Time-Weighted Average Price（时间加权均价）| 均匀分散，简单易实现 |
| POV  | Percentage of Volume（跟量执行）| 按市场成交量的固定比例跟随 |

---

## 8. 推荐工具与平台

### 8.1 编程框架

| 框架 | 语言 | 特点 | 适用阶段 |
|------|------|------|---------|
| **vnpy** | Python | 国内最流行的量化框架，支持多个券商 API | 进阶→实盘 |
| **backtrader** | Python | 成熟的回测框架，社区活跃 | 学习→回测 |
| **zipline** | Python | Quantopian 开源，学术界常用 | 学习→回测 |
| **qlib** | Python | 微软开源，机器学习量化框架 | 进阶研究 |

### 8.2 研究与回测平台（含数据）

| 平台 | 费用 | 特点 | 推荐程度 |
|------|------|------|---------|
| **聚宽 JoinQuant** | 免费额度 | 数据+回测一体，适合 A 股 | ⭐⭐⭐⭐⭐（首推）|
| **掘金量化** | 免费+付费 | 支持模拟盘/实盘，数据全 | ⭐⭐⭐⭐⭐（首推）|
| **优矿 UqerIO** | 部分免费 | 与万得数据合作，数据质量高 | ⭐⭐⭐⭐ |
| **米筐 RiceQuant** | 部分免费 | Ricequant 系，稳定 | ⭐⭐⭐ |

### 8.3 实盘接入（进阶）

| 接口 | 说明 |
|------|------|
| **XTP（极速交易平台）**| 中泰证券开放的高性能交易接口，vnpy 支持 |
| **CTP（综合交易平台）**| 主要用于期货/期权，上期所/中金所标准接口 |
| **QMT（量化迷你终端）**| 部分券商提供，适合散户量化（如华泰、国金）|
| **miniQMT** | QMT 的轻量版，支持 Python 调用，适合个人 |

### 8.4 必读书单

| 书名 | 作者 | 重点内容 | 适合阶段 |
|------|------|---------|---------|
| 《量化投资：以 Python 为工具》| 蔡立耑 | 入门，代码实践 | 入门 |
| 《主动投资组合管理》| Grinold & Kahn | 因子模型、信息比率 | 进阶 |
| 《Advances in Financial Machine Learning》| Marcos López | 机器学习 + 量化陷阱 | 进阶 |
| 《打败市场的小书》| Joel Greenblatt | 基本面量化思维 | 入门 |
| 《风险、不确定性与利润》| Frank Knight | 理解真正的风险 | 思想基础 |

---

## 9. 完整学习与实践路径

### 9.1 路径总览图

```
阶段0: 理论基础（已完成 ✅）
├── 数据管道
├── 策略与回测
├── 事件驱动回测
├── Alpha 因子研究
└── 组合优化

      ↓ 当前位置

阶段1: 补充关键知识（建议 1-2 个月）
├── 学习 A 股规则（本文档）
├── 回测陷阱专项学习
└── 风险管理基础

      ↓

阶段2: 真实数据研究（建议 2-3 个月）
├── 接入 Tushare/AKShare
├── 用真实 A 股数据复现 Demo
├── 验证因子在真实数据上的有效性
└── 发现并修正前视偏差/幸存者偏差

      ↓

阶段3: 模拟盘验证（建议 3-6 个月）
├── 在聚宽/掘金搭建完整策略
├── 上线模拟盘（实时信号，不用真钱）
├── 记录实际信号 vs 回测信号的差异
└── 评估交易成本的真实影响

      ↓

阶段4: 小资金实盘（建议先用 1-5 万元）
├── 目的：学习，不是赚钱
├── 体验 T+1、涨跌停的实际影响
├── 建立完整的交易记录与复盘习惯
└── 以月为单位评估策略，不要日内焦虑

      ↓

阶段5: 策略完善与扩大
├── 根据实盘经验修正回测假设
├── 逐步增加资金（只用"闲钱"）
└── 持续研究新因子，维持策略有效性
```

### 9.2 阶段1：补充关键知识（推荐 Demo 顺序）

| 优先级 | 建议主题 | 核心内容 |
|--------|---------|---------|
| 🔴 必做 | **A 股回测陷阱与真实成本** | T+1 模拟、涨跌停过滤、完整成本扣除 |
| 🔴 必做 | **风险管理专题** | 仓位管理、止损、VaR/CVaR、回撤控制 |
| 🟡 重要 | **基本面因子研究** | PE/PB/ROE 因子，财报时间处理 |
| 🟡 重要 | **真实数据管道** | Tushare/AKShare 接入，解决幸存者偏差 |
| 🟢 选做 | **机器学习选股** | 随机森林、GBDT 预测收益 |
| 🟢 选做 | **市场情绪与另类数据** | 新闻情感分析、北向资金、融资融券 |

### 9.3 阶段2：用真实数据验证

**验证流程**：

```
① 选择标准化 A 股股票池:
   • 沪深300成分股（流动性好，容易成交）
   • 中证500成分股（中盘，Alpha 机会更多）
   • 全 A 股（完整，但需处理幸存者偏差）

② 数据准备 Checklist:
   □ 使用后复权价格（避免复权带来的前视偏差）
   □ 包含已退市股票（解决幸存者偏差）
   □ 财报数据使用 ann_date（解决财报前视偏差）
   □ 过滤 ST、停牌股票

③ 因子验证:
   □ 计算 IC / ICIR（目标：|IC均值| > 0.03）
   □ 分层回测（检验单调性）
   □ 扣除完整交易成本后，多空收益是否为正

④ 如果 IC 接近 0 或收益为负:
   → 该因子在真实 A 股中无效，需要换因子或调整
   → 不要试图调参"拟合"出好看的结果（过拟合陷阱！）
```

### 9.4 阶段3：模拟盘的正确姿势

```
❌ 错误做法:
   开模拟盘 → 发现和回测差距很大 → 调整回测参数 → 重新上线
   （这是在用模拟盘的结果"优化"回测，过拟合链条更长了）

✅ 正确做法:
   每天记录: 策略信号 + 实际执行价格 + 回测预期价格
   每月复盘: 实盘 vs 回测的差距在哪里？是成本？还是执行？
   不要修改策略参数（除非发现明确的 Bug）
   坚持至少 3 个月，收集足够的统计样本
```

---

## 10. 心理与纪律

> 这是整个学习路径中唯一不涉及编程的部分，但却是**决定最终成败**的关键。

### 10.1 量化交易的心理误区

| 误区 | 真实情况 |
|------|---------|
| "回测好 = 实盘好" | 回测是过去，实盘是未来；市场会变化，策略会失效 |
| "亏损了是模型有问题" | 短期亏损可能只是正常的随机波动，不要频繁换策略 |
| "我找到了一个完美策略" | 不存在永远有效的策略，所有策略都会有失效期 |
| "只要技术够好就能赚钱" | 纪律执行、风险控制、情绪管理同样关键 |

### 10.2 量化投资者的核心纪律

```
① 严格执行信号，不用直觉覆盖（除非明确发现 Bug）
   "我觉得今天大盘要跌，不买了" → 这是在破坏策略的统计基础

② 以月或季度为周期评估策略，不以日为单位焦虑
   连续亏 3 天不代表策略失效；连续亏 3 个月可能需要检查

③ 只用"闲钱"做量化
   用生活必需金做量化 → 心理压力导致执行变形 → 放大亏损

④ 先求"不亏大钱"，再求"稳定盈利"
   设定严格的止损和最大回撤限制，在学习期保住本金

⑤ 保持持续学习，不断迭代
   A 股市场在变化，因子会失效，策略需要更新
   量化不是"一劳永逸"，而是持续的研究工作
```

### 10.3 资金管理的"三个账户"思维

```
生活资金（绝对不能动）
    ↓
投资储蓄（传统股票/基金，长期持有）
    ↓
量化研究资金（可以全部亏损的部分）
   → 初期建议：不超过总可投资资产的 20%
   → 入门期建议：1-5 万元
```

### 10.4 成功的量化投资者的特征

- **工程师思维**：系统化、规则化，不依赖感觉
- **科学家心态**：愿意承认假设错误，不断迭代
- **风险第一意识**：先问"最坏情况是什么"，再问"最好情况是什么"
- **长期主义**：量化策略的优势在于长期统计，不要被短期噪音干扰
- **持续复盘**：每笔交易、每月业绩都有完整记录

---

## 总结：最重要的 10 点

1. ⚠️ **T+1 + 涨跌停 + 印花税** — 这三个 A 股规则让所有 Demo 结果都需要打折扣
2. ⚠️ **幸存者偏差** — 必须使用包含已退市股票的完整股票池
3. ⚠️ **财报前视偏差** — 使用财报数据时必须遵守 ann_date
4. ⚠️ **交易成本** — 月频换仓约消耗年化 3-4%，日频策略几乎不可能盈利
5. ⚠️ **A 股无法做空** — 多空策略需要用股指期货替代，且有门槛
6. 🔑 **风险管理第一** — 止损、仓位控制、回撤限制，保住本金才有未来
7. 🔑 **模拟盘 3 个月以上** — 收集足够数据再判断策略是否有效
8. 🔑 **小资金验证** — 实盘最初只用 1-5 万，目标是学习而非赚钱
9. 🔑 **严格执行信号** — 不要用直觉覆盖量化信号
10. 🔑 **持续迭代** — 量化不是一劳永逸，市场会变化，策略需要更新

---

## 附录：本系列文档导航

| 篇 | 文件 | 文档 | 核心内容 |
|----|------|------|----------|
| 第 1 篇 | `quant_data_pipeline_demo.py` | `doc_01_data_pipeline.md` | 复权、收益率、缺失值、异常值 |
| 第 2 篇 | `quant_strategy_backtest_demo.py` | `doc_02_strategy_backtest.md` | 技术指标、策略逻辑、向量化回测 |
| 第 3 篇 | `quant_event_driven_backtest_demo.py` | `doc_03_event_driven_backtest.md` | 事件驱动架构、成本模型 |
| 第 4 篇 | `quant_alpha_factor_demo.py` | `doc_04_alpha_factor.md` | 因子构建、IC/ICIR、分层回测 |
| 第 5 篇 | `quant_portfolio_optimization_demo.py` | `doc_05_portfolio_optimization.md` | MVO、风险平价、Black-Litterman |
| **导航** | — | **`doc_06_astock_practice_guide.md`** | **A股规则、路径规划、实盘注意事项** |
