第六部分 · 项目实战与工程化 · 第 20 章
实战二:市场中性模拟盘与上线检查
市场中性比指数增强更复杂,因为它不只买股票,还要处理对冲。这一章带你做一个市场中性的模拟盘,重点不是收益,而是看清多头为什么赚或亏、对冲工具贡献多少、基差带来什么影响、保证金和现金怎么变化。做完之后,再给你一份从回测走到模拟盘、再走向实盘前必须逐条确认的检查清单,把“手刹”拉在真正下真金白银之前。
读完这一章,你会明白
- 市场中性模拟要同时记录股票多头、对冲工具、现金保证金和总净值。
- 对冲比例、基差、换月、保证金和归因决定策略是否真的接近中性。
- 上线前要检查数据、模型、回测一致性、订单、风控、日志、对账、权限和灰度流程。
- 实盘系统要先证明自己能稳定处理异常,再谈收益放大。
本图从“项目目标”走到“上线前最后十问”,用于先看第 20 章的关键路径,再回到正文补细节。
1. 项目目标
目标是构建一个教学版市场中性模拟。多头部分使用一个股票多因子组合,对冲部分使用股指期货或指数 ETF 的简化替代。每月调仓,每日估值,记录股票多头收益、对冲收益、总收益、净暴露、回撤和成本。
如果没有股指期货数据,可以先用指数收益做纸面对冲。比如多头组合 100 万,用中证 500 指数收益的 -100 万名义敞口近似对冲。这样不能模拟基差和保证金,但能帮助理解 Beta 对冲。
项目边界必须写清楚: 是否使用真实期货合约,是否考虑保证金,是否考虑基差,对冲比例如何估计,调仓频率多少,成本如何扣。边界越清楚,结果越可解释。
| 版本 | 对冲收益怎么算 | 能学到什么 | 缺什么 |
|---|---|---|---|
| 指数简化版 | 对冲收益 = -对冲名义 × 指数收益率 | 理解 Beta 和净暴露 | 没有基差、合约乘数、保证金、换月 |
| 真实期货版 | 空头盈亏 = -合约张数 × 合约乘数 × 期货点位变化 | 理解真实对冲账本 | 需要期货合约和保证金数据 |
建议先做指数简化版,确认多头 Alpha 和 Beta 概念;再做真实期货版,把基差、换月、保证金和现金压力加进去。两版结果差异越大,越说明真实对冲细节重要。
2. 多头组合
多头组合可以沿用指数增强项目的因子模型。每月选出分数最高的一批股票,等权或按优化权重持有。不同的是,市场中性更关心多头相对市场是否有 Alpha,而不是跟随市场上涨。
多头组合也要控制行业和风格。如果多头全是小盘成长股,对冲工具却是大盘指数,市场风格变化时对冲误差会很大。市场中性不是随便买一篮子股票再空一个指数。
记录多头组合的 Beta 很重要。你可以用历史回归估计组合相对基准的 Beta,也可以先用 1 做简化。简化没问题,但报告里要写清楚。
对冲工具常见是股指期货,如对应沪深 300、中证 500、中证 1000 的期货合约。选择哪个期货,取决于多头组合更接近哪个指数。如果多头是中证 500 股票,用中证 500 期货更合理。
如果用期货,要处理合约乘数、保证金、合约到期、换月和基差。期货价格和指数点位不同,对冲收益不是简单的负指数收益。
教学项目可以分两版。第一版用指数收益简化对冲,理解净 Beta。第二版加入真实期货价格和换月,观察基差和保证金如何改变结果。
3. 对冲比例
对冲比例决定空多少期货。最简单是按名义金额一比一对冲: 股票多头 100 万,空 100 万指数期货。更细一点,按 Beta 调整: 如果多头 Beta 是 1.2,股票 100 万需要空 120 万指数名义价值。
Beta 不是固定不变的。组合换仓、市场风格变化、个股波动变化都会让 Beta 变化。实盘里会定期估计和调整,但调整太频繁也会增加成本。
模拟盘要记录每日净暴露。净暴露接近 0,说明大盘方向风险被压低;净暴露长期偏正或偏负,说明对冲不完整。
Beta 对冲可以写成一个简单公式: 对冲名义 = 股票多头市值 × 组合 Beta。假设股票多头 100 万,估计 Beta 为 1.2,就需要约 120 万指数空头名义。若只空 100 万,组合仍然留下约 20 万的正市场暴露。
如果用股指期货,还要把名义换成合约张数。假设期货点位 6000 点,合约乘数 200 元/点,一张合约名义价值是 6000 × 200 = 120 万元。要对冲 120 万名义,理论上空 1 张;要对冲 60 万名义,就会遇到不能交易半张合约的取整问题。
4. 基差和展期
如果使用真实股指期货,就会遇到基差。期货价格可能高于或低于现货指数,到期前会逐步收敛。做空期货对冲时,基差变化会影响收益。
期货合约到期需要换月。你要决定什么时候从近月换到下一个合约,换月价格如何记录,是否产生额外成本。不同换月规则会改变回测结果。
很多市场中性产品阶段性表现受基差影响。模拟项目如果能把基差收益单独拆出来,你会更清楚策略赚的是选股,还是对冲工具带来的额外收益或成本。
举个数字例子。现货指数从 6000 跌到 5940,跌 1%;期货从 5960 跌到 5920,只跌约 0.67%。如果你用期货空头对冲,股票多头可能亏接近 1%,但期货空头只赚 0.67%,中间差异就是基差变化和跟踪误差的一部分。
所以,市场中性报告里最好把股票多头收益、期货空头收益、指数收益和基差变化分开列。只看总净值,很难知道对冲到底有没有按预期工作。
5. 保证金和现金
期货对冲需要保证金。股票多头占用资金,期货空头占用保证金,账户还要留现金应对亏损和追加保证金。一个看起来净暴露为 0 的组合,现金管理仍然重要。
模拟时要记录保证金占用和可用现金。如果市场波动导致期货亏损,保证金需求可能增加。即使股票多头赚钱,现金流时点也可能紧张。
这一步能让你理解为什么衍生品策略不是只看收益曲线。保证金、现金和强平规则,会决定策略能否扛过极端行情。
| 账户项目 | 初始 | 指数上涨 1% 且你空 1 张期货 |
|---|---|---|
| 股票多头市值 | 1,000,000 | 约 1,010,000 |
| 期货空头名义 | 1,200,000 | 亏约 12,000 |
| 保证金占用,按 12% | 144,000 | 仍需维持,亏损会减少可用现金 |
| 账户现金 | 预留 200,000 | 减少约 12,000,还要能覆盖追加保证金 |
这个表说明,即使股票多头赚钱,期货空头也可能带来现金损失。市场中性不是只看总收益,还要看现金和保证金能不能撑住路径。
6. 收益归因
每天收益可以拆成三部分: 股票多头收益、期货对冲收益、现金和费用。进一步可以拆行业、风格、选股和基差。这样你能看到市场中性到底中性在哪里。
如果总收益很好,但主要来自期货基差收益,那它不是纯选股 Alpha。如果总收益很差,但股票多头跑赢基准、对冲成本过高,问题可能在对冲工具。
归因报告要按月输出。市场中性策略的错误通常不是一天看出来的,而是在多个阶段慢慢暴露: 对冲偏差、成本上升、风格反转、基差不利。
市场中性模拟要看年化收益、波动、最大回撤、夏普、月度胜率、净暴露、总杠杆、保证金占用、对冲误差、基差贡献和交易成本。
还要看与大盘的相关性。如果策略号称市场中性,但净值和大盘高度同涨同跌,说明对冲没有做好或股票组合本身暴露太强。
压力测试也很重要。假设大盘一天跌 5%,期货基差突然扩大,股票多头流动性变差,组合会怎样? 这些情景比普通历史波动更能暴露问题。
7. 模拟盘运行规则
模拟盘应按真实时间运行。每月固定日期调仓,每天收盘后估值,记录当日股票收益、期货收益、现金、保证金和净值。不要事后补数据再假装当时运行。
每次调仓要生成订单清单和对冲清单。即使不实盘,也要假装自己要下单,检查交易单位、涨跌停、停牌和资金是否足够。
模拟盘至少运行几个月。短期结果不重要,重要的是流程是否稳定,归因是否清楚,风险指标是否按预期更新。
如果你还不能解释基差,不要实盘市场中性。如果你不知道保证金如何变化,不要实盘。如果你只能看到总净值,看不到股票和对冲分别贡献,不要实盘。
如果你的策略只在简化指数对冲中好看,加入真实期货和成本后变差,也不要实盘。简化模型是学习工具,不是真实收益承诺。
市场中性看起来比股票多头稳,但结构更复杂。个人学习可以做模拟和纸面回测,实盘要非常谨慎。
8. 上线前检查清单
很多量化事故发生在从研究到实盘的中间地带。回测看起来不错,研究员觉得可以试,工程脚本也能下单,于是系统匆忙上线。真正上线前,必须有清单: 数据是否按时到达,模型是否用对版本,订单是否可控,风控是否生效,异常是否告警,盘后是否对账。没有清单,上线就是赌博。
上线前首先检查数据。行情数据是否按时更新,财务数据是否按公告日对齐,指数成分是否是点时版本,停牌和涨跌停字段是否存在,复权口径是否和回测一致。
还要有每日自动质量检查。缺失率突然升高、价格为 0、成交量异常、代码映射失败、行业字段缺失,都应触发告警。不要等策略下单后才发现数据坏了。
数据供应商接口也可能变化。字段名、复权方式、更新时间、历史修正都可能影响结果。上线系统要记录数据版本和更新时间,否则出问题后很难追溯。
9. 模型和参数检查
模型上线前要确认版本。训练区间、特征列表、参数、随机种子、代码提交、训练数据版本都要记录。实盘每天使用哪个模型,不能靠文件名猜。
预测分布要检查。如果今天模型分数全部为 0,或者分布突然比平时宽很多、窄很多,很可能是输入数据或模型加载出问题。预测文件生成后,应先做 sanity check 再交给组合模块。
参数也要加边界。比如目标持仓数、单票上限、行业偏离、换手惩罚、成本参数不能随便为空或异常。配置错误和模型错误一样危险。
上线前要确认回测逻辑和实盘逻辑一致。回测用下日开盘成交,实盘就不能按当天收盘下单;回测剔除停牌和涨跌停,实盘也要检查;回测按 100 股取整,实盘也要取整。
很多策略实盘不如回测,不是市场变了,而是回测和实盘根本不是同一个策略。回测里允许买的小票,实盘因为成交额太低买不到;回测里假设全额成交,实盘部分成交;回测里无成本,实盘成本很高。
最好的检查方式是用同一天的历史数据跑一遍实盘流程,再和回测流程对比订单和持仓。如果同样输入产生不同结果,必须解释清楚。
10. 订单检查
订单生成后要做前置检查。证券是否可交易,价格是否在涨跌停范围内,数量是否符合交易单位,资金是否足够,持仓是否可卖,单笔金额是否超限,订单方向是否和目标仓位一致。
还要检查重复订单。系统重启、网络重试、脚本重复运行,都可能导致同一目标被下两次单。订单应有唯一标识和幂等处理,不能因为重试就重复交易。
订单发出后要等待回报,不能自己假设成功。成交、拒单、撤单、部分成交都要更新状态。下单系统最怕内部状态和券商真实状态分叉。
上线前必须确认风控规则真实生效。单票上限、行业上限、总仓位、现金比例、日内亏损、最大订单金额、参与率、黑名单、禁买名单都要能挡住违规订单。
不要只在正常订单上测试风控。要故意构造错误订单: 超大金额、停牌股票、负数量、价格越界、重复下单、超行业限制。风控必须拒绝这些订单并记录原因。
风控还要有紧急停止。触发条件包括数据异常、订单拒绝率异常、净值快速回撤、成交价偏离过大、系统延迟过高。紧急停止后,谁能恢复,如何恢复,也要写清楚。
11. 日志和监控
实盘系统必须有日志。每天用了什么数据,生成什么信号,目标持仓是什么,订单是什么,成交是什么,费用是多少,风控是否拦截,都要记录。
监控要有层级。数据层监控更新和缺失,模型层监控预测分布,交易层监控订单和成交,风险层监控暴露和回撤,系统层监控进程、延迟和错误。
告警要能让人行动。只发一堆无关紧要的消息,最后会没人看。告警应区分信息、预警、严重、停止交易,并写清楚处理人和处理动作。
盘后对账是实盘生命线。你要把内部持仓、现金、成交、费用和券商账户对齐。任何差异都要解释: 是成交回报延迟,费用口径不同,还是内部记录错了。
对账还包括净值。策略净值、账户净值、产品估值之间可能有差异,但差异要能解释。不能因为内部曲线好看,就忽略券商真实账户。
如果盘后对账不通过,第二天不应继续正常交易。带着错误持仓和现金继续跑,错误会滚雪球。
12. 权限和人工操作
实盘系统要限制权限。谁能改配置,谁能启动策略,谁能停止交易,谁能手动下单,谁能恢复系统,都要明确。权限过宽会增加误操作风险。
人工操作必须留痕。临时改参数、手动撤单、手动下单、关闭风控,都要记录原因和时间。没有留痕,事后无法复盘责任和影响。
个人项目也可以简单执行: 实盘前把配置冻结,每次手工操作写日志,不要在交易时间随手改代码。临场改代码是事故高发区。
不要从回测直接全资金上线。更稳的路线是模拟盘,小资金,低频半自动,扩大资金,自动化。每一步都验证一个新风险。
小资金阶段要看流程稳定性,不是只看收益。订单是否按预期发出,成本是否接近假设,对账是否正常,告警是否及时,人工是否能处理异常。
扩大资金也要灰度。资金变大后,滑点、冲击、心理压力和风控阈值都会变化。不要因为小资金顺利,就一次性放大很多倍。
13. 上线前最后十问
第一,数据在当时是否可见? 第二,模型版本能否追溯? 第三,订单是否经过前置风控? 第四,交易规则是否和回测一致? 第五,成本和滑点是否保守?
第六,异常时是否会自动停止? 第七,日志是否足够复盘? 第八,盘后能否对账? 第九,最大可能亏损能否承受? 第十,如果今天系统出错,谁来处理?
这十个问题如果答不上来,就不要实盘。量化真正的专业性,是敢在赚钱之前先把失败路径想清楚。
读完第 20 章后,至少要能复述“市场中性模拟要同时记录股票多头、对冲工具、现金保要检查”这一条判断,再用另外两张卡片检查自己是否真的理解。
小结
这一章的正文不是让你记住几个孤立名词,而是要把它们放回同一条因果链里。读完后,先用自己的话复述下面几条判断,再顺着“小节回看”检查是否能解释每一步。
- 市场中性模拟要同时记录股票多头、对冲工具、现金保证金和总净值。
- 对冲比例、基差、换月、保证金和归因决定策略是否真的接近中性。
- 上线前要检查数据、模型、回测一致性、订单、风控、日志、对账、权限和灰度流程。
- 实盘系统要先证明自己能稳定处理异常,再谈收益放大。
小节回看
- 1. 项目目标
- 2. 多头组合
- 3. 对冲比例
- 4. 基差和展期
- 5. 保证金和现金
- 6. 收益归因
- 7. 模拟盘运行规则
- 8. 上线前检查清单
- 9. 模型和参数检查
- 10. 订单检查
- 11. 日志和监控
- 12. 权限和人工操作
- 13. 上线前最后十问
自测
为什么市场中性项目要拆收益归因?
否则看不出收益来自选股、对冲、基差、现金还是成本。
对冲比例为什么不能永远固定?
组合 Beta 会随持仓和市场变化,固定比例可能导致净暴露偏离。
为什么回测和实盘逻辑必须一致?
否则实盘交易的不是回测里验证过的策略,收益和风险都无法对应。
风控测试为什么要故意构造错误订单?
正常订单通过不能证明风控有效,错误订单被正确拦截才说明规则生效。