6. 事件日历构建:建立事件数据库、事件分类与标签、事件时间窗口定义
做事件驱动交易,说白了就是跟「日历」打交道。
你想想看,一个公司什么时候发财报?什么时候开股东大会?美联储哪天议息?这些都不是随机发生的。它们都写在日历上。但光有日历还不够,你得把日历变成一套可执行的系统。
我个人习惯把这件事拆成三步:建库、分类、定窗口。下面我一个个说。
6.1 建立事件数据库
数据库是地基。地基不稳,后面全白搭。
我最早做这个的时候,用的是Excel硬拉。后来数据量一上来,Excel直接崩了。嗯,从那以后我全换成了SQLite或者PostgreSQL。轻量级用SQLite,生产环境用PostgreSQL。
一个最小可用的事件表,长这样:
CREATE TABLE events (
id INTEGER PRIMARY KEY AUTOINCREMENT,
ticker TEXT NOT NULL, -- 股票代码
event_type TEXT NOT NULL, -- 事件类型
event_date DATE NOT NULL, -- 事件发生日期
announce_date DATE, -- 公告日期
source TEXT, -- 数据来源
tags TEXT, -- 标签(JSON格式)
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
字段不多,但够用。我建议你加上 announce_date,因为很多事件不是当天才被市场知道的。比如财报,实际发布前几周就有预告了。这个时间差,恰恰是交易机会所在。
tags 字段存JSON。这样不用频繁改表结构。比如一个事件可以同时打上「财报」「超预期」「科技股」三个标签,查起来非常灵活。
6.2 事件分类与标签
事件分类,我把它分成三大类:
- 固定日历事件:财报发布、分红除权、股东大会、指数调仓。这些时间基本是固定的,可以提前半年甚至一年预判。
- 政策/宏观事件:美联储利率决议、非农数据、CPI发布、央行会议。这些由国家机构定时间,也是固定的。
- 突发/随机事件:并购重组、诉讼判决、产品召回、CEO离职。这些没法提前预判,但发生后需要立刻标记。
标签系统我建议用「层级标签」。举个例子:
| 一级分类 | 二级分类 | 标签示例 |
|---|---|---|
| 财报 | 业绩预告 | 预增、预亏、扭亏 |
| 财报 | 正式发布 | 超预期、符合预期、不及预期 |
| 宏观 | 利率决议 | 加息、降息、按兵不动 |
| 公司事件 | 并购 | 要约收购、合并、剥离 |
为什么要分这么细?因为不同标签对应不同的波动率行为。比如「预增」标签,事件前隐含波动率会慢慢上升,事件后快速回落。而「并购」标签,波动率可能在公告当天直接跳升。
6.3 事件时间窗口定义
事件窗口,就是「事件前多久开始交易,事件后多久结束交易」。这个窗口定义,直接决定了你的策略是赚是亏。
我一般用三个参数:
- T-0:事件发生当天
- 事件前窗口:比如 T-30 到 T-1,即事件前30天到前1天
- 事件后窗口:比如 T+1 到 T+30,即事件后1天到后30天
但这里有个坑。我曾经在回测时发现,有些策略在T-30到T-1表现很好,但实盘一跑就亏。为什么?因为我把「公告日期」和「事件日期」搞混了。
举个例子:财报实际发布日期是3月15日,但公司可能在2月20日就发了预告。如果你用3月15日作为T-0,那2月20日到3月14日这个窗口里,波动率早就被预告事件消化了。你进场时,波动率已经在高位,赚不到钱。
我常用的窗口定义规则:
def get_event_window(event_type, announce_date, event_date):
if event_type == 'earnings_preview':
# 业绩预告:窗口从预告前20天到预告后5天
return (announce_date - 20, announce_date + 5)
elif event_type == 'earnings_official':
# 正式财报:窗口从正式发布前5天到发布后10天
return (event_date - 5, event_date + 10)
elif event_type == 'fed_rate':
# 美联储利率决议:窗口从决议前15天到决议后3天
return (event_date - 15, event_date + 3)
else:
# 默认窗口:前30天到后10天
return (event_date - 30, event_date + 10)
这段代码看着简单,但实际用起来要反复调参。我建议你一开始用宽窗口(比如前后各30天),然后逐步缩窄,找到最优区间。
6.4 知识体系总览
下面这张图,是我自己梳理的事件日历构建流程。你可以把它当成一个检查清单:
这张图从左到右、从上到下,就是一套完整的事件日历构建流程。你照着这个框架搭,基本不会漏掉关键环节。
公众号:蓝海资料掘金营,微信deep3321