一个合格的回测系统必须包含以下模块:
必须解决两个问题:
所有数据必须是当时“可获得”的,而不是未来回看过后整理过的数据。
例如:
财报 T+1 才能用于交易
回测中不能使用未来的收盘价
不能用未来才知道的指数成分股
至少支持:
K 线(分钟级、日级)
Level-2 盘口
财报数据
宏观数据
文本和情绪(新闻、社交媒体)
行业分类、因子数据
退市股票
如果缺退市股票 → 回测完全不可信。
专业回测系统都采用“事件驱动模型”:
流程:
事件产生(Event)
新的一根 K 线到来(BarEvent)
策略产生交易信号(SignalEvent)
订单提交(OrderEvent)
成交回报(FillEvent)
策略处理(Strategy Module)
根据最新特征与模型输出交易信号
投资组合管理(Portfolio)
计算仓位变化
风控(max weight、sector限制、风险敞口)
执行系统(Execution Handler)
模拟真实市场撮合(限价、滑点、深度)
回测更新(Backtest Update)
更新净值、统计指标、仓位、交易成本
真实交易成本至少包括:
手续费
买卖价差(bid-ask spread)
滑点(slippage)
市场冲击成本(impact cost)
深度限制(liquidity constraint)
交易拥挤度(crowding)
如果这些不考虑 → 回测可以虚假地好到离谱。
比如策略给你 300% 年化,但是:
实盘换仓太频繁
全靠“未来能看到的成交价”
完全没有考虑滑点
那实盘必炸。
策略层主要作用:
处理模型输出(预测涨跌、收益、分位数)
对特征做标准化(必须用训练集 fit)
产生交易信号(SignalGeneration)
三种主要方式:
预测明日涨跌(up/down)
预测未来 n 日收益
把股票按预测收益排序:
Top 10%: 买入
Bottom 10%: 做空
其余不动
这种方式最抗噪音,也是机构常用方法。
必须支持:
目标权重(target weights)
行业中性(sector-neutral)
因子中性(beta-neutral)
最大仓位(max position)
目标杠杆(target leverage)
最大回撤限制
仓位平滑(position smoothing)
专业基金最重视 风控,而不是收益。
下面给出一套 “机构级标准流程”。
✔ 数据对齐
✔ 财报 T+1 生效
✔ 删除未来能看到的字段
✔ 保留退市股票
✔ 统一频率(如日频)
见上一篇文章(第 9 篇):
技术特征
波动率特征
微观结构
文本情绪
宏观因子
自定义 alpha
特征交互
将特征写入 Feature Store。
使用:
LightGBM
XGBoost
Random Forest
LSTM
Transformer
TabNet
TabTransformer
注意:
训练集与验证集必须按时间分割(TimeSeriesSplit)
scaling 只能 fit 在训练集
信号类型包括:
二分类(买卖)
回归(收益预测)
排序(rank)
在真实量化中,rank 模型最稳定。
采用常见方式:
等权(Equal Weight)
根据预测收益加权(Proportional Weight)
均值-方差优化(Markowitz)
风险预算(Risk Parity)
风险敞口约束优化(Quadratic Programming)
需要模拟:
每次交易是否能成交?
会滑多少点?
市场深度是否足够?
撮合延迟?
成交后的均价?
如果深度不够:
只能成交部分
或无法成交(真实市场经常发生)
至少要输出:
年化收益
月收益
夏普比率
Sortino ratio
信息比率(IR)
最大回撤
换手率
波动率
风险敞口(Beta、行业敞口)
成交量占比(Participation Rate)
每日换仓量
成本分析
胜率
不同时间段的表现
多市场测试
Bootstrap 重采样
例如:
这是最常见的数据泄漏。
比如:用 2025 年的纳斯达克成分股回测 2015 年 → 直接炸。
所有策略“回测超强”,实盘死得快。
回测中 1 秒换 10% 的流通市值 → 完全不现实。
没有仓位平滑 → 极度不稳定。
模型表现会非常虚假。
以下架构是专业机构都会用到的简化版:
这是一个极度简化的框架,但能表达完整逻辑。
如果由你自己从零实现:
初版:2–4 周
完整稳定版:3–6 个月
支持 AI 模型 + 多市场 + 高频:6–12 个月
支持机构级多策略:12–18 个月
专业级回测系统是量化核心资产,属于工程难度极高的赛道。
做到这三点,你的策略才能真正从回测 → 仿真盘 → 实盘。
免费获取专属报价方案