Topic: Quantitative Trading
Keywords: Backtest, CTA, Risk Management, Statistical Arbitrage, Factor Research, OMS
第一章:量化交易是什么
量化交易(Quantitative Trading)是指用数学模型和计算机程序,将交易决策系统化、规则化,避免人为情绪干扰的交易方式。
与主观交易相比,量化交易的核心优势有三点:
- 纪律性:策略一旦确定,严格执行,不受恐惧和贪婪影响
- 可验证:策略可以在历史数据上提前测试,上线前就知道大致效果
- 可扩展:一套代码可以同时监控几十个交易对,人力无法比拟
与现货交易经验的关系
在现货交易中积累的市场感觉、对 BTC 走势的判断、对市场情绪的把握,都是宝贵的”策略原型”。量化要做的,是把这些直觉用代码写下来,用历史数据验证它,然后让计算机自动执行。
量化平台的核心模块
一个完整的量化平台通常包含以下几个功能层,各层职责清晰、互相独立:
| 模块 | 职责 |
|---|---|
| 数据层 | 从交易所拉取行情数据,存储和清洗 |
| 策略层 | 根据数据产生买卖信号(CTA / 套利等) |
| 回测引擎 | 用历史数据验证策略有效性 |
| 风控模块 | 过滤和限制订单,防止异常损失 |
| 执行层 | 把策略信号转换成真实订单发往交易所 |
| 监控告警 | 实时监控账户状态,异常时推送通知 |
第二章:回测(Backtest)
2.1 什么是回测
回测是指把交易策略放到历史数据上运行,模拟计算出如果过去按照这套规则交易,最终的盈亏结果。
直观类比:假设你有一个直觉——“每当 BTC 的 7 日均线上穿 30 日均线,价格往往会继续涨一段时间”。回测就是把这条规则放到过去 2 年的 K 线数据上,模拟每次触发时买入、离场时卖出,算出总盈亏、最大亏损、胜率等数据,用数字验证这个直觉是否真的有效。
2.2 前视偏差(Look-ahead Bias)——回测最大的坑
前视偏差是回测中最常见、也最致命的错误。指在计算信号时,错误地使用了”未来才会出现”的数据,导致回测结果虚高,上了实盘就打回原形。
错误示例:用今天的收盘价来决定今天是否开仓——但收盘时才知道收盘价,那时已经来不及在收盘价买入了。
避免前视偏差的核心原则:
- 信号计算只能使用 K 线收盘后确认的数据
- 特征计算需要对时间序列做”错位”(shift 1 期),确保 $T$ 时刻的信号只用 $T-1$ 时刻的数据
- 禁止用当日收盘价在当日开仓
2.3 回测的局限性
即使回测结果很漂亮,也不能保证实盘同样有效,原因主要有三:
- 过拟合风险:参数是针对历史数据”调出来的”,换一段时间可能完全失效(详见第六章)
- 市场冲击:回测假设订单以特定价格成交,但实盘中大单会影响价格
- 手续费和滑点:回测如果不准确建模这两项成本,结果会虚高
手续费的重要性:以 OKX 现货为例,Maker 手续费 0.08%,Taker 手续费 0.1%。看起来很小,但如果策略每天交易 10 次,一年就是 3650 次,单边手续费累计可能超过 36%。低频策略对手续费不敏感,高频策略则必须极其精确地建模。
第三章:绩效指标
回测跑完之后,需要用一组标准指标来客观评价策略的好坏。单看一个指标往往会被误导,必须综合来看。
| 指标 | 通俗解释 | 参考标准 |
|---|---|---|
| 年化收益率 | 折算成每年赚多少 %,最基础的衡量标准 | 跑赢无风险利率即算有意义 |
| 最大回撤 | 从历史最高点到随后最低点的最大跌幅 | < 20% 较稳健,> 50% 难以接受 |
| 夏普率 | 每承担一份风险换来的回报,综合性最强 | > 1 及格,> 2 优秀,< 0 亏钱 |
| 胜率 | 盈利交易笔数 ÷ 总交易笔数 | 不能单独看,必须结合盈亏比 |
| 盈亏比 | 平均盈利 ÷ 平均亏损 | 胜率 40% + 盈亏比 3:1 = 仍然盈利 |
| Calmar 比率 | 年化收益 ÷ 最大回撤,衡量回撤调整后收益 | > 1 较好,越高越稳 |
3.1 为什么高胜率不等于赚钱
评判策略盈利能力的正确公式是期望值:
$$\text{期望收益} = \text{胜率} \times \text{平均盈利} - (1 - \text{胜率}) \times \text{平均亏损}$$
- 示例 A:胜率 60%,盈亏比 0.5:1 → $0.6 \times 0.5 - 0.4 \times 1 = -0.1$(亏钱)
- 示例 B:胜率 35%,盈亏比 4:1 → $0.35 \times 4 - 0.65 \times 1 = +0.75$(赚钱)
示例 B 的胜率远低于 A,但期望收益是正的,这正是趋势跟踪策略的典型特征。
3.2 夏普率详解
$$\text{夏普率} = \frac{\text{策略年化收益} - \text{无风险利率}}{\text{收益率标准差}}$$
它衡量的是”每承担一份波动风险,换来多少超额回报”。两个策略年化收益相同,夏普率高的那个意味着净值曲线更平滑、回撤更小,实盘更容易拿住。
| 夏普率范围 | 含义 |
|---|---|
| < 0 | 策略在亏钱 |
| 0 – 1 | 有收益但风险调整后表现一般 |
| 1 – 2 | 良好,大多数专业策略在这个范围 |
| > 2 | 优秀,长期维持较难 |
3.3 最大回撤的实际意义
最大回撤不只是一个数字,它决定了能否在实盘中”拿得住”这个策略。一个最大回撤 40% 的策略,即使长期盈利,大多数人在回撤过程中也会因为恐惧而提前止损离场,导致实际收益远低于回测。
低频稳健风格建议:最大回撤控制在 15–20% 以内。
第四章:CTA 策略
4.1 什么是 CTA
CTA(Commodity Trading Advisor,商品交易顾问)在量化领域泛指一类以”趋势跟踪”为核心的策略框架。在加密货币量化中,CTA 策略引擎是最基础也最常用的策略类型。
4.2 两种核心策略逻辑
| 维度 | 趋势跟踪 | 均值回归 |
|---|---|---|
| 核心逻辑 | 强者恒强,价格有惯性 | 物极必反,价格会回归均值 |
| 典型工具 | 双均线交叉、ATR 趋势跟踪 | 布林带、RSI 超买超卖 |
| 适合市场 | 单边趋势市(牛市/熊市) | 横盘震荡市 |
| 胜率特点 | 偏低(30–50%),靠盈亏比取胜 | 偏高(50–70%),但单次亏损较大 |
| 最大风险 | 震荡市频繁止损,磨损严重 | 遇到单边行情,亏损难以控制 |
| 互补关系 | 两类策略可组合部署 | 组合后可平滑整体净值曲线 |
两类策略有天然的互补性,组合使用可以平滑整体净值曲线。
趋势跟踪——双均线交叉示例
- 买入信号:短期均线(如 7 日)上穿长期均线(如 30 日)
- 卖出信号:短期均线下穿长期均线
- 特点:信号滞后(均线本身就是滞后指标),但在大趋势中表现优异
均值回归——布林带示例(由中轨移动均线 + 上下两条标准差轨道组成)
- 买入信号:价格跌破下轨(超卖,预期回升)
- 卖出信号:价格涨破上轨(超买,预期回落)
- 特点:在震荡市中频繁交易、积小胜,遇到单边行情容易被套
4.3 策略框架设计
无论哪种策略,代码结构上都遵循相同的模式:
| 回调函数 | 触发时机 | 职责 |
|---|---|---|
on_bar |
每根 K 线结束时 | 计算指标和信号 |
generate_signal |
由 on_bar 调用 |
输出 +1(买)/ -1(卖)/ 0(持仓不动) |
on_order_filled |
订单成交后 | 更新持仓状态 |
策略参数化:均线周期、布林带宽度等参数不能硬编码,必须通过配置文件管理,才能方便地做参数优化和回测对比。
4.4 双均线策略代码示例
import pandas as pd |
关键点:shift(1) 是防止前视偏差的核心操作——用昨天确认的均线值,决定今天的开仓方向。
第五章:风控
5.1 风控的三个层次
完整的风控体系分三个递进层次,各自负责不同粒度的风险管控:
| 层次 | 管控目标 | 典型规则(保守参考值) |
|---|---|---|
| 单笔层 | 控制每笔交易的最大亏损 | 止损价位设置;单笔最大亏损 ≤ 账户净值 1% |
| 账户层 | 控制整体仓位集中度 | 单品种仓位 ≤ 20%;总仓位 ≤ 60%;保留 40% 现金缓冲 |
| 熔断层 | 极端情况下强制停机 | 当日亏损 > 3% 暂停;从峰值回撤 > 10% 暂停;等人工确认 |
三层是递进兜底的关系:单笔层管不住的由账户层管,账户层管不住的熔断层强制停机。
5.2 仓位管理方法
固定分数法(Fixed Fractional) 是最适合新手的仓位管理方式:每笔交易的风险金额 = 账户净值 × 固定比例(通常 1–2%)。
计算示例:账户净值 10 万 USDT,风险比例 1%,则每笔最多亏损 1000 USDT。如果止损距离是入场价的 5%,则:
$$\text{仓位大小} = \frac{1000}{5%} = 20000 \text{ USDT(占总资产 20%)}$$
这种方法的好处是:亏钱时仓位自动减小(保护本金),赚钱时仓位自动增大(享受复利)。
5.3 止损设置方法
| 方法 | 原理 | 优缺点 |
|---|---|---|
| ATR 止损 | 止损设在入场价 ± N 倍平均真实波幅 | 自适应市场波动,不易被正常震荡假触发 |
| 固定比例止损 | 亏损超过固定比例(如 5%)触发 | 简单,但不考虑市场波动特性 |
| 结构止损 | 止损设在重要支撑/阻力位之外 | 符合市场逻辑,但需要主观判断 |
5.4 熔断机制的必要性
熔断机制是应对”策略失控”场景的最后防线。常见触发场景:
- 策略代码出现 bug,开始疯狂下单
- 市场出现黑天鹅事件(交易所宕机、极端行情)
- 策略在某种市场状态下完全失效,持续亏损
熔断后的处理流程:触发熔断 → 系统自动平仓或暂停下单 → 发送告警(Telegram / 邮件)→ 人工检查原因 → 确认安全后手动重启。
宁可多触发几次熔断,也不要让账户在无人值守的情况下持续亏损。
第六章:Walk-forward 验证与过拟合
6.1 什么是过拟合
过拟合(Overfitting)指策略参数是专门针对某段历史数据”调出来的”,导致在这段数据上表现完美,但换一段时间就失效。
直观类比:假设背了 2020–2023 年所有考试的真题答案,考这段时间的题能得满分,但 2024 年出了新题就完全不会——因为学到的不是解题方法,而是答案本身。
过拟合的常见表现:
- 样本内(训练期)回测表现极好,样本外(验证期)表现差
- 策略参数数量很多(> 5 个),每个参数都”恰好”对应历史数据的某个特征
- 策略只在某个特定时间段有效,换一段时间就亏损
6.2 Walk-forward 验证
Walk-forward 测试是防止过拟合的标准方法,通过”滚动窗口”模拟策略真实上线的过程:
| 步骤 | 操作 | 说明 |
|---|---|---|
| ① 训练期 | 用前 N 个月数据优化参数 | 通常 6 个月,网格搜索找最优参数组合 |
| ② 验证期 | 用接下来 M 个月数据验证 | 通常 1–2 个月,检验训练期参数在新数据上的表现 |
| ③ 滚动向前 | 窗口整体向前移动,重复①② | 模拟参数会随时间老化、需要定期重新优化的真实情况 |
Walk-forward 时间轴示意图:
时间轴 ──────────────────────────────────────────────────► |
如果每个滚动窗口的验证期结果都不错(样本外夏普率 > 0.5),才说明策略真正捕捉到了市场规律,而不只是拟合了历史噪音。
Walk-forward 框架代码骨架:
def walk_forward_test(df, strategy, train_months=6, val_months=2): |
第七章:统计套利
7.1 基本逻辑
统计套利是指找到两个或多个价格存在统计相关性的资产,当它们之间的价差偏离历史均值时,买入相对便宜的、卖出相对贵的,等价差回归时获利。
与趋势跟踪相比,统计套利的优点是:与大盘涨跌的相关性低,在震荡市中也能稳定盈利。
7.2 常见套利类型
| 类型 | 原理 | 适用条件 |
|---|---|---|
| 跨交易所套利 | 同一资产在不同交易所的价差(如 BTC 在 OKX 和 Binance 之间出现 ≥ 0.3% 价差时进场) | 执行速度要求高,竞争激烈 |
| 现货-期货基差套利 | 持有现货同时做空永续合约,赚取资金费率(Funding Rate) | 加密货币市场特有,适合现货交易者 |
| 配对交易 | 选取相关性高的两个资产(如 BTC 和 ETH),当价格比值偏离历史均值时,买弱卖强 | 需要长期稳定的协整关系 |
入门建议:跨交易所套利是逻辑最清晰的起点;现货-期货基差套利在有了现货稳定收益之后再引入,初期不要急于接触合约。
第八章:因子研究
8.1 什么是因子
因子是指能够预测未来价格变动的某个可计算的特征。比如:”过去 24 小时成交量是否异常放大”、”RSI 是否低于 30”、”价格是否突破 20 日新高”都可以是因子。
因子研究的目的是:在花时间写完整策略之前,先用统计方法快速筛选出真正有预测力的信号,过滤掉无效想法。
8.2 IC(信息系数)
IC(Information Coefficient,信息系数)衡量因子值和未来收益之间的相关性,是判断因子有效性最核心的指标:
$$\text{IC} = \text{Corr}(\text{因子值}_t,\ \text{未来收益}_{t+1})$$| IC 值 | 含义 |
|---|---|
| > 0 | 因子与未来收益正相关 |
| < 0 | 因子与未来收益负相关 |
| $\lvert IC \rvert > 0.05$ | 因子有一定预测意义 |
| $\lvert IC \rvert > 0.10$ | 因子预测力较强,值得重点研究 |
第九章:OMS 订单管理系统
9.1 为什么需要 OMS
量化程序自动交易时,情况远比手动点击复杂:订单可能部分成交、可能超时未成交、网络中断导致不知道订单是否发出、程序重启后需要恢复之前的订单状态……
OMS(Order Management System,订单管理系统)专门管理这些复杂情况,确保每一笔订单的状态都清晰、准确、可追溯。
9.2 订单的生命周期
Pending(待发送) |
9.3 OMS 的核心功能
| 功能 | 说明 |
|---|---|
| 订单持久化 | 所有订单状态写入数据库,程序重启后能恢复未完成的订单 |
| 超时处理 | 限价单挂出 N 分钟未成交,自动撤单,防止”僵尸订单”堆积 |
| 持仓对账 | 定期将本地记录的持仓与交易所实际持仓对比,发现差异立即告警 |
| 重试机制 | 网络异常时自动重试,避免因短暂断网导致订单丢失 |
第十章:策略上线流程
无论策略回测表现多好,都必须按以下流程逐步验证,不可跳过任何环节:
| 阶段 | 目标 | 通过标准 |
|---|---|---|
| ① 样本内回测 | 验证策略逻辑 | 夏普率 > 1,最大回撤 < 20%,无明显前视偏差 |
| ② Walk-forward | 防止过拟合 | 样本外夏普率 > 0.5,各窗口表现基本稳定 |
| ③ Paper Trading | 验证执行逻辑 | 稳定运行 ≥ 2 周,实盘夏普率 ≥ 回测的 60% |
| ④ 实盘小仓位 | 真实市场验证 | 仓位 ≤ 5%,稳定运行 1 个月以上 |
每一步都是对前一步的验证,通过标准是强制要求,不是参考建议。
总结:推荐学习路径
结合上述十章内容,建议按以下顺序循序渐进:
阶段 1:概念建立(第 1–3 章) |
核心原则:在任何阶段,风险管理优先于收益最大化。一个能稳定运行 1 年不爆仓的策略,远比一个回测漂亮但实盘失控的策略有价值得多。