协整检验存在的过拟合的问题(Cursor)

我来帮你分析 multi_coins3.py 中协整检验是否存在过拟合问题。让我先读取该文件查看具体实现。

[1 tool called]

我来详细分析 multi_coins3.py 中协整检验的过拟合问题。

协整检验过拟合问题分析

通过分析代码,我发现确实存在多个过拟合风险点

1. 全样本OLS回归的Look-Ahead Bias(最严重)

@staticmethod
def _calculate_cointegration_params(base_prices: pd.Series, alt_prices: pd.Series,
                                    coin: str = None, base_symbol: str = None) -> Optional[dict]:
    """
    使用OLS回归计算协整参数(验证性函数)
    ...
    Note:
        - 此函数用于验证性分析,使用全样本数据是标准做法(Engle-Granger两步法)
        - 虽然存在 look-ahead bias,但这是协整检验的标准方法
    """
    # 使用全部历史数据进行OLS回归
    model = LinearRegression()
    model.fit(log_base, log_alt)

问题

  • 使用全部历史数据拟合模型,包括"未来"数据
  • 模型参数会记住历史噪声和异常值
  • 代码注释承认了这个问题(391-394行),但仍在实际使用中调用

2. 多重检验导致的假阳性膨胀

# 遍历所有周期数据,计算Z-score 和 协整检验结果
cointegration_result_list = []
if self.ENABLE_ZSCORE_CHECK:
    for stats_period_key in price_data_cache:
        # 对每个周期都进行协整检验
        cointegration_status_total_period, cointegration_status_short_period, cointegration_result = self.multiple_cointegration_analysis(...)
        # 保存当前周期数据的协整检验结果
        cointegration_result_list.extend([cointegration_status_total_period, cointegration_status_short_period])

# 只需要至少2个周期通过
if cointegration_true_count < self.COINTEGRATION_RESULT_APPROVED_THRESHOLD_NUMBER:

问题

  • 对3个时间周期(5m/7d, 1h/30d, 4h/60d)× 2种方法 = 6次独立检验
  • 只需要2/6通过就认为协整存在
  • 在α=0.05显著性水平下,6次独立检验至少2次假阳性的概率约为26.5%(远高于5%)
  • 未进行多重检验校正(如Bonferroni校正)

3. 固定窗口参数缺乏适应性

# ========== 双窗口策略配置 ==========
# OLS回归窗口(长期关系窗口,用于 Z-score 价差构建)
BETA_WINDOW = 100  # 建议值:80-120,平衡稳定性与响应性(OLS回归窗口)

# Z-score 统计量计算窗口(短期偏离窗口)
ZSCORE_WINDOW = 30  # 建议值:20-30,保持短期均值回归敏感度

问题

  • 硬编码窗口长度(100期和30期)
  • 不考虑市场状态变化(牛市/熊市/震荡市)
  • 不同币种可能需要不同窗口长度
  • 可能对某些历史时期过拟合,对其他时期欠拟合

4. 参数优化的数据窥探风险

# ========== 相关系数过滤配置 ==========
TARGET_CORR_THRESHOLD = 0.6  # ('4h', '60d') 组合的相关系数阈值

# ========== 新增:Z-score 配置 ==========
ZSCORE_THRESHOLD_LONG = 0.2  # 测试值
ZSCORE_THRESHOLD_MIDDLE = 1.5  # 测试值
ZSCORE_THRESHOLD_SHORT = 1.8  # 测试值

问题

  • 多个阈值参数(相关系数0.6,Z-score 0.2/1.5/1.8)
  • 注释标注"测试值",暗示经过历史数据调优
  • 如果这些参数是通过回测优化得到的,存在数据窥探偏差

5. 未考虑协整关系的时变性

代码假设协整关系是稳定的,但实际上:

  • 币种间的协整关系会随市场机制变化而漂移
  • 没有检测协整关系崩溃(cointegration breakdown)的机制
  • 没有动态更新OLS参数

过拟合风险总结

问题类型 严重程度 影响
全样本OLS Look-Ahead Bias ⚠️⚠️⚠️ 高 实盘表现可能远低于历史回测
多重检验假阳性膨胀 ⚠️⚠️⚠️ 高 假信号率可能高达26.5%
固定窗口缺乏适应性 ⚠️⚠️ 中 不同市场状态表现不稳定
参数数据窥探 ⚠️⚠️ 中 历史最优参数未来可能失效
协整关系时变性 ⚠️ 低 长期运行可能失效

