假设我是交易的5分钟级别的,那么协整检验可以4小时级别的K线吗?
这是一个非常成熟、也是专业量化里真实在用的问题。
直接给结论,然后我把什么时候可以、什么时候绝对不行、以及正确用法全部讲清楚。
一、结论先行(非常明确)
✅ 可以,而且这是专业交易里“推荐”的做法之一。
用 4H K 线做协整检验,用 5min 做进出场,是一种“多时间尺度分离”的标准结构。
但要立刻补一句:
⚠️ 前提是:你清楚“谁管什么”,而不是混着用。
二、为什么这在统计和交易上是“合理的”?
1️⃣ 协整 ≠ 交易信号,它是“结构假设”
协整检验在做什么?
验证两个价格是否存在长期(低频)均衡关系
而 5min 交易在做什么?
利用短期(高频)偏离
👉 这两件事本来就不该在同一个频率上做。
2️⃣ 用 4H 做协整,反而更“干净”
4H 数据相比 5min:
| 维度 | 5min | 4H |
|---|---|---|
| 微结构噪声 | 极高 | 极低 |
| bid-ask 影响 | 大 | 几乎无 |
| 自相关复杂度 | 高 | 简单 |
| 协整稳定性 | 假阳性多 | 更可靠 |
👉 用 5min 做协整:
- 很容易检出“噪声协整”
- 回测很好,实盘崩
3️⃣ 多时间尺度是对“regime 风险”的天然防御
- 协整关系是 慢变量
- 5min 波动是 快变量
你等于在做:
低频确认结构 + 高频榨取噪声
这是非常经典的工程分层设计。
三、什么时候“绝对不可以”这样做?
❌ 错误场景 1:用 4H β 直接算 5min spread
这是大坑。
❌ 错误:
spread_5m = log_price_5m_A - (alpha_4h + beta_4h * log_price_5m_B)
原因:
- β 在不同频率下 不严格等价
- 高频存在 lead-lag、异方差
👉 正确做法见后面。
❌ 错误场景 2:4H 协整早已失效,还在 5min 交易
你必须意识到:
4H 协整失效 ≠ 5min 马上爆炸
但 迟早会出事
所以协整检验必须 滚动更新。
四、正确的“工程级”做法(推荐你直接照着用)
🧠 结构分层(重点)
| 层级 | 频率 | 作用 |
|---|---|---|
| 协整层 | 4H | 结构过滤(pair 是否可交易) |
| 参数层 | 5min 或 15min | β、均值、波动 |
| 信号层 | 5min | Z-score / 进出场 |
| 风控层 | 5min | 止损、退场 |
1️⃣ 协整检验(4H)
# 用 4H 数据
beta_4h = sm.OLS(logA_4h, sm.add_constant(logB_4h)).fit().params
spread_4h = logA_4h - beta_4h[1] * logB_4h
adf_4h = adfuller(spread_4h, autolag='AIC')
要求:
- AIC + BIC 双重通过
- 半衰期 < 某阈值(如 < 30 根 4H)
2️⃣ β 的正确用法(非常关键)
两种专业做法,二选一:
✅ 方案 A(更稳健,推荐)
- 用 5min 数据重新估 β
- 但 只在 4H 协整通过时才允许交易
beta_5m = rolling_ols(logA_5m, logB_5m, window=200)
⚠️ 方案 B(简化版)
- 用 4H β
- 但 对 5min spread 做 EMA 平滑
- 且只做小仓位
3️⃣ 进出场(5min)
z = (spread_5m - mean_rolling) / std_rolling
if z > 2:
short_spread()
elif z < -2:
long_spread()
4️⃣ 协整失效处理(必须)
- 每天 / 每 2 天
- 重跑一次 4H 协整
- 一旦失败:
- 立刻禁止新开仓
- 老仓只做被动平仓
五、一个“量化老手级”的判断标准
如果你的交易频率比协整检验频率高 1–2 个数量级,
那你做的是“结构 + 噪声”的分离,这是好设计。
你现在的设定是:
- 4H 协整(结构)
- 5min 交易(噪声)
👉 完全合理,甚至是教科书级的设计
六、一句话总结
5min 交易,完全可以、而且应该用 4H 做协整检验,
但必须:分层、滚动、不要混频率乱算 spread。