4. 展期策略:展期成本来源与测算模型

展期,说白了就是把你手里的期货合约,从快到期的月份换到下一个月份。听起来简单吧?但这里面的门道可不少。我做了这么多年量化,见过太多人在展期上栽跟头——明明策略赚钱,结果展期成本把利润全吃掉了。

今天咱们就把展期这件事彻底讲透。从成本来源到窗口选择,从操作方式到测算模型,我一个一个拆开给你看。

4.1 展期成本来源:基差与交易成本

展期成本主要来自两块:基差成本交易成本。这两者性质完全不同,但都会实打实地影响你的收益。

4.1.1 基差成本

基差就是期货价格减去现货价格。展期时,你要平掉近月合约,开仓远月合约。这两个合约的价格差,就是基差成本的核心。

举个例子:

  • IF当月合约价格:4000点
  • IF下月合约价格:4020点
  • 基差 = 20点(升水)

如果你做多,平掉4000点的近月,买入4020点的远月——每手多花20点。这就是成本。

关键点:基差成本的方向取决于你的持仓方向。

  • 做多:升水(远月贵)是成本,贴水(远月便宜)是收益
  • 做空:贴水是成本,升水是收益

我记得有一次,团队里一个新同事做IF套利,没注意基差结构。他做多近月、做空远月,结果近月贴水严重,展期时两边都亏。嗯,那天的复盘会开得挺久的。

4.1.2 交易成本

交易成本包括:

  • 手续费:开平仓各收一次。股指期货的手续费虽然不高,但架不住频繁展期。
  • 滑点:这是大头。尤其是大资金,一开仓就把价格推出去几个点。
  • 冲击成本:跟滑点类似,但更隐蔽。你想想看,如果你一次平100手,市场会怎么反应?

我的经验:对于千万级别以下的资金,滑点成本通常控制在0.5-1个指数点。但如果你资金过亿,滑点可能到2-3个点。我曾经帮一个私募做优化,他们每次展期滑点高达5个点——后来改成算法交易,才压到1.5个点以内。

4.2 展期窗口选择

什么时候展期?这是个技术活。太早展期,远月流动性差、基差不确定;太晚展期,近月流动性下降、交割风险上升。

我个人习惯把展期窗口分成三个阶段:

阶段 时间 特点 适合场景
早期窗口 交割日前10-15天 远月流动性差,基差波动大 小资金、套利策略
中期窗口 交割日前5-10天 流动性适中,基差趋于稳定 大多数策略
晚期窗口 交割日前1-5天 近月流动性下降,基差收敛 大资金、被动策略

为什么会这样?因为市场参与者都在盯着交割日。越临近交割,近月合约的流动性就越往远月转移。你想想看,谁愿意拿着马上到期的合约?

避坑指南:我曾经在交割日前2天才开始展期,结果近月合约流动性骤降,一单下去滑了3个点。更惨的是,远月合约的买卖价差也拉大了。那次展期成本比平时高了将近一倍。从那以后,我给自己定了个规矩:最晚交割日前5天必须开始展期。

4.3 滚动展期 vs 集中展期

这两种方式,说白了就是「慢慢来」和「一把梭」的区别。

4.3.1 滚动展期

每天平掉一部分近月,开仓一部分远月。比如你有100手,分5天展期,每天20手。

优点:

  • 分散市场冲击,滑点小
  • 可以捕捉基差的日内波动
  • 资金压力小

缺点:

  • 操作复杂,需要每天盯盘
  • 展期周期长,暴露风险时间长
  • 可能错过最优展期时机

4.3.2 集中展期

在某个时间点一次性完成所有展期操作。

优点:

  • 操作简单,一次搞定
  • 可以精准选择展期时机
  • 风险暴露时间短

缺点:

  • 市场冲击大,滑点高
  • 对流动性要求高
  • 一旦选错时机,成本可能很高

我的建议:资金量在5000万以下,集中展期就够了。超过这个量,我建议用滚动展期。我自己管理的一个5亿规模的CTA产品,用的是「3+2」模式——前3天滚动展期60%,最后2天集中展期40%。这样既控制了冲击成本,又保留了择时空间。

