第十四章:基差交易的策略优化(五):事件驱动型基差策略
做基差交易时间长了,你会发现一个规律——大部分时间市场是“懒”的。价差在那晃来晃去,波动不大。但总有那么几天,价差会突然像被踩了尾巴的猫一样,猛地跳起来。为什么?因为有事件发生了。
事件驱动型基差策略,说白了就是盯着这些“事件”做文章。我个人习惯把这类策略叫做“等风来”——平时轻仓甚至空仓,等风来了,一把梭进去。嗯,听起来有点赌,但背后是有逻辑支撑的。
一、什么是事件驱动型基差策略?
先给个定义。事件驱动型基差策略,就是利用特定事件(比如交割、库存报告、天气突变、政策发布等)对近远月合约价差产生的冲击,进行方向性交易。
你想想看,正常情况下,基差是围绕持仓成本波动的。但事件一来,这个平衡就被打破了。比如交割月临近,持仓限额一收紧,散户被迫平仓,近月合约就可能被砸出个深贴水。这就是机会。
我2018年做螺纹钢的时候,就遇到过这么一回。当时市场传言唐山要限产,远月合约直接拉涨停,近月反而没怎么动。基差从+50瞬间拉到-120。我当时就懵了——这哪是基差,这是情绪啊。
二、常见的事件类型与基差影响
我整理了一下,能驱动基差的事件大概分这么几类。每类我都吃过亏,也赚过钱。
| 事件类型 | 典型例子 | 对基差的影响 | 我的经验 |
|---|---|---|---|
| 交割事件 | 交割月持仓限额、仓单注销 | 近月贴水扩大(空头踩踏) | 交割前3天是黄金窗口 |
| 库存事件 | 显性库存骤降、交割库扩容 | 近月升水扩大(现货紧张) | 库存数据公布后30分钟内反应最剧烈 |
| 政策事件 | 限产、出口退税调整、关税 | 远月波动大于近月 | 政策落地前布局,落地后平仓 |
| 天气事件 | 台风、干旱、寒潮 | 近月升水(供应中断预期) | 农产品最敏感,工业品反应慢半拍 |
| 资金事件 | 主力换月、大资金移仓 | 价差结构扭曲 | 换月期间基差波动率翻倍 |
三、策略框架:怎么“等风来”?
很多人以为事件驱动就是“听到消息就冲进去”。错。大错特错。我早期就是这么干的,结果被假消息坑了好几次。后来我总结了一套框架,分享给你。
3.1 事件预判
事件驱动不是靠运气,而是靠预判。比如交割月持仓限额,这个时间是固定的,你提前一周就能知道。再比如库存数据,每周四公布,你周三晚上就可以把策略准备好。
我个人习惯用日历法——把未来一个月所有可能影响基差的事件列出来,标注时间、影响方向、预期幅度。然后每天扫一眼,看看有没有超预期的可能。
3.2 入场时机
入场时机分两种:提前埋伏和事件后追入。
- 提前埋伏: 适合确定性高的事件,比如交割月。我一般提前3-5天建仓,吃的是“预期差”。
- 事件后追入: 适合突发性事件,比如天气。我一般等市场第一波反应结束后(大约15-30分钟),再判断是否还有第二波。
这里有个坑。我曾经在2020年原油宝事件后,看到近月贴水巨大,觉得是机会,直接冲进去做多近月空远月。结果呢?近月继续暴跌,基差从-5块拉到-15块。后来我才明白——事件驱动的第一波往往是最猛烈的,不要接飞刀。
3.3 止损与止盈
事件驱动策略的止损,不能按常规的百分比来。因为事件冲击下,波动率会急剧放大。我一般用“时间止损”+“幅度止损”双保险。
- 时间止损: 如果事件发生后2小时内,基差没有朝预期方向走,直接平仓。说明判断错了。
- 幅度止损: 基差反向波动超过历史波动率的2倍标准差,无条件止损。
止盈方面,我建议“见好就收”。事件驱动的行情往往来得快去得也快。我一般设定目标位——比如基差回归到持仓成本附近,或者事件影响消退后,就平仓。不要贪。
四、实战案例:交割月基差陷阱
讲个我自己的案例吧。2021年9月,我做铁矿石。当时I2109合约临近交割,持仓量还很大。按照规则,交割月前一个月,持仓限额会从6000手降到2000手。这意味着大量散户必须平仓。
我当时判断:近月会被砸出贴水。于是提前一周,我做了空近月多远月的操作。入场时基差是+20(近月升水)。
结果呢?前三天基差纹丝不动。我开始怀疑自己。第四天,突然有消息说某大型钢厂要交割,近月瞬间被拉起来,基差从+20冲到+50。我浮亏了。
但我没动。为什么?因为我知道,持仓限额还没到最终截止日。果然,第五天,持仓限额生效,多头被迫平仓,近月暴跌,基差从+50直接砸到-30。我反手盈利。
五、策略优化:量化事件驱动
纯主观交易太累了。后来我把这套逻辑量化了。核心思路是:建立事件数据库,用历史数据训练模型,预测事件对基差的影响方向和幅度。
代码框架大概长这样:
# 事件驱动基差策略 - 量化框架
# 伪代码示例
class EventDrivenBasisStrategy:
def __init__(self, event_calendar):
self.events = event_calendar # 事件日历
self.basis_history = [] # 历史基差数据
def pre_event_analysis(self, event):
# 分析事件前基差状态
pre_basis = self.get_current_basis()
historical_impact = self.get_historical_impact(event.type)
# 判断是否超预期
if event.expected_impact > historical_impact.std * 2:
return "超预期,可交易"
else:
return "预期内,观望"
def post_event_execution(self, event, direction):
# 事件发生后执行交易
if direction == "long_basis":
# 做多基差:多近月空远月
self.place_order("buy", near_month, 1)
self.place_order("sell", far_month, 1)
elif direction == "short_basis":
# 做空基差:空近月多远月
self.place_order("sell", near_month, 1)
self.place_order("buy", far_month, 1)
# 设置止损
self.set_stop_loss(time_limit=2, price_limit=2*std)
def backtest(self, historical_data):
# 回测
for event in self.events:
signal = self.pre_event_analysis(event)
if signal == "超预期,可交易":
self.post_event_execution(event, signal.direction)
self.record_result()
这套框架我用了两年,效果还不错。但有个问题——事件数据库的维护成本很高。你得不断更新事件类型、影响参数、历史数据。说白了,这是个脏活累活。
六、避坑指南
最后,说几个我踩过的坑,你注意一下。
- 别信“确定性事件”: 市场里没有100%确定的事。哪怕交割月持仓限额,也可能因为交易所临时调整规则而失效。我2019年就遇到过,交易所突然放宽了持仓限额,我的策略直接被打脸。
- 小心“事件叠加”: 有时候多个事件同时发生,比如库存报告+政策传闻+主力换月。这时候基差的波动会非常复杂,很难判断哪个事件是主因。我建议这种时候直接观望。
- 别忽视流动性: 事件驱动策略往往需要在短时间内大量成交。如果流动性不足,你的滑点可能吃掉所有利润。我一般只做主力合约和次主力合约,流动性差的合约碰都不碰。
- 情绪管理: 事件驱动策略的波动率很大,一天亏5%很正常。如果你心脏受不了,就别做。我见过太多人,明明策略是对的,但因为扛不住浮亏,在黎明前割肉了。
好了,事件驱动型基差策略就讲这么多。记住,策略是死的,市场是活的。别死板套用,要根据实际情况灵活调整。我见过太多人,拿着一个策略模型就以为能躺赚,结果被市场教育得服服帖帖。
做交易,说到底还是跟人性斗。事件驱动策略放大了人性的贪婪和恐惧,你扛得住,就能赚钱。扛不住,就老老实实做点简单的策略吧。