期货换月与涨跌停:连续合约与主力切换的工程口径
期货看起来只是“会到期的股票”,但它引入了两个股票没有的硬约束:合约会到期换月,价格有涨跌停且合约有保证金。
这两点处理不好,回测曲线会在换月处凭空断裂,实盘会在临近到期时踩到强平和流动性枯竭。
结论先行:EasyQuant 把期货的“主力/连续合约”和“到期约束”做成平台级口径,而不是让每个策略各自拼接。
主力由 FutureDominantService 统一判定,合约元数据由 Tushare 同步,临近到期由 FutureExpiryEnforcementJob 强制处置。
一、期货比股票多出来的三件事
- 换月:合约有生命周期,主力合约会随成交/持仓迁移到下一个月,回测与信号必须跨合约拼接
- 涨跌停:报价撞板时理论成交量报不进去,执行与冲击成本要显式建模
- 保证金/到期:临近交割必须减仓或移仓,不能像股票一样长期持有
任何一条漏掉,都会让“看起来能跑”的期货策略在真实约束下失真。
二、主力与连续合约:一个真源
换月的核心是“谁是主力、什么时候切”,这必须是平台级的单一判定:
| 组件 | 职责 |
|---|---|
TushareFuturesContractSyncService |
同步合约基础信息(乘数、保证金、上市/到期日) |
TushareFutMappingSyncService |
同步主力/连续合约映射 |
FutureDominantService / FutureDominantEntity |
判定并落库主力合约,作为连续合约拼接的真源 |
策略与回测统一读这个真源,换月切换点一致,回测的连续价格序列才不会在拼接处产生假跳空。
三、到期约束:临近交割的强制处置
持仓不能带到交割:
FutureExpiryEnforcementJob:临近到期的合约触发强制减仓/移仓,防止“忘了换月”导致的交割风险- 这一步与风控通道对齐——处置也是下单,同样走风控与账本,而不是后台偷偷平仓
对用户而言,FuturesWorkspaceController 提供期货工作台入口,把主力、到期、持仓集中呈现,让“该换月了”这件事显式可见。
四、涨跌停与执行
撞板不是价格问题,是成交能力问题:
- 报价触及涨跌停时,冲击成本模型(
ImpactCostEstimator)据盘口深度估算真实可成交量,而不是假设全额成交 - 换月/涨跌停口径统一后,执行算法(见 29 执行算法)可以在同一套约束下切片下单
结语
期货能不能做,取决于换月、涨跌停、到期这三件“脏活”是不是被平台统一收口了。
EasyQuant 把主力判定、合约同步、到期强制处置做成平台级真源,让策略只管信号、不管拼接。这是把期货从“能画一条连续 K 线”推进到能真实约束下交易的关键一步。