trading/doc_06_astock_practice_guid...

33 KiB
Raw Permalink Blame History

A 股量化交易:从学习到实盘的完整路径

学习路径规划与注意事项指南

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


目录

  1. 当前五篇 Demo 的知识地图
  2. A 股特有规则Demo 与现实的差距
  3. 回测七大陷阱
  4. 风险管理:能否活到盈利那天
  5. 真实数据接入
  6. 基本面因子:价格因子的补充
  7. 执行层:从信号到成交
  8. 推荐工具与平台
  9. 完整学习与实践路径
  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: 你买入一只股票,连续多个涨停板
       每天想追买却买不到
       → 回测"买入成功"但现实中不可能成功

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

# 示例:过滤掉当天涨停的股票(无法以涨停价买入)
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使得某个时刻用到了它"不应该知道"的数据。

# 错误示例(常见 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:每笔交易不超过总资产的固定比例。

# 每笔交易最多动用总资产的 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

# 监控组合回撤,超过阈值自动降仓
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 更保守,更适合度量尾部风险。

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 快速上手示例

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 快速上手示例

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退市股票的幸存者偏差

# 获取所有股票(包括退市的),按照每个历史时点重建股票池
all_stocks = pro.stock_basic(list_status='L')   # 上市中
delisted   = pro.stock_basic(list_status='D')   # 已退市
# 合并后,在回测中对每个历史日期,只使用"当时已上市未退市"的股票

问题2财报披露延迟

# 使用 ann_date公告日而非 end_date报告期末
# 这确保你只在数据公开披露后才能"看到"它
df = df.sort_values('ann_date')
# 在回测中,只使用 ann_date <= 当前回测日期 的财报数据

问题3ST 股过滤

# 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% 单边

在回测中模拟滑点

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股规则、路径规划、实盘注意事项