期货换月与涨跌停:连续合约与主力切换的工程口径

期货看起来只是“会到期的股票”,但它引入了两个股票没有的硬约束:合约会到期换月,价格有涨跌停且合约有保证金
这两点处理不好,回测曲线会在换月处凭空断裂,实盘会在临近到期时踩到强平和流动性枯竭。

结论先行:EasyQuant 把期货的“主力/连续合约”和“到期约束”做成平台级口径,而不是让每个策略各自拼接。
主力由 FutureDominantService 统一判定,合约元数据由 Tushare 同步,临近到期由 FutureExpiryEnforcementJob 强制处置。


一、期货比股票多出来的三件事

  • 换月:合约有生命周期,主力合约会随成交/持仓迁移到下一个月,回测与信号必须跨合约拼接
  • 涨跌停:报价撞板时理论成交量报不进去,执行与冲击成本要显式建模
  • 保证金/到期:临近交割必须减仓或移仓,不能像股票一样长期持有

任何一条漏掉,都会让“看起来能跑”的期货策略在真实约束下失真。


二、主力与连续合约:一个真源

换月的核心是“谁是主力、什么时候切”,这必须是平台级的单一判定:

组件 职责
TushareFuturesContractSyncService 同步合约基础信息(乘数、保证金、上市/到期日)
TushareFutMappingSyncService 同步主力/连续合约映射
FutureDominantService / FutureDominantEntity 判定并落库主力合约,作为连续合约拼接的真源

策略与回测统一读这个真源,换月切换点一致,回测的连续价格序列才不会在拼接处产生假跳空。


三、到期约束:临近交割的强制处置

持仓不能带到交割:

  • FutureExpiryEnforcementJob:临近到期的合约触发强制减仓/移仓,防止“忘了换月”导致的交割风险
  • 这一步与风控通道对齐——处置也是下单,同样走风控与账本,而不是后台偷偷平仓

对用户而言,FuturesWorkspaceController 提供期货工作台入口,把主力、到期、持仓集中呈现,让“该换月了”这件事显式可见。


四、涨跌停与执行

撞板不是价格问题,是成交能力问题:

  • 报价触及涨跌停时,冲击成本模型(ImpactCostEstimator)据盘口深度估算真实可成交量,而不是假设全额成交
  • 换月/涨跌停口径统一后,执行算法(见 29 执行算法)可以在同一套约束下切片下单

结语

期货能不能做,取决于换月、涨跌停、到期这三件“脏活”是不是被平台统一收口了。

EasyQuant 把主力判定、合约同步、到期强制处置做成平台级真源,让策略只管信号、不管拼接。这是把期货从“能画一条连续 K 线”推进到能真实约束下交易的关键一步。