23. 事件驱动策略:交割日效应、移仓换月、宏观数据发布
做基差交易,很多人只盯着价差曲线看。
但我跟你说,真正赚钱的机会,往往藏在日历里。
事件驱动策略,说白了就是利用市场在特定时间点的“非理性”行为来获利。我个人习惯把这类策略称为“日历套利”,因为它的核心就是时间表。
23.1 交割日效应:最后的疯狂
每个期货合约都有到期日。临近交割,会发生什么?
持仓量大的资金必须平仓或移仓。如果多空双方都不肯认输,就会在最后几天出现剧烈的基差波动。我见过最夸张的一次,某品种在交割前三天,基差从贴水50点直接拉到升水120点,然后又砸回去。
核心逻辑:交割日附近,流动性下降,逼仓风险上升。基差会脱离基本面,被资金博弈主导。
具体怎么抓?我总结了三类信号:
- 持仓量异常:临近交割,持仓量不降反升,说明有人要搞事
- 基差偏离均值:基差超过过去20日标准差的两倍,大概率会回归
- 成交量萎缩:流动性枯竭时,一个小单就能把价差打飞
我的经验:交割日效应在商品期货上更明显,股指期货因为现金交割,波动相对小。但如果你做的是铁矿石、PTA这类实物交割品种,交割日前三天一定要盯盘。
23.2 移仓换月:流动性迁移的套利机会
移仓换月,就是主力资金从近月合约搬到远月合约的过程。
这个过程会产生一个很明显的现象:近月合约流动性下降,远月合约流动性上升。价差结构会因此扭曲。
我举个例子。假设当前是6月,主力合约是09合约。到了7月中旬,资金开始往01合约迁移。这时候你会发现:
- 09-01价差会先扩大(因为09被抛售)
- 然后缩小(因为01被买入)
- 最后稳定在新的均衡位置
这个过程中,我们可以做“跨期套利”:做空近月,做多远月。等移仓结束,价差回归,平仓获利。
避坑指南:我曾经在螺纹钢上吃过亏。当时我以为移仓换月一定会导致价差回归,结果遇到了一波趋势行情,近月被现货拉着走,价差越拉越大。后来我学乖了——移仓换月策略必须配合趋势过滤。如果近月处于强势趋势中,不要轻易做空。
移仓换月的识别方法,我一般看两个指标:
| 指标 | 判断标准 |
|---|---|
| 持仓量变化 | 近月持仓量连续3日下降,远月连续3日上升 |
| 成交量占比 | 远月成交量超过近月成交量的50% |
23.3 宏观数据发布:预期差的博弈
宏观数据发布,比如CPI、PPI、GDP、非农就业,这些数据一出来,市场会瞬间反应。
但基差交易者关注的不是数据本身,而是“预期差”。
为什么会这样?因为数据发布前,市场已经通过远期合约price in了预期。如果实际数据符合预期,基差不会有太大变化。但如果数据超预期或不及预期,基差就会剧烈波动。
我个人的做法是:
- 数据发布前30分钟:建立跨期套利头寸,方向与市场主流预期相反
- 数据发布后5分钟:观察基差变化,如果方向对了,加仓;如果错了,止损
- 数据发布后30分钟:无论盈亏,平仓离场
关键点:宏观数据发布策略的核心是“快进快出”。不要恋战,不要想着吃到最后一口。我见过太多人因为贪心,在数据发布后持仓过夜,结果第二天被反向波动打爆。
这里我分享一个具体的代码片段,用于自动抓取宏观数据发布时间并生成交易信号:
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
# 宏观数据发布日历(示例)
macro_calendar = {
'CPI': {'release_day': 9, 'release_time': '09:30'},
'PPI': {'release_day': 9, 'release_time': '09:30'},
'GDP': {'release_day': 15, 'release_time': '10:00'},
'非农': {'release_day': 'first_friday', 'release_time': '20:30'}
}
def check_macro_event(today):
"""检查今天是否有宏观数据发布"""
for event, info in macro_calendar.items():
if info['release_day'] == 'first_friday':
# 计算当月第一个周五
first_day = today.replace(day=1)
days_to_friday = (4 - first_day.weekday()) % 7
first_friday = first_day + timedelta(days=days_to_friday)
if today == first_friday:
return event, info['release_time']
else:
if today.day == info['release_day']:
return event, info['release_time']
return None, None
# 使用示例
today = datetime.now()
event, release_time = check_macro_event(today)
if event:
print(f"今天有{event}数据发布,发布时间:{release_time}")
# 这里可以触发你的交易逻辑
else:
print("今天没有宏观数据发布")
小技巧:宏观数据发布前,我会把基差的历史波动率调出来看看。如果波动率处于低位,说明市场预期高度一致,这时候数据超预期的概率反而更大。嗯,这个逻辑有点反直觉,但我在实践中验证过多次。
23.4 事件驱动策略的框架图
下面我用一张图来总结事件驱动策略的核心逻辑:
这张图把事件驱动策略的框架讲清楚了。从事件源出发,到三个子事件,再到对应的策略,最后是风险提示。你想想看,其实每个事件背后都是同一个逻辑:市场在特定时间点会犯错,我们要做的就是抓住这个错误。
最后提醒一句:事件驱动策略不是万能药。它需要你时刻关注日历,需要你快速反应。如果你是个懒人,或者你的交易系统延迟很高,那这类策略可能不适合你。我见过太多人因为网络延迟,在数据发布后几秒才下单,结果吃到的全是滑点。
公众号:蓝海资料掘金营,微信deep3321