改进建议

我可以帮你创建一个优化方案来解决这些问题,包括:

  1. 滚动窗口OLS - 完全替换全样本方法
  2. 多重检验校正 - 使用Bonferroni或FDR校正
  3. 自适应窗口长度 - 基于波动率动态调整
  4. 样本外验证 - 添加walk-forward分析
  5. 协整稳定性检测 - 监控协整关系漂移

你需要我创建详细的改进计划吗?

Read more

跑步的技巧(滚动落地)

“滚动落地(rolling contact / rolling foot strike)”不是一种教条式的“脚法”,而是一种 让冲击沿着整只脚、整条后链逐级传递的落地机制。 它的核心不是“你先用哪儿着地”,而是: 你的脚落地之后,冲击是不是像轮子一样滚过去,而不是像锤子一样砸下去。 这就是滚动落地的本质。 一、什么叫“滚动落地”? 你可以把它理解成两种完全不同的落地方式: 1. 砸地(撞击式) 脚像锤子一样拍到地上: * 要么后跟先砸 * 要么前掌先戳 * 冲击集中在一个点 * 一个结构瞬间吃掉大部分载荷 结果就是: * 后跟砸 → 膝盖难受 * 前掌戳 → 前脚掌磨烂 * 都不是长跑友好模式 这叫 撞击式着地(impact strike)。 2. 滚地(滚动式) 脚像轮胎一样“滚”过地面: * 不是某一点硬砸 * 而是外侧中足先轻触 * 再向前滚到前掌 * 最后从大脚趾蹬离

By SHI XIAOLONG

AMI的优越性

世界模型(World Models)的具体例子 如下,我按类型分类,便于理解。每类都附带实际实现、演示效果和应用场景。 1. Yann LeCun / Meta 的 JEPA 系列(最直接对应“世界模型”概念) 这些是 LeCun 主张的非生成式抽象预测世界模型代表。 * I-JEPA(Image JEPA,2023) 输入一张图像,模型把不同区域(context 和 target)编码成抽象表示,然后预测 target 的表示(不在像素级别重建)。 例子:给定一张遮挡了部分物体的图片,模型能预测“被遮挡物体的大致位置和属性”,构建对物体持久性和空间关系的理解。 这是一个“原始世界模型”,能学习物理常识(如物体不会凭空消失)。 * V-JEPA / V-JEPA 2(Video JEPA,

By SHI XIAOLONG

什么是:“世界模型(World Models)”

世界模型(World Models) 是人工智能领域的一个核心概念,尤其在 Yann LeCun 等研究者推动的下一代 AI 架构中占据中心位置。它指的是 AI 系统在内部构建的对现实世界的抽象模拟或内部表示,让机器能够像人类或动物一样“理解”物理世界、预测未来、规划行动。 简单比喻 想象你闭上眼睛也能“看到”房间里的物体会如何移动、碰撞或掉落——这就是你大脑里的世界模型。AI 的世界模型就是类似的“数字孪生”(digital twin)或“内部模拟器”:它不是简单记住数据,而是学习世界的动态、因果关系和物理直觉(如重力、物体持久性、遮挡、因果等)。 为什么需要世界模型? 当前主流的大型语言模型(LLM) 擅长处理文本(统计模式预测),但存在根本局限: * 缺乏对物理世界的真正理解 → 容易“幻觉”、无法可靠规划。 * 样本效率低 → 人类/

By SHI XIAOLONG

K线周期可配置化设计方案

K线周期可配置化设计方案 1. 背景与目标 当前 Beta 套利策略的 K 线周期硬编码为 "1h",分散在多个文件中。需要: 1. 将 K 线周期从 1h 改为 2h 2. 提取为环境变量 BETA_ARB_KLINE_INTERVAL,使其可在 .env 中配置 2. 影响范围分析 2.1 需要修改的文件(共 6 个) 文件 硬编码位置 修改内容 src/trading/config.py BetaArbConfig dataclass 新增 kline_interval 字段,

By SHI XIAOLONG