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天最稳妥
- 大资金用滚动展期,小资金用集中展期
- 一定要用量化模型测算成本,别凭感觉
嗯,展期这部分就讲到这里。记住一句话:展期成本控制得好不好,直接决定了你的对冲策略能不能赚钱。别小看这几个点的成本,日积月累下来,差距大得吓人。