!!! abstract "本篇导览"
| 项目 | 说明 |
|------|------|
| **目标** | 建立量化交易与策略开发的基本概念,了解完整流程与常见误区 |
| **预计用时** | 45~60 分钟(可按目录跳读) |
| **前置** | 请先完成 [Tutorial 00](00_environment_and_first_run.md) |
从零开始理解量化交易,了解策略开发的基本思路和注意事项。
量化交易(Quantitative Trading)是用数学模型和计算机程序来制定和执行交易决策的方法。与主观交易(凭经验、直觉判断)不同,量化交易把投资逻辑写成明确的规则,让计算机自动执行。
主观交易思路:
"我觉得工商银行最近涨得不错,均线看起来要金叉了,买点试试。"
量化交易思路:
"当 601390 的 5 日均线向上穿越 20 日均线,且当日收盘价高于 5 日均线 2% 以上时,用全部可用现金买入;当 5 日均线下穿 20 日均线时,全部卖出。"
两者的核心区别在于:可验证、可复制、可回溯。
Python 是量化交易领域最主流的语言,原因在于:
- 语法简洁,上手门槛低
- 拥有最完整的金融生态库(pandas、numpy、scipy、matplotlib)
- 有丰富且免费的数据源(akshare、tushare 等)
EasyQuant(eqlib)是一个面向 中国 A 股市场 的轻量级量化策略框架,它提供:
- 一套简单直观的策略 API(事件驱动模式)
- 免费的 A 股数据源(akshare)
- 完整的回测、报告生成、模拟盘功能
- 可以导出到 PTrade/QMT 平台进行实盘
任何一个可运行的量化策略,都包含以下 5 个要素:
确定你要操作哪些股票。常见的选择方式:
- 固定列表:事先选定几只股票(如
'601390', '600519', '000858') - 指数成分股:沪深 300、中证 500 的成分股
- 行业板块:某个行业的成分股(如白酒、新能源)
- 动态筛选:按财务指标(PE/PB/ROE)、技术指标(均线排列)、资金流向等条件实时筛选
什么时候买入?这就是你的信号。常见类型:
| 类型 | 例子 |
|---|---|
| 趋势跟踪 | 短期均线上穿长期均线(金叉) |
| 均值回归 | 价格偏离均线超过 N 个标准差,赌它回归 |
| 动量策略 | 过去 N 天涨幅排名前 10% 的股票 |
| 事件驱动 | 财报发布、分红派息、龙虎榜等 |
| 资金流向 | 主力资金连续 N 日净流入 |
什么时候卖出?出场和入场同样重要:
| 类型 | 例子 |
|---|---|
| 信号反转 | 金叉买入 → 死叉卖出 |
| 止损 | 亏损超过 5% 无条件卖出 |
| 止盈 | 盈利超过 20% 后回落 5% 卖出 |
| 时间止损 | 持仓超过 20 个交易日仍不盈利则卖出 |
| 调仓换股 | 定期(如每周一)重新评估,替换为更好的标的 |
决定每次买多少:
| 方式 | 说明 | 适用场景 |
|---|---|---|
| 全仓 | 所有资金买入一只股票 | 单股策略 |
| 等权 | 多只股票平分资金 | 组合轮动 |
| 固定比例 | 每次投入可用资金的固定百分比 | 渐进建仓 |
| Kelly 公式 | 根据胜率和盈亏比计算最优仓位 | 有历史数据的成熟策略 |
| ATR 仓位 | 根据波动率动态调整仓位大小 | 风控严格的策略 |
- 单只股票最大仓位(不超过总资金的 30%)
- 最大回撤阈值(回撤超过 15% 暂停策略)
- 止损线(单只亏损超过 8% 强制卖出)
- 行业集中度限制(同一行业不超过 40%)
想法 → 规则化 → 回测验证 → 优化 → 模拟盘 → 实盘
来源可以是:
- 阅读经典的交易书籍(《海龟交易法则》《技术分析》《量化投资》)
- 研究市场现象(如"一月效应"、"周一效应")
- 观察他人的成功经验
- 自己交易中的体会和总结
把模糊的想法变成明确的、可计算的规则:
模糊想法:"低价股更容易涨"
规则化:
1. 选择股价低于 10 元的 A 股
2. 排除 ST 股
3. 每周一等权买入符合条件的全部股票
4. 每周五全部卖出
5. 回测期间:2023-01-01 至 2024-12-31
用历史数据运行你的规则,看结果如何。
回测能告诉你什么:
- 策略是否盈利?年化收益多少?
- 最大回撤有多大?能接受吗?
- 夏普比率如何?风险调整后是否优秀?
- 与大盘相比,是跑赢还是跑输?
调整参数,让策略表现更好。
但必须警惕过拟合——在历史数据上表现完美,实盘却亏钱。避免过拟合的方法:
- 样本外验证:用 2020-2023 年调参,用 2024 年验证
- 参数稳定性检验:参数微调后结果不应剧烈变化
- 避免过多参数:参数越多,过拟合风险越大
- 逻辑驱动而非数据驱动:参数要有经济学或行为金融学的支撑
回测通过后,用实时行情跑模拟盘(paper trading),在不花真金白银的情况下验证策略在"真实环境"中的表现。
模拟盘验证后,可以小仓位开始实盘交易,逐步增加仓位。
# 错误:没考虑手续费
# 一天交易 5 次,每次佣金 0.03% + 印花税 0.1%,一年累积成本巨大
# 正确做法:设置合理的交易成本
set_order_cost(OrderCost(
open_tax=0,
close_tax=0.001, # 卖出印花税 0.1%
open_commission=0.0003, # 买入佣金 0.03%
close_commission=0.0003,
min_commission=5, # 最低佣金 5 元
))# 错误:使用了当天收盘价做决策,但决策是在开盘时做的
def market_open(context):
# 在开盘时就拿到了当天收盘价——这是不可能的!
today_close = get_today_close('601390')
if today_close > ma20:
order(...)
# 正确做法:只用历史数据做决策
def market_open(context):
# 用昨天及之前的数据
hist = attribute_history('601390', 20, '1d', ['close'])
# hist 只包含昨天及之前的 20 天数据# 错误:只测试当前还在上市的股票,忽略了已退市/ST 的股票
# 这会导致回测结果虚高
# 正确做法:使用历史成分股列表,或 scan_market 获取当时的全市场股票# 错误:对小盘股用大资金回测,实际成交量无法支撑
# 每天成交 100 万,你回测要买入 500 万——不可能成交
# 正确做法:检查股票日均成交量,确保你的下单金额合理
vol = attribute_history(sec, 20, '1d', ['volume'])
avg_volume = vol['volume'].mean()
# 你的下单股数不应超过日均成交量的 5-10%# 错误:在回测中不断调参直到曲线完美
# MA5/MA20 效果不好 → 试 MA7/MA23 → 试 MA3/MA17 → ...
# 最终找到一组参数回测年化 50%,实盘大概率亏损
# 正确做法:
# 1. 参数要有逻辑支撑(为什么是 20 而不是 23?)
# 2. 检验参数稳定性(MA18/MA22 和 MA20/MA25 结果应该接近)
# 3. 留出样本外数据做最终验证# 错误:假设你能以收盘价成交
# 实际下单时,价格可能已经变动
# EasyQuant 中的处理:
# 回测中订单会先入队,在下一交易日开盘价成交
# 但实际交易中会有滑点,通常估计为 0.1%-0.3%# 错误:今天买入,今天就想卖出
# A 股实行 T+1 交易制度,当天买入的股票下一交易日才能卖出
# EasyQuant 内部自动处理 T+1 限制
# 通过 Position.closeable_amount 控制可卖数量# 错误:策略 A 年化 30%,最大回撤 40%
# 策略 B 年化 15%,最大回撤 8%
# 只看收益选 A,但看夏普比率可能 B 更好
# 正确做法:关注风险调整后的指标
# - 夏普比率(Sharpe Ratio)
# - 最大回撤(Max Drawdown)
# - 索提诺比率(Sortino Ratio)# 错误:只有买入条件,没有卖出/止损条件
# "跌了就拿着,总会涨回来"——有些股票不会
# 正确做法:每个买入信号都应该配套对应的卖出规则
# 信号止损 / 固定比例止损 / ATR 追踪止损 / 时间止损# 错误:回测跑完就直接满仓实盘
# 正确做法:
# 1. 回测验证(历史数据)
# 2. 模拟盘(实时行情,虚拟资金)
# 3. 小仓位实盘(真实资金,但控制风险)
# 4. 逐步增加仓位以下三个前置知识文件提供了更完整的学习材料,可在需要时深入阅读:
| 前置文件 | 涵盖内容 | 链接 |
|---|---|---|
| Python 基础与环境配置 | 语法速查、pandas/numpy 核心操作、虚拟环境 | prerequisites/python_basics.md |
| 技术分析基础概念 | OHLCV、均线、RSI、MACD、布林带、ATR、KDJ、ADX | prerequisites/technical_concepts.md |
| A 股市场基础知识 | 股票代码格式、T+1、涨跌停、常用指数、ST 股、手续费与税 | prerequisites/ashare_knowledge.md |
| 领域 | 内容 | 学习建议 |
|---|---|---|
| Python 基础 | 变量、函数、循环、条件判断 | 1-2 周;或直接查 前置文件 |
| pandas | DataFrame、Series、索引、聚合 | 1-2 周;核心用法见 前置文件 §4 |
| 技术指标 | 均线、MACD、RSI、布林带 | 边学边用;系统介绍见 前置文件 |
| A 股基础规则 | T+1、涨跌停、手续费 | 半天;详见 前置文件 |
| 领域 | 内容 |
|---|---|
| 风险管理 | Kelly 公式、VaR、最大回撤 |
| 投资组合理论 | 有效前沿、风险平价 |
| 绩效归因 | Brinson 归因、Fama-French 因子 |
| 数据可视化 | matplotlib 基础图表 |
| 领域 | 内容 |
|---|---|
| 机器学习 | 分类、回归、特征工程 |
| 时间序列分析 | ARIMA、GARCH |
| 数据库 | SQLite、PostgreSQL |
| 系统编程 | 多进程、定时任务 |
完成了基础概念的学习,接下来:
- Tutorial 02: 写第一个策略 — 用 EasyQuant 编写并运行你的第一个量化策略
- Tutorial 03: 回测验证 — 深入理解回测,检验策略的历史表现
- Tutorial 04: 策略优化与改进 — 参数调优、避免过拟合、组合策略
- Tutorial 05: 模拟盘到实盘 — 从模拟盘到 PTrade/QMT 实盘部署
- Tutorial 06: RSI 均值回归策略 — 深入学习均值回归这一经典策略类型
- Tutorial 07: 行业轮动策略 — 利用 A 股行业轮动特性赚取超额收益
- Tutorial 08: 多因子选股 — 系统化地用多个因子组合选出优质股票