合约移仓(换月)
合约移仓(contract roll,又称换月)指的是某个期货品种的交易活动从即将到期的合约转移到下一个到期合约的那段时期。对图表、回测和基于价位的分析来说,它是一次断裂:两份合约的成交价格不同,订单流记录也各自独立。
Senzoukria · 术语表 · 更新于 2026 年 9 月
移仓期间发生了什么
随着季度到期日临近,参与者会平掉即将到期合约上的头寸,并在下一个合约上重新建仓。在几个交易时段之内,下一个合约的成交量和未平仓量就会超过旧合约。两份合约同时交易,它们之间的价差——也就是跨期价差(calendar spread)——体现的是两个到期日之间融资成本与分红预期的差别。当下一个合约毫无争议地成为近月时,移仓才算完成。
- 成交量与未平仓量迁移到下一个到期月份。
- 两份合约以不同的价格成交。
- 即将到期的合约会继续清淡地交易,直到它的最后一个交易日。
对订单流的影响
- 累计 Delta 序列不会跨合约延续;每一份合约都有自己的成交明细,也有自己的累计过程。
- 成交量剖面上的价位、裸露 POC 或价值区,是按某一份合约的价格记录下来的,换到下一份合约上就落在了另一个价格。
- 移仓期间,盘口阶梯上的深度被两个订单簿分走了,所以不论看哪一份合约,深度盘口都会比平时显得更薄。
回测中如何处理移仓
一个跨越好几个季度的回测,必须有一条写明白的移仓规则:每一天用哪一份合约,以及价格跳空如何处理。移仓日经常被直接剔除,因为那一天混着两份合约。无论选哪条规则,都应当和覆盖率报告一起随测试保存下来;数据里的缺口永远不能读成“行情走平”。在某个到期月份上推导出来的价位,不处理两者之间的价差,是不能搬到另一个月份上的。
在 Senzoukria 中
回测页面的 Databento 导入采用一条固定规则:丢弃价差合约,逐分钟保留占优的那份合约,并剔除移仓日——与研究用加载器的规则完全一致。它的完成提示写着“在 {days} 天内保留了 {minutes} 分钟 · 已排除 {rolls} 个移仓日 · {contracts} 份合约”,所以样本里究竟有几次移仓是看得见的。导入进来的K线不带 Delta、也不带价位明细。实盘那一侧,图表跟随“Symbol”字段中选中的合约,因此切换到下一个到期月份是一个手动动作。
常见误区
- 把两份合约之间的价格跳空读成一次行情波动。
- 让 CVD 或某个基于时段的价位跨越移仓继续沿用。
- 只看一个订单簿,就去判断移仓周的流动性。
相关内容
其他语言版本
常见问题
- 为什么下一份合约的价格不一样?
- 因为它的结算日期更晚。两个到期月份之间的差额,也就是跨期价差,反映的是这两个日期之间的融资成本与分红预期。它是一个结构性的偏移量,不是方向性的信号,并且会随着较近的那份合约临近到期而收窄。
- 回测应该包含移仓日吗?
- 多数订单流回测会把它们排除在外,因为那一天混着价格不同、流动性被分流的两份合约。如果要保留,移仓规则必须写明用哪一份合约的数据、价格跳空怎么处理。无论哪种做法,这个选择都应当随测试一并记录下来,结果才可复现。
- 移仓对微型合约也有影响吗?
- 有。MES 和 MNQ 与 ES、NQ 共用同一个季度到期周期,因此它们的成交量也在同一时期迁移。每一份微型合约都有自己的订单簿,所以它的移仓要按它自己的成交量去核对,而不是从 E-mini 那边推断出来。