期货:保证金、换月与限仓
保证金:仓位由它决定
Section titled “保证金:仓位由它决定”期货以保证金交易,实际仓位由保证金率而非名义金额决定:
保证金率的变动直接强制调整杠杆:
- 交易所可在市场剧烈波动时临时提高保证金率(如 2020 年负油价前后)——已建仓的头寸被迫补保证金或减仓;
- 回测必须模拟保证金变动:固定保证金率的回测在"保证金上调"事件中会给出错误的资金曲线;
- 资金占用还影响可分散度:保证金占用高的策略,同样资金下能持有的头寸更少,见回测引擎设计。
换月:移仓的工程
Section titled “换月:移仓的工程”期货合约不断到期,流动性集中在主力合约。移仓的三个问题:
- 换月日判定:主力合约按当时的成交量/持仓量规则切换,不能事后固定(见行情数据的拼接问题);
- 移仓成本:换月日的价差与冲击成本——移仓是真实的交易,不是免费拼接;
- 移仓节奏:一次性移仓 vs 分批移仓,后者降低冲击但增加不确定性。
回测中移仓要按真实交易处理:换月日的成交计入成本模型。
- 交易所对单一客户/品种的持仓上限(限仓)直接约束策略容量:大资金的趋势策略在单一品种上的仓位有天花板;
- 交割月前保证金逐步提高、限仓收紧——实盘策略必须在交割月前移仓;
- 回测中模拟限仓:超过限仓的信号无法执行。
国内商品期货的夜盘
Section titled “国内商品期货的夜盘”- 夜盘时段(21:00–次日凌晨)覆盖外盘主要交易时间——隔夜跳空风险显著小于纯日盘品种;
- 但夜盘流动性差于日盘,价差与冲击成本更高;
- 夜盘的存在改变了"隔夜收益"的分布:有夜盘品种的隔夜风险集中在凌晨收盘到日盘开盘之间。
import numpy as np
def position_size(margin: float, margin_rate: float, contract_mult: float, price: float) -> int: """保证金 → 可开仓合约数(受保证金率约束)""" notional = margin / margin_rate return int(notional / (contract_mult * price))
def forced_deleveraging(margin: float, margin_rate_old: float, margin_rate_new: float, positions: int) -> int: """保证金率上调 → 强制减仓后的可保留头寸""" return int(positions * margin_rate_old / margin_rate_new)量化中的用法
Section titled “量化中的用法”- 保证金率作为参数,模拟临时上调事件;
- 移仓按真实交易计成本,换月日按当时成交量规则判定;
- 容量按限仓制度设定,交割月前强制移仓。
- 交易所临时提高保证金会强制降杠杆,回测必须模拟
- 主力合约切换日的成交量分布决定换月判定
- 国内商品期货的夜盘时段改变隔夜风险的分布