trading/doc_06_astock_practice_guid...

851 lines
33 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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免费注册积分获取数据
第三阶段(模拟盘): 聚宽 / 掘金量化(含模拟交易环境)
第四阶段(实盘): 券商 APIXTP / 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 <= 当前回测日期 的财报数据
```
**问题3ST 股过滤**
```python
# ST、*ST 股票风险极高,通常需要过滤掉
is_st = df['name'].str.contains('ST')
df_clean = df[~is_st]
```
---
## 6. 基本面因子
### 6.1 为什么需要基本面因子?
当前 Demo 中的五个因子MOMREVLVOLBABILLIQ全部基于**价格和成交量**称为"技术因子""量价因子"。
基本面因子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股规则、路径规划、实盘注意事项** |