第三章:事件分类引擎——把宏观事件分成三类
做外汇交易这些年,我最大的体会就是:市场不是被事件本身驱动,而是被“预期差”驱动。
什么意思呢?
同一个非农数据,有时候公布值很好,美元反而跌了。有时候数据很差,美元却涨了。为什么会这样?说白了,市场早就把“预期”price in了。真正让市场波动的,是实际值和预期值之间的差距。
所以,我设计事件分类引擎时,核心思路就一条:把宏观事件按“预期差”分成三类。
- 预期内事件——市场已经消化,波动有限
- 超预期事件——方向性机会,值得重仓
- 黑天鹅事件——极端行情,保命第一
下面我一个个讲清楚,包括触发条件怎么定义。
3.1 第一类:预期内事件
这类事件最没意思,但出现频率最高。
定义很简单:实际公布值与市场预期值偏差在±1个标准差以内。
举个例子,非农就业人数预期20万,实际公布18.5万到21.5万之间,都属于预期内。市场会怎么反应?嗯,基本没反应。或者小幅震荡一下,然后回归原趋势。
触发条件可以这样定义:
# 预期内事件触发条件
def is_within_expectation(actual, expected, std_dev):
deviation = abs(actual - expected) / std_dev
return deviation <= 1.0
这里有个坑——标准差怎么取?
我个人习惯用Bloomberg或路透的预测数据,它们会给出所有经济学家的预测值,然后算标准差。如果手头没有这些数据源,也可以用历史数据的标准差来近似。
3.2 第二类:超预期事件
这才是我们真正要抓的机会。
定义:实际公布值与市场预期值偏差超过±1个标准差,但小于±3个标准差。
这类事件会引发明显的方向性行情。比如非农预期20万,实际只有12万,偏差超过2个标准差。这时候美元通常会快速下跌,欧元、英镑、黄金都会涨。
我曾经在2019年7月遇到过这种情况。当时美联储利率决议,市场预期降息25个基点,结果直接降了50个基点。偏差超过2.5个标准差。我提前挂好了欧元多单,那一波吃了120个点。
触发条件:
# 超预期事件触发条件
def is_surprise(actual, expected, std_dev):
deviation = abs(actual - expected) / std_dev
return 1.0 < deviation <= 3.0
这里要注意一个细节:偏差方向很重要。
同样是超预期,利好和利空的方向完全不同。所以我会在分类引擎里加一个方向标记:
def classify_surprise(actual, expected, std_dev):
deviation = (actual - expected) / std_dev
if deviation > 1.0 and deviation <= 3.0:
return "超预期利好"
elif deviation < -1.0 and deviation >= -3.0:
return "超预期利空"
else:
return "其他"
3.3 第三类:黑天鹅事件
这类事件最危险,但也最考验系统设计。
定义:实际公布值与市场预期值偏差超过±3个标准差。
你想想看,3个标准差是什么概念?在正态分布里,偏差超过3个标准差的概率只有0.3%。也就是说,1000次事件里可能只出现3次。但一旦出现,市场会剧烈波动,流动性瞬间枯竭,点差可以扩大到平时的10倍甚至100倍。
我记得2020年3月,美联储紧急降息100个基点,那次就是典型的黑天鹅。当时市场预期最多降50个基点,结果直接降了100个。偏差超过4个标准差。很多做市商直接暂停报价,我的EA差点爆仓。
触发条件:
# 黑天鹅事件触发条件
def is_black_swan(actual, expected, std_dev):
deviation = abs(actual - expected) / std_dev
return deviation > 3.0
但这里有个问题——黑天鹅事件发生时,你根本来不及反应。
所以我的系统里,黑天鹅事件不是用来“交易”的,而是用来“风控”的。一旦触发黑天鹅条件,系统会自动做三件事:
- 暂停所有新开仓
- 平掉所有亏损仓位
- 启动对冲保护
3.4 三类事件的完整分类逻辑
把上面三部分整合起来,就是一个完整的事件分类引擎:
def event_classifier(actual, expected, std_dev):
deviation = (actual - expected) / std_dev
if abs(deviation) <= 1.0:
return {
"type": "预期内",
"action": "观望",
"risk_level": "低"
}
elif abs(deviation) <= 3.0:
direction = "利好" if deviation > 0 else "利空"
return {
"type": f"超预期({direction})",
"action": "顺势交易",
"risk_level": "中"
}
else:
return {
"type": "黑天鹅",
"action": "风控模式",
"risk_level": "高"
}
这个函数看起来简单,但实际生产环境里,我还会加几个参数:
- 事件类型:利率决议、非农、CPI、GDP等,不同类型的事件波动率不同
- 市场状态:趋势市还是震荡市,会影响分类阈值
- 流动性:亚洲盘、欧洲盘、美国盘,流动性不同,分类标准也要调整
3.5 分类引擎的架构图
下面这张图是我系统里事件分类引擎的核心流程。你可以看到数据从输入到分类再到决策的完整链路。
3.6 实际应用中的几个坑
理论讲完了,说几个实战中容易踩的坑。
第一个坑:标准差不是固定的
不同事件的标准差差别很大。比如非农的标准差通常在2-3万之间,但CPI的标准差只有0.1-0.2个百分点。你不能用一个固定阈值去套所有事件。我建议按事件类型分别计算标准差。
第二个坑:预期值本身会变
你知道吗?非农数据公布前15分钟,Bloomberg上的预期值可能还在变。因为有些大投行会在最后一刻调整预测。所以我的系统会在数据公布前5秒才锁定预期值。
第三个坑:黑天鹅的“假信号”
有时候偏差超过3个标准差,但市场反应并不大。为什么?因为那个数据可能被提前泄露了,或者市场已经通过其他渠道消化了。所以我的黑天鹅检测还会加一个“市场反应确认”环节——看数据公布后1分钟内的价格波动是否超过某个阈值。
3.7 总结一下
事件分类引擎是整个宏观交易系统的核心。它决定了你什么时候该出手,什么时候该观望,什么时候该跑路。
三类事件的划分标准:
| 事件类型 | 偏差范围 | 操作建议 | 风险等级 |
|---|---|---|---|
| 预期内 | ≤ 1σ | 观望,不参与 | 低 |
| 超预期 | 1σ < 偏差 ≤ 3σ | 顺势交易,方向明确 | 中 |
| 黑天鹅 | > 3σ | 风控模式,平仓+对冲 | 高 |
嗯,这一章的内容就到这里。记住一句话:分类不是目的,行动才是。下一章我会讲怎么根据分类结果,自动生成交易信号和仓位管理策略。
公众号:蓝海资料掘金营,微信deep3321