4.4 展期成本测算模型

光说不练假把式。咱们来搭一个展期成本测算模型。

4.4.1 基础模型

展期总成本 = 基差成本 + 交易成本

其中:

  • 基差成本 = (远月价格 - 近月价格) × 合约乘数 × 手数
  • 交易成本 = (手续费 + 滑点) × 合约乘数 × 手数 × 2(一平一开)

4.4.2 代码实现

下面是一个简单的测算函数:

def calc_roll_cost(near_price, far_price, multiplier, lots, 
                   fee_rate, slippage):
    """
    计算展期成本
    :param near_price: 近月合约价格
    :param far_price: 远月合约价格  
    :param multiplier: 合约乘数
    :param lots: 手数
    :param fee_rate: 手续费率(万分之几)
    :param slippage: 滑点(指数点)
    :return: 总成本(元)
    """
    # 基差成本
    basis_cost = (far_price - near_price) * multiplier * lots
    
    # 交易成本(一平一开)
    trade_cost = (near_price * fee_rate + far_price * fee_rate 
                  + slippage * 2) * multiplier * lots
    
    total_cost = basis_cost + trade_cost
    
    return {
        'basis_cost': basis_cost,
        'trade_cost': trade_cost,
        'total_cost': total_cost,
        'cost_per_lot': total_cost / lots
    }

# 示例:IF合约展期
result = calc_roll_cost(
    near_price=4000,
    far_price=4020,
    multiplier=300,
    lots=10,
    fee_rate=0.000023,  # 万分之0.23
    slippage=1.0
)

print(f"每手展期成本: {result['cost_per_lot']:.2f}元")
print(f"总展期成本: {result['total_cost']:.2f}元")

4.4.3 进阶模型:考虑时间价值

如果你做的是长期对冲,还要考虑资金的时间成本。说白了,提前展期意味着你提前占用了资金。

def calc_roll_cost_advanced(near_price, far_price, multiplier, lots,
                            fee_rate, slippage, days_to_expiry, 
                            interest_rate=0.035):
    """
    考虑时间价值的展期成本测算
    """
    # 基础成本
    base = calc_roll_cost(near_price, far_price, multiplier, lots,
                          fee_rate, slippage)
    
    # 资金占用成本
    margin = near_price * multiplier * lots * 0.12  # 12%保证金
    funding_cost = margin * interest_rate * (days_to_expiry / 365)
    
    total = base['total_cost'] + funding_cost
    
    return {
        **base,
        'funding_cost': funding_cost,
        'total_cost_advanced': total
    }

实战技巧:我一般会在模型里加一个「基差预测」模块。用近几天的基差走势、持仓量变化、市场情绪指标,预测未来几天的基差方向。如果预测基差会收窄,我就等一等再展期;如果预测基差会扩大,我就赶紧展期。说白了,展期也是择时。

4.5 展期策略的SVG流程图

下面这张图,把展期策略的核心逻辑串起来了:

展期策略核心逻辑 展期决策输入 展期成本分析 基差成本 | 交易成本 | 资金成本 展期策略选择 滚动展期 | 集中展期 | 混合策略 展期执行与监控 展期成本最小化 输入层 分析层 决策层 执行层 目标层

这张图的核心逻辑很简单:先搞清楚你的成本构成,再选择适合的展期方式,最后在执行中不断优化。说白了,展期不是一次性的操作,而是一个持续优化的过程。

总结一下:

  • 展期成本 = 基差成本 + 交易成本 + 资金成本
  • 展期窗口选在交割日前5-10天最稳妥
  • 大资金用滚动展期,小资金用集中展期
  • 一定要用量化模型测算成本,别凭感觉

嗯,展期这部分就讲到这里。记住一句话:展期成本控制得好不好,直接决定了你的对冲策略能不能赚钱。别小看这几个点的成本,日积月累下来,差距大得吓人。

专注资料整理