trading/doc_08_personal_investor_gu...

297 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

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.

# 个人投资者量化交易实操指南
## 从 Demo 到实盘的完整路径
> **定位**:本文档基于对整个 Demo 系列的代码审计和策略评估,为个人投资者回答三个核心问题——做什么策略、怎么做策略、用什么平台做。
> **前置阅读**:建议已通读完 7 篇 Demo 后阅读本文。
> **目标读者**:有 Python 基础的量化入门者,关注 A 股实操。
---
## 目录
1. [代码库总览与知识体系](#1-代码库总览与知识体系)
2. [ETF 轮动 Demo 深度评估](#2-etf-轮动-demo-深度评估)
3. [个人投资者的现实策略频谱](#3-个人投资者的现实策略频谱)
4. [中低频策略的核心范式](#4-中低频策略的核心范式)
5. [情绪因子与突发事件量化](#5-情绪因子与突发事件量化)
6. [从 Demo 到实盘:平台与工具链](#6-从-demo-到实盘平台与工具链)
7. [推荐学习与实践路径](#7-推荐学习与实践路径)
---
## 1. 代码库总览与知识体系
### 1.1 项目定位
这是一个**A 股量化交易教学 Demo 项目**,定位为零基础入门到中级的渐进式学习系列。项目以纯 Python + numpy/pandas/scipy/matplotlib 构建,通过合成模拟数据演示完整的量化投研工作流。
### 1.2 七篇递进式模块
| 序号 | 文件 | 主题 | 核心技能 |
|------|------|------|----------|
| 1 | `quant_data_pipeline_demo.py` (920行) | 数据管道 | 价格复权、收益计算、缺失值处理、异常值检测(MAD/Z-score/Winsorize)、涨跌停标记、交易日历对齐、DataPipeline 类 |
| 2 | `quant_strategy_backtest_demo.py` (912行) | 策略回测 | SMA/EMA/RSI/MACD/Bollinger Band 技术指标、双均线策略、RSI 均值回归、向量化回测引擎、绩效指标(Sharpe/Sortino/Calmar/Win Rate/Profit Factor)、滚动前向验证 |
| 3 | `quant_event_driven_backtest_demo.py` (1532行) | 事件驱动回测 | 事件队列架构(Market/Signal/Order/Fill 四事件)、五大组件解耦(DataHandler/Strategy/Portfolio/SimulatedBroker/BacktestEngine)、滑点+佣金+最低佣金模型、与向量化回测的精确对比 |
| 4 | `quant_alpha_factor_demo.py` (1023行) | Alpha 因子研究 | 隐藏因子生成模型、5 因子构建(MOM/REV/LVOL/BAB/ILLIQ)、三段预处理(去极值→Z-score→市值中性化)、IC/ICIR 分析、五分位分层回测、等权与 IC 加权因子合成、多空组合 |
| 5 | `quant_portfolio_optimization_demo.py` (950行) | 组合优化 | Ledoit-Wolf 收缩协方差、有效前沿、5 策略对比(等权/MinVar/MaxSharpe/RiskParity/Black-Litterman)、带行业约束+换手率约束的优化、滚动回测 |
| 6 | `doc_06_astock_practice_guide.md` | A 股实盘指南 | Demo 到实盘的差距清单、A 股特殊规则(涨跌停/T+1/融券限制/印花税)、回测七大陷阱(前视偏差/幸存者偏差/过拟合等)、风险管理、工具推荐 |
| 7 | `quant_etf_rotation_demo.py` (849行) | ETF 轮动 | 相对动量轮动、双动量策略(含国债 ETF 避险)、A 股交易成本模型、持仓热力图、换手率分析 |
### 1.3 架构特点
- **合成数据驱动**:全部使用几何布朗运动/因子模型生成模拟价格,无需外部数据源即可运行
- **纯数值计算栈**:依赖仅 numpy/pandas/scipy/matplotlib/sklearn无量化框架依赖
- **双语教学**:代码注释中英文对照,函数 docstring 包含公式推导和直观解释
- **可视化输出**:每个脚本生成对应的 PNG 图表,共 6 张(约 3MB
- **教学级代码**:结构清晰但非生产级——缺少错误处理、性能优化、模块间复用
---
## 2. ETF 轮动 Demo 深度评估
### 2.1 代码审计结论
`quant_etf_rotation_demo.py` 是系列第 7 篇,定位为"入门者可快速用于 A 股实战的策略模板"。以下是分维度评估:
**做得好的方面**
1. **策略设计务实。** 选择 ETF 轮动而非个股选股——ETF 规避了个股黑天鹅(财务造假、退市等),对个人投资者远比 Alpha 选股更可行。双动量策略在熊市自动切换至国债 ETF 避险,契合 A 股"牛短熊长"的特征。
2. **成本模型贴近 A 股实情。** `AShareCostModel` 区分了买入成本(佣金+滑点)和卖出成本(佣金+滑点+印花税),双边合计约 0.22%,年化约 2.6% 的成本拖拽是实盘中不可忽视的数字。
3. **多窗口动量合成减少过拟合。** 使用 12-1、6-1、3-1 三个月度动量窗口的等权合成,比固定单一窗口更稳健。
4. **持仓热力图信息密度高。** 一眼就能看出策略何时从行业 ETF 切换到国债 ETF避险阶段以及哪些行业被频繁选中。
5. **代码结构清晰。** 数据生成、因子计算、回测引擎、绩效评估四个模块分离干净,通过 strategy 参数切换三种策略避免了代码重复。
**需要改进的方面**
| 问题 | 严重程度 | 说明 |
|------|---------|------|
| 合成数据过于理想化 | 高 | A 股行业 ETF 普遍成立于 2019 年后,历史不足 6 年。Demo 设定的收益/波动参数与真实情况可能存在大幅偏差。合成数据的回测结果**数字不可直接采信** |
| 动量崩溃风险未量化 | 中 | 文档提到了动量崩溃,但代码中无专门分析场景。趋势反转当月是最危险的时刻 |
| top_k=3 缺乏敏感性分析 | 中 | 选 2 只和选 4 只的结果可能差异巨大,未展示参数稳健性 |
| 再平衡日期未考虑日历效应 | 低 | A 股月末/季末存在基金调仓压力,与月中微观结构不同 |
| 双动量绝对阈值=0 是最简设定 | 低 | 阈值设为无风险利率或滚动均线可能更优 |
| 无统计显著性检验 | 低 | 未判断双动量是否显著优于等权基准 |
### 2.2 总体评价
这是一篇**质量不错的 ETF 轮动教学 Demo**——策略逻辑清晰、成本模型务实、图表信息量大。适合作为入门者理解"动量轮动"概念的起点。但它仍然是**教学级而非生产级代码**。
**如果要在 A 股实盘使用这个策略,第一步是用 AKShare/Tushare 拉取真实 ETF 日线数据替换合成数据,重新跑一遍——合成数据给的回测结果,一个字都不要信。**
---
## 3. 个人投资者的现实策略频谱
### 3.1 按交易频率分层的可行性
| 频率 | 持仓周期 | 个人可行性 | 瓶颈 |
|------|----------|-----------|------|
| 高频 (HFT) | 毫秒~秒 | **不可行** | 需要 colocation、FPGA、专线年成本百万级 |
| 日内短线 | 分钟~小时 | **很难** | 需要极低延迟、全职盯盘、A 股 T+1 限制做空 |
| **中频** | 天~周 | **可行** | 数据可得,决策时间充裕,成本可控 |
| **低频** | 月~季度 | **最可行** | 成本极低,逻辑清晰,适合业余管理 |
**结论**:周频或月频换仓的策略是个人投资者的甜点区——交易成本可控,不需要盯盘,决策可以批量处理。
### 3.2 不同资金量级的推荐策略
| 资金量 | 推荐策略 | 标的 | 换仓频率 |
|--------|---------|------|----------|
| < 10万 | ETF 轮动动量+估值| 行业 ETF + 国债 ETF | 月度 |
| 10-50万 | ETF 轮动 + 股债配置 | 行业 ETF + 宽基 ETF + 国债 ETF + 可转债 ETF | 月度/季度 |
| > 50万 | 多因子选股 + 资产配置 + 风控层 | 个股(50-100只池) + ETF + 固收 | 周度/月度 |
---
## 4. 中低频策略的核心范式
中低频策略可以归纳为三类,本项目的 Demo 已经覆盖了其中两类。
### 4.1 因子选股 / ETF 轮动(截面策略)
每月/每周对候选池排序,买入排名最高的 N 只,卖出跌出排名的。信号来源包括:
| 因子类型 | 代表性因子 | A 股有效性证据 |
|----------|-----------|---------------|
| 动量 (Momentum) | 过去 12-1 个月收益 | ⭐⭐⭐ 中等,行业层面比个股层面更有效 |
| 价值 (Value) | PE/PB 分位数 | ⭐⭐⭐⭐ 强A 股中低 PE 策略长期有效 |
| 质量 (Quality) | ROE、毛利率稳定性 | ⭐⭐⭐ 中等偏强 |
| 低波动 (Low Vol) | 60/120 日已实现波动率 | ⭐⭐⭐ 中等A 股低波异象存在但有争议 |
| 流动性 (Liquidity) | Amihud 非流动性指标 | ⭐⭐ 较弱,小市值拥挤 |
**实际运行流程**:每月最后一个交易日收盘后 → 计算因子排名 → 生成调仓信号 → 次日开盘执行 → 持有到下次调仓。
### 4.2 资产配置 / 风险平价(时序策略)
不是选哪只股票,而是决定**股票 vs 债券 vs 商品各配多少**。常见做法是每季度再平衡一次,回归目标权重。代表模型:
- 风险平价 (Risk Parity):桥水全天候策略的理论基础
- Black-Litterman贝叶斯框架混合市场均衡 + 主观观点
### 4.3 宏观择时(时序策略)
根据宏观指标决定整体仓位。几组实用指标:
- 利率趋势10 年期国债收益率方向)→ 利率下行利好股票
- 信贷脉冲(社融增速变化)→ 信贷扩张期股票表现好
- CPI 方向 → 高通胀环境利好商品/价值股
这类策略一个月看一次数据即可,和日常生活节奏完全兼容。
---
## 5. 情绪因子与突发事件量化
### 5.1 情绪因子:可以量化,而且是重要的 Alpha 来源
Demo 中用的价格/成交量/波动率都是"硬数据",但"软数据"在很多场景下提供了独立于价格的预测信息。
| 数据源 | 因子示例 | 数据获取 |
|--------|---------|---------|
| 北向资金流向 | 每日净买入额及其滚动均值 | 沪深港通公开数据AKShare 直接获取 |
| 融资融券余额 | 融资余额变化率(反映散户杠杆情绪) | 交易所每日发布AKShare 直接获取 |
| 涨停/跌停家数 | 市场宽度指标(涨跌比) | 全市场统计,可自行计算 |
| 成交量比率 | 放量/缩量程度,量价背离 | 价格数据可算 |
| 50ETF 期权隐含波动率 | 中国版 VIX 恐慌指标 | 期权数据 API |
| 龙虎榜数据 | 机构 vs 游资买卖方向 | 交易所盘后披露 |
| 股指期货升贴水 | 基差率反映市场多空情绪 | CFFEX 数据 |
| 新闻文本情绪(进阶) | NLP 对财经新闻标题做情感打分 | 大模型 API / 本地模型 |
**务实建议**:个人投资者从**北向资金流向**和**融资余额变化率**两个情绪因子起步——数据免费、逻辑直观、A 股文献支持多。NLP 新闻分析属于锦上添花,初期不必碰。
### 5.2 突发事件的量化处理
突发事件(政策发布会、国际冲突、突发新闻)很难用传统量价因子捕捉,但有三种处理思路:
1. **事后过滤而非事前预测(最务实)**:不试图预测事件发生,而是在事件发生后检测异常波动并自动暂停策略。本项目 `quant_data_pipeline_demo.py` 中的涨跌停标记就是一种"flag and skip"模式——标的触发涨跌停 → 标记 → 策略层跳过该标的。
2. **波动率缩放**:当已实现波动率突然放大(说明有事件冲击),自动降低仓位。实现简单、效果扎实:
```
目标仓位 = 基础仓位 × (目标波动率 / 近期已实现波动率)
```
3. **文本情绪监控**:用大模型对财经新闻标题做情感分析,构建日频情绪指数。当前有大模型后门槛大幅降低——可以用本地模型批量打分。属于"另类数据因子"的范畴,初期可选。
---
## 6. 从 Demo 到实盘:平台与工具链
### 6.1 三条实现路径
Demo 代码在本地跑跑看图表是"研究阶段"。实盘涉及三个层次:
```
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 研究平台 │ ──▶ │ 执行平台 │ ──▶ │ 券商终端 │
│ 因子→回测 │ │ 信号→订单 │ │ 成交回报 │
└──────────────┘ └──────────────┘ └──────────────┘
```
**路径一Python 开源框架 + 券商 API最主流推荐**
| 框架 | 定位 | 特点 |
|------|------|------|
| **vnpy** | 全栈交易框架 | 对接国内券商 CTP/XTP 接口,支持 A 股/期货/期权实盘,社区活跃 |
| **Backtrader** | 回测为主 | 灵活的事件驱动架构,实盘对接需自行开发 |
| **Qlib** (微软) | 因子研究 | AI 驱动的因子挖掘和模型训练,适合因子研究阶段 |
| **Zipline-Reloaded** | 回测引擎 | 事件驱动架构完善,但 A 股生态较弱 |
典型工作流:
1. 在 Qlib 或自定义代码中做因子研究 ← **你现在的阶段**
2. 用 Backtrader 做精细回测(含滑点/冲击成本模型)
3. 用 vnpy + 券商仿真环境做模拟交易(纸交易,至少跑 1-2 个月)
4. 确认策略行为正常后,接入小资金实盘(不是全仓!)
5. 策略稳定运行 3-6 个月后,逐步增加资金
**路径二:在线量化平台(低门槛)**
| 平台 | 特点 |
|------|------|
| 聚宽 (JoinQuant) | 网页端写 Python 策略,内置回测 + 模拟交易,社区教程丰富 |
| 米筐 (RiceQuant) | 类似聚宽,数据质量和覆盖更优但偏机构 |
| 掘金 (MyQuant) | 支持本地化部署 + 实盘,灵活度更高 |
| BigQuant | AI 导向,可视化拖拽搭建,适合不想写代码的投资者 |
优点:数据现成、回测环境标准、模拟交易一键启动。
缺点:策略代码运行在平台上,灵活性受限;实盘通常走指定券商。
**路径三:券商自带量化终端**
| 券商 | 平台 | 特点 |
|------|------|------|
| 华泰证券 | MATIC | 内置因子库 + 策略模板,适合入门 |
| 中泰证券 | XTP | 极速交易接口,面向程序化交易 |
| 国信证券 | iQuant | 类似聚宽的在线平台 |
| 中信建投 | 蜻蜓点金 | 量化策略商城模式 |
### 6.2 Demo 代码到实盘需要增补的模块
`quant_etf_rotation_demo.py` 为例,从 Demo 到可实盘运行,至少需要做:
| 步骤 | 内容 | 优先级 |
|------|------|--------|
| 1. 替换数据源 | 合成数据 → AKShare/Tushare 真实 ETF 日线 | 必须 |
| 2. 接入交易日历 | 使用 `exchange_calendars` 或 A 股专用日历 | 必须 |
| 3. 信号与执行分离 | `run_rotation_backtest()` 拆成"信号计算"+"订单执行" | 必须 |
| 4. 仓位校验 | 检查涨跌停、停牌、流动性、最小交易单位 | 必须 |
| 5. 风控层 | 单只 ETF 最大仓位、最大回撤止损线、连续亏损暂停机制 | 强烈建议 |
| 6. 日志与告警 | 调仓清单输出、异常情况推送(企业微信/钉钉/邮件) | 强烈建议 |
| 7. 模拟交易验证 | 在真实券商仿真环境跑 1-2 个月 | 强烈建议 |
| 8. 参数稳健性检验 | 对 top_k、回望期、再平衡频率做敏感性分析 | 建议 |
| 9. 绩效归因 | Brinson 归因 / 因子归因,确认收益来源 | 进阶 |
---
## 7. 推荐学习与实践路径
### 7.1 推荐的策略选型(最可行的组合)
```
核心仓位:月频 ETF 行业轮动
├── 信号:动量 (12-1M) × 估值 (PE 分位数) 双信号过滤
├── 避险:绝对动量为负 → 切换至国债 ETF
├── 增强:北向资金流向 + 融资余额变化作为情绪因子
└── 风控:波动率放大时自动减仓(波动率缩放)
再平衡频率:月度(每月最后一个交易日出信号,次日开盘执行)
预期年换手6-10 次双边
预期年化成本:约 1.5%-2.5%(含佣金+印花税+滑点)
```
### 7.2 分阶段学习路线
| 阶段 | 时间 | 目标 | 对应 Demo |
|------|------|------|-----------|
| ① 概念建立 | 1-2 周 | 理解数据→信号→回测→优化的完整链条 | 全部 7 篇 Demo |
| ② 数据实战 | 1 周 | 用 AKShare 拉取真实 ETF 数据,替换合成数据重新验证 | Demo 1 + 7 |
| ③ 因子研究 | 2-4 周 | 在真实数据上计算因子 IC找到有效的因子组合 | Demo 4 |
| ④ 回测验证 | 2-4 周 | 在 Backtrader/vnpy 中实现完整回测,含交易成本 + 参数敏感性 | Demo 2 + 3 |
| ⑤ 模拟交易 | 1-2 月 | 在券商仿真环境中每日自动运行,记录所有交易和意外情况 | — |
| ⑥ 小资金实盘 | 3-6 月 | 用总资金的 10-20% 试跑,严格记录绩效 | — |
| ⑦ 规模扩大 | 持续 | 策略稳定后逐步加仓,持续监控绩效归因和风格漂移 | — |
### 7.3 最重要的提醒
> **如果一个策略你不能用三句话解释清楚为什么它会赚钱,就不要投钱进去。**
量化策略的核心不是代码有多复杂,而是**你理解策略赚的是谁的钱、在什么市场环境下会失效、最大可能亏损是多少**。
Demo 给你的是知识地图,不是提款机密码。实盘中最重要的是**仓位管理和风险控制**——一个夏普比率一般的策略配合严格的仓位纪律,远好于一个夏普很高的策略加上随意的主观干预。
---
## 附录:关键术语速查
| 术语 | 英文 | 含义 |
|------|------|------|
| 截面策略 | Cross-Sectional Strategy | 在同一时间点横跨多只股票比较和选择 |
| 时序策略 | Time-Series Strategy | 对单一资产做择时(何时进、何时出) |
| 动量崩溃 | Momentum Crash | 趋势突然逆转导致动量策略大幅亏损 |
| 换手率 | Turnover | 组合中资产被替换的比例,越高成本越大 |
| 纸交易 | Paper Trading | 使用真实行情但虚拟资金进行模拟交易 |
| 前视偏差 | Look-Ahead Bias | 用"未来数据"做回测决策导致的虚假高收益 |
| 幸存者偏差 | Survivorship Bias | 只用当前存活的股票回测,忽略了已退市的股票 |
| 风格漂移 | Style Drift | 策略实际持仓偏离了其宣称的投资风格 |