面向软件公司与工程师团队的量化策略研发指南。前几篇教交易者「怎么看盘、怎么下单」,本篇讲的是工程师视角下的「怎么把一套交易逻辑变成可验证、可上线、可监控的代码系统」。
免责声明:本站全部内容仅用于学习与研究,不构成任何投资建议。市场有风险,投资需谨慎。
一、量化交易的完整流程
从想法到规模化资金,一条标准的量化研发流水线:
数据 → 因子/信号 → 策略逻辑 → 回测 → 参数优化 → 模拟盘 → 小资金实盘 → 规模化
| 阶段 | 核心产出 | 工程师要回答的问题 | 常见时长 |
|---|---|---|---|
| 数据 | 清洗后的行情/订单/资金库 | 数据全不全?对齐没对齐?有没有幸存者偏差? | 1–4 周 |
| 因子/信号 | 可计算的候选特征 | 因子是否有效?与收益的相关性是否稳定? | 2–6 周 |
| 策略逻辑 | 可回测的策略代码 | 买卖规则、仓位、**止损**是否可量化描述? | 1–3 周 |
| 回测 | 绩效报告 | 剔除各种偏差后还有没有 alpha? | 2–8 周 |
| 参数优化 | 稳健的参数区间 | 参数在样本外还成立吗?会不会过拟合? | 1–4 周 |
| 模拟盘 | 模拟交易记录 | 实盘延迟/撮合下策略是否依旧成立? | 4–12 周 |
| 小资金实盘 | 真实成交记录 | 滑点、容量、执行是否符合预期? | 4 周起 |
| 规模化 | 加资金/加品种 | 容量上限在哪?收益是否随规模衰减? | 持续 |
关键认知:每个阶段都可能回流到前一个阶段。小资金实盘发现滑点吃掉 80% 收益,就要回到执行层面重做;这不可怕,可怕的是跳过阶段直接上大资金。
二、策略类型全景
| 策略 | 原理 | 常见标的 | 难度 | 容量 |
|---|---|---|---|---|
| CTA 趋势跟踪 | 跟随价格趋势,截断亏损、让利润奔跑 | 商品期货、股指、加密货币 | ★★ | 大 |
| 均值回归 | 价格偏离均值后回归,赚反转的钱 | 股票、ETF、加密现货 | ★★ | 中 |
| 统计套利 | 相关标的价差偏离后回归,市场中性 | 股票对、ETF 篮子 | ★★★ | 中 |
| 跨期/跨品种套利 | 同品种不同月份、或相关品种间的价差 | 商品期货 | ★★★ | 中 |
| 期现套利 | 期货与现货价差收敛,赚基差 | 股指期货+ETF、商品期货+现货 | ★★★ | 中 |
| 做市 | 同时挂买挂卖,赚买卖价差与返佣 | 期权、加密合约、活跃股票 | ★★★★ | 小(拼速度) |
| 高频 T0 | 日内多次进出,赚微价差/盘口波动 | 可 T+0 的品种(期货、加密、港股) | ★★★★★ | 极小 |
| 事件驱动 | 基于公告、宏观、新闻、链上数据交易 | 股票、加密 | ★★★ | 大 |
2.1 CTA 趋势跟踪
原理:趋势一旦形成会持续一段时间,顺势开仓、用止损截断亏损、让利润奔跑。典型信号是均线交叉、唐奇安通道突破(Donchian)、动量突破。
- 常见标的:商品期货(螺纹、铁矿、PTA)、股指期货、BTC 等大波动品种。
- 难度:★★。逻辑简单,但胜率低(约 30–40%)、盈亏比高,考验的是回撤期能否坚持执行。
- 容量:大。以中低频为主,单策略可容纳千万级到亿级资金。
2.2 均值回归
原理:价格短时间偏离均值(如均线、布林带)后大概率回归。典型信号是布林带突破反向、RSI 超买超卖。
- 常见标的:流动性好的股票、ETF、加密现货。
- 难度:★★。难在「偏离多久回归」不可控,横盘震荡行情好做,单边行情里是接飞刀。
- 容量:中。交易频率高于 CTA,单笔容量有限,靠频次取胜。
2.3 统计套利
原理:找到协整关系的资产对(如两个走势高度相关的股票),价差扩大到阈值时做空高的、做多低的,价差收敛后平仓。持有期通常数天到数周,市场中性(几乎不承担大盘涨跌风险)。
- 常见标的:同行业股票对、ETF 与成分股、永续合约与期货。
- 难度:★★★。需要扎实的统计功底(协整检验、卡尔曼滤波),且价差关系会失效,需要动态监控。
- 容量:中。中性策略容量与市场上可配对的标的数量强相关。
2.4 跨期/跨品种套利
原理:跨期——同一品种不同到期月合约(如螺纹 01 与 05)价差偏离合理区间时,买低卖高,等价差回归。跨品种——相关品种(如豆粕与豆油、热卷与螺纹)强弱关系错位时做强弱对冲。
- 常见标的:商品期货为主。
- 难度:★★★。价差的「合理区间」随供需、库存、持仓结构变化,静态区间容易失效。
- 容量:中。
2.5 期现套利
原理:期货价格高于现货(正基差)时,买入现货/ETF、做空期货,交割或基差收敛时平仓,赚取确定性较高的价差。股指期现套利(IF/IC + ETF)是最经典版本。
- 常见标的:股指期货+现货 ETF、商品期货+现货仓单。
- 难度:★★★。资金占用大、要处理分红除息、期现标的跟踪误差等细节。
- 容量:大,但机会出现频率低、单次收益薄。
2.6 做市
原理:同时在买卖两侧挂单,吃对手单赚买卖价差,配合交易所做市返佣(maker 手续费减免甚至返点)。核心是管理库存风险——报价被吃掉后不能囤方向性敞口。
- 常见标的:期权(最经典)、加密合约、不活跃股票。
- 难度:★★★★。拼的是报价模型、库存管理和低延迟,散户和初创团队很难与头部做市商竞争。
- 容量:小。单标的容量有限,靠多标的摊开。
2.7 高频 T0
原理:日内高频进出,赚微小的盘口价差、队列优势或大单拆分带来的冲击成本收益。持仓时间以秒到分钟计,收益高度依赖延迟(毫秒甚至微秒级)。
- 常见标的:期货、加密合约、港股(T+0 且可做空)。
- 难度:★★★★★。硬件(FPGA、同机房托管)、网络、系统调优缺一不可。
- 容量:极小,且头部效应极端。
2.8 事件驱动
原理:基于财报、分红、宏观数据、政策、链上大额转账等事件预判价格反应。可以人工触发(事件发生后人工确认),也可以全自动化(数据流触发信号)。
- 常见标的:股票(财报季)、加密(监管/链上事件)、商品(库存/天气报告)。
- 难度:★★★。难点在数据获取与清洗,事件类数据的噪音极大。
- 容量:大。事件驱动+中低频,是容量最大的类别之一。
三、因子体系
因子是策略的「原料」:一个可计算的、对标的未来收益有预测能力的历史数据特征。
3.1 常见因子类别
| 类别 | 代表因子 | 逻辑 |
|---|---|---|
| 动量因子 | N 日收益率、移动平均乖离 | 强者恒强,追涨杀跌的机构化表达 |
| 反转因子 | N 日累计涨幅的相反数 | 短期涨多了会回调,跌多了会反弹 |
| 波动率因子 | 已实现波动率、ATR、BVOL | 低波品种往往有风险溢价 |
| 量价因子 | 成交量放大倍数、量价背离、换手率 | 量在价先,量价配合确认信号 |
| 期限结构因子 | 期货远近月价差(升水/贴水) | 展期收益与市场情绪 |
| 另类因子 | 舆情情绪、资金流、链上指标 | 信息不对称的补偿 |
3.2 因子研究与评价指标
因子研究的标准流程:提出假设 → 计算因子 → 分层回测 → 评价 → 合成 → 实盘跟踪。
核心评价指标:
| 指标 | 定义 | 经验参考 |
|---|---|---|
| IC(信息系数) | 因子值与下一期收益的秩相关系数(Spearman), | IC |
| IR(信息比率) | IC 均值 / IC 标准差,衡量因子稳定性 | IR > 0.3 较好,> 0.5 优秀 |
| 分层单调性 | 按因子分 5–10 层,各层收益是否单调排列 | 单调则因子逻辑自洽 |
| 换手率 | 因子调仓比例 | 过高则交易成本吃掉 alpha |
| 容量 | 因子在全市场按流动性排序可容纳的资金 | 越小众的因子容量越小 |
一个因子的「死亡率」很高:初筛 100 个因子,经过 IC 稳定性、分层单调性、扣除成本、样本外检验后,能留下的通常不超过 5 个。
四、回测框架选型
| 框架 | 语言 | 优势 | 劣势 | 适合谁 |
|---|---|---|---|---|
| vn.py | Python | 国内生态成熟,内置 CTA/套利/期权模板,直接对接国内期货柜台 | 学习曲线陡,部分功能绑定自家架构 | 国内期货/股票团队 |
| backtrader | Python | 轻量易上手,文档与社区资料多,回测->模拟盘切换简单 | 性能一般(纯 Python 循环),大数据量回测慢 | 个人/小团队做中低频 |
| 自研框架 | 任意 | 完全可控,可按需做撮合模拟、并行回测、参数扫描 | 开发周期长,要自造轮子且易埋 bug | 有工程实力的团队,且计划规模化 |
| 其他 | Python/R | vectorbt、QuantConnect(云端)、Zipline、qlib(微软) | 各有特定取向 | 视需求选用 |
选型建议:
- 起步阶段用 backtrader 或 vn.py 快速验证想法,不要一上来就自研。
- 自研的前提是:已有 backtest 引擎瓶颈(如参数扫描太慢、撮合模型不真实)、团队有 2 人以上的专职回测工程资源。
- 回测引擎的撮合模型比框架名气更重要:用「下一根 K 线开盘价撮合」还是「盘口逐笔撮合」,结果差异巨大。
五、回测核心指标
| 指标 | 公式/定义 | 说明 |
|---|---|---|
| 年化收益率 | (期末权益/期初权益)^(252/交易天数) − 1 | 复利口径,回测期短于一年时外推失真 |
| 夏普比率 | (年化收益 − 无风险利率) / 年化波动率 | 每承担一单位波动获得多少超额收益,>1 良好,>2 优秀 |
| 最大回撤 | 任意时点从净值峰值的最大跌幅:max(峰点净值 − 谷点净值) / 峰点净值 | 衡量最坏情况亏多少,比收益更值得关注 |
| 卡玛比率 | 年化收益 / 最大回撤 | 收益与「最痛时刻」的性价比,>1 良好 |
| 胜率 | 盈利交易笔数 / 总交易笔数 | 高胜率≠好策略,要与盈亏比合看 |
| 盈亏比 | 平均盈利 / 平均亏损 | 趋势策略通常胜率低、盈亏比高 |
| 换手率 | 交易量 / 持仓量(或成交金额/账户权益) | 决定手续费与滑点成本占比 |
| 收益/回撤曲线 | 时间序列可视化 | 看回撤发生在什么时候、和什么市场状态有关 |
看一份回测报告的顺序:先看最大回撤和回撤持续时长,再看年化收益和夏普,最后看胜率盈亏比。一个年化 100% 但最大回撤 60% 的策略,实盘里绝大多数人会中途放弃。
六、回测陷阱清单
| 陷阱 | 通俗解释 | 具体例子 |
|---|---|---|
| 未来函数 | 回测用了当时还拿不到的数据 | 用「当天收盘后才公布的」成交量数据参与当天收盘价下单 |
| 前视偏差 | 用全样本统计出的参数去回测每一个历史点 | 用 2015–2025 全部数据算出的最佳均线周期,回测 2018 年行情 |
| 幸存者偏差 | 只保留现在还活着的标的 | 股票池只放当前成分股,退市股和当年暴雷股全被剔除,收益虚高 |
| 过拟合 | 参数被调到恰好拟合历史噪音 | 策略有 12 个参数,逐个网格搜索到「历史完美」,实盘一塌糊涂 |
💀 回测收益不等于实盘收益
回测收益 ≠ 实盘收益。 回测是在已知的历史上重复行走,天然低估滑点、高估容量、遗漏各种现实约束;经过参数优化的策略还叠加了过拟合风险。经验值:模拟盘年化 30% 的策略,扣掉真实滑点手续费后大概率只剩 10–20%;如果模拟盘收益本来就只有 10%,别上实盘。
| 未计手续费滑点 | 忽略或低估交易成本 | 高频策略按 0 手续费回测,实盘手续费+滑点吃掉全部利润 | | 流动性不足假设 | 回测假设想买多少都能成交 | 日成交量 10 万的股票,回测里每天买 5 万手 | | 区间偏见 | 回测区间恰好是策略的「好天气」 | 只在 2020–2021 牛市回测趋势策略,忽略 2018 和 2022 的震荡熊市 | | 时间/时区错误 | 数据对齐出错 | 用未复权价格、不同时区的 K 线混用 | | 涨跌停/T+1 忽略 | 回测可以完成实盘根本做不到的动作 | A 股策略当日买当日卖,忽略 T+1 限制 |
自查方法:把每个交易日的信号日志打印出来,随机抽几天人工核对「当时真的能拿到这些数据吗?当时真的能以这个价格成交吗?」
七、参数优化与过拟合防范
7.1 三种常见做法
| 做法 | 说明 | 风险 |
|---|---|---|
| 网格搜索 | 遍历参数组合找收益最高点 | 高(基本必过拟合) |
| 样本外测试 | 前 70% 调参,后 30% 冻结验证 | 中(样本外只验证一次,需足够长) |
| 滚动窗口(Walk-forward) | 滚动:前窗调参→后窗验证→窗口前移,全程用「过去数据」决策 | 低(最接近实盘节奏) |
7.2 降低过拟合的实操建议
- 减少参数数量:参数每多一个,过拟合风险指数上升;能用 2 个参数解决的策略,别用 5 个。
⚠️ 样本外测试只能测一次
样本外测试不重复——样本外区间只能测一次,反复「测完再调」等于把样本外变成样本内。 参数必须「平坦」:最优参数周围的表现应是缓慢变化的;如果参数从 19 变到 21 绩效暴跌,说明是噪音拟合。
- 参数必须「平坦」:最优参数周围的表现应是缓慢变化的;如果参数从 19 变到 21 绩效暴跌,说明是噪音拟合。
- 样本外测试不重复:样本外区间只能测一次,反复「测完再调」等于把样本外变成样本内。
- 约束 + 惩罚:把收益约束在合理范围(如年化收益超 100% 的因子直接标记可疑),并对高换手、极端持仓惩罚。
- 多区间、多品种验证:2015、2018、2022 的熊市样本必须有;同一逻辑在不同品种上都成立,可信度大增。
八、模拟盘与实盘差距
| 维度 | 模拟盘假设 | 实盘现实 | 对策 |
|---|---|---|---|
| 滑点 | 常按固定点数或 0 计算 | 冲击成本随单量非线性上升 | 按「盘口深度 × 单量」建模冲击成本 |
| 容量 | 无限制 | 单笔过大导致价格移动 | 用 ATS(成交量参与率)约束单笔量 |
| 延迟 | 立即成交 | 网络+柜台+行情延迟 10ms–1s | 记录信号时间与成交时间差 |
| 撮合差异 | 简化撮合模型 | 排队、部分成交、涨跌停买不进 | 用逐笔/盘口撮合模型重放 |
| 情绪 | 无 | 连亏时不敢开仓、盈利时放大仓位 | 纪律 + 自动化 + 风控前置 |
| 数据 | 完整无噪音 | 断流、错价、复权变化 | 数据校验与断流告警 |
| 成本 | 手续费固定 | 交易所返佣/大额折扣存在,真实成本更复杂 | 按真实账户费率回填 |
经验值:模拟盘年化 30% 的策略,扣掉真实滑点手续费后大概率只剩 10–20%;如果模拟盘收益本来就只有 10%,别上实盘。
💀 模拟盘年化 30% 扣掉真实滑点手续费大概率只剩 10-20%
模拟盘年化 30% 的策略,扣掉真实滑点手续费后大概率只剩 10–20%;如果模拟盘收益本来就只有 10%,别上实盘。 模拟盘到实盘的鸿沟不在策略本身,而在滑点、容量、延迟、撮合差异、情绪——这五件事任何一件做不到位都会吃掉你的收益。
九、执行算法
策略决定「买什么、买多少」,执行算法决定「怎么买」。
| 算法 | 原理 | 适用场景 |
|---|---|---|
| TWAP(时间加权平均价) | 将大单按时间均匀拆分 | 无显著日内规律、要求低调的日常建仓 |
| VWAP(成交量加权平均价) | 按历史成交量分布拆分单量 | 流动性分布不均的品种(如股票开盘/收盘放量) |
| 冰山单(Iceberg) | 只暴露一部分订单量,剩余隐藏 | 流动性薄、不想暴露意图的品种 |
| IS / 到达价格(Implementation Shortfall) | 在冲击成本与机会成本间做最优化,尽快成交 | 大单、事件驱动、对时效敏感的场景 |
执行质量量化:把「实际成交均价」与「信号时刻的 VWAP」比较,偏离部分就是执行成本;以这个差值(slippage capture)作为执行算法的考核指标。
十、实盘监控
10.1 策略健康度
| 指标 | 告警阈值(示例) | 含义 |
|---|---|---|
| 持仓偏离 | 偏离目标仓位 > 20% | 撤单/失败过多导致仓位漂移 |
| 单笔滑点 | 连续 N 笔滑点超基准 2 倍 | 流动性突变或算法失效 |
| 策略净值偏离回测基准 | 连续 2 周偏离 > 3 个标准差 | 市场结构变化或实现有 bug |
| 成交率 | 低于 80% | 挂单策略失效 |
| 订单超时 | 超过 X 秒未回报 | 网络或柜台异常 |
10.2 日度复盘
- 自动生成每日报告:策略净值、收益归因(因子贡献拆分)、成交明细、滑点统计、异常事件列表。
- 人工复核:回看当天最有争议的 3 笔交易——「当时信号对不对?执行有没有问题?」
10.3 异常告警
- 分层告警:微信/短信(严重)→ 邮件/IM 群(一般)→ 周报(例行)。
- 必须有的硬告警:资金异常、持仓与风控规则冲突、连续 N 笔撤单、行情断流、程序崩溃。
- 告警要带上下文(策略名、品种、数值、时间),否则半夜醒来看不懂告警内容。
十一、回测平台与研究的工程化
- 参数与结果版本管理:每个回测记录参数、数据版本、代码版本,用 Git 与实验管理表(或 MLflow 类工具)保证「结果可复现」。
- 并行回测:参数扫描天然可并行,多核/集群并行是自研平台的标配能力。
- 数据版本化:行情数据改了重算会导致回测结果漂移,数据打版本号,回测结果与数据版本绑定。
- 信号日志:实盘信号全量落库,事后复盘「策略没发信号 vs 系统没执行」一目了然。
⚠️ 风险提示
回测收益 ≠ 实盘收益。回测是在已知的历史上重复行走,天然低估滑点、高估容量、遗漏各种现实约束;经过参数优化的策略还叠加了过拟合风险。量化交易依然面临策略失效、流动性枯竭、系统故障、极端行情等多重风险,**杠杆**放大收益的同时同比例放大亏损。建议:模拟盘至少 3 个月再上小资金实盘;小资金实盘稳定 3 个月以上再考虑加资金;任何策略上线前都要有「停止条件」(如回撤达到 X% 即停用该策略)。本文所有策略描述仅用于学习研究,不构成任何投资建议。