协整检验单周期优化方案

协整检验单周期优化方案

日期:2026-03-13
范围:剔除 5m/1h 周期,仅保留 4h 进行协整检验

背景

原方案使用 3 个周期(5m/7d、1h/30d、4h/60d)× 2 种方法(Old/New)= 6 个协整结果,Gate1 要求 ≥3 个通过。实际运行中 5m 和 1h 的协整检验几乎全部失败(p-value 远高于 0.05),对信号筛选无正向贡献,反而增加了计算开销和 API 调用量。

优化前后对比

维度 优化前 优化后
协整周期 5m/7d + 1h/30d + 4h/60d 4h/60d
协整结果数 6(3周期 × 2方法) 2(1周期 × 2方法)
Gate1 门槛 ≥3/6 ≥1/2
Gate2 4h/60d 健康监控(不变) 不变
DB 查询(回测脚本) 3 次批量查询(5m+1h+4h) 1 次批量查询(4h)
智能回填 API 调用 3 个 timeframe 1 个 timeframe
latest_alt_price 5m K线收盘价(滞后≤5分钟) get_all_mids() 实时中间价

改动文件清单

核心配置(1 个文件)

src/config.py

  • DATA_WINDOW_CONFIG{'5m': 7, '1h': 30, '4h': 60}{'4h': 60}
  • REQUIRED_PERIODS[('5m','7d'), ('1h','30d'), ('4h','60d')][('4h','60d')]
  • COINTEGRATION_THRESHOLD31

分析层(2 个文件)

src/utils/analysis/analysis_core.py

  • analyze_multi_period():循环自动适配 REQUIRED_PERIODS,日志从硬编码 /6 改为动态 /{total_tests}
  • zscore_list 从 3 元素变为 1 元素,提取 zscore_4h[-1]
  • 移除重复的 z_str 构造,直接格式化单值

src/utils/analysis/risk_evaluator.py

  • Hurst 提取:移除 1h/30d 回退路径,仅从 4h/60d 提取

服务层(1 个文件)

src/services/realtime_kline_service_base.py

  • _fetch_and_validate_price_data()window_mapDATA_WINDOW_CONFIG 动态构建
  • 数据量检查从 < 3 改为 < len(DATA_WINDOW_CONFIG)
  • latest_alt_price:不再从 K 线取价,传 None 让下游走 get_all_mids() 实时价格
  • analysis_record:zscore_5m/zscore_1h 固定为 0.0corr_5m_7d/corr_1h_30d 固定为 None

交易层(1 个文件)

src/trading/orchestrator.py

  • 入场信号:zscore_5m/zscore_1h 固定 0.0zscore_4hzscore_list[-1]
  • 退场信号:移除无用的 zscore_list 取值,zscore_5m/zscore_1h 固定 0.0

告警格式(1 个文件)

src/utils/monitoring/signal_alert_formatter.py

  • _WINDOW_LABELS:仅保留 ('4h','60d')
  • 飞书告警协整通过:/6/2
  • Z-score 验证:从多周期符号一致性判断简化为直接输出 4h Z-score

回测脚本(1 个文件)

src/scripts/backtest_pairwise_correlation.py

  • KLINE_COUNTS / TF_GAP_THRESHOLD:从 DATA_WINDOW_CONFIG 动态派生
  • get_all_symbols() SQL:从 3 个 timeframe 联合查询简化为仅查 4h
  • fetch_klines_batch():仅加载配置中的 timeframe
  • analyze_pair():仅检查 4h 数据
  • 智能回填:timeframes 从硬编码 ['5m','1h','4h'] 改为 DATA_WINDOW_CONFIG.keys()

未改动(DB schema 绑定)

以下文件包含 zscore_5m/zscore_1h/corr_5m_7d/corr_1h_30d 字段引用,但不能删除,因为它们与数据库表结构绑定:

文件 说明
src/trading/models.py PairTradeSignal / ReversionInfo 的字段定义,默认 0.0
src/trading/trade_repository.py trading_signals 表 INSERT SQL
src/utils/database/timescaledb.py analysis_results 表 INSERT/COPY SQL
src/utils/data_healing/repair_executor.py 修复写入时填充所有 DB 列

彻底清除这些字段需要 DB migration(ALTER TABLE DROP COLUMN),属于独立任务。

未改动(离线脚本)

src/scripts/ 下的回测、查询、校验脚本(如 backtest_base.pybackfill_all_data.pyquery_purr_zscore.py 等)从 DB 读取历史数据(含 zscore_5m/zscore_1h 列),不影响运行时逻辑,保持不动。

Read more

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

对于空间环境、“信息/逻辑”(比如代码、结构、表达)秩序追求的心理特征分析

一、为什么是“空间 + 信息”同时强化? 因为你当年面对的是“双重失控”: 1️⃣ 外部世界是脏乱 + 失序的 * 空间被污染 * 行为无边界 * 基本生活秩序崩塌 👉 所以你现在会强烈要求: * 桌面干净 * 房间有序 * 物品可控 这是在修复:“物理世界必须是可控的” 2️⃣ 人的行为和逻辑也是混乱的 * 没有规则 * 没有底线 * 没有理性 👉 所以你现在会特别在意: * 表达是否清晰 * 逻辑是否自洽 * 结构是否优雅 * 代码是否干净 这是在修复:“认知世界必须是合理的” 二、你其实构建了一个“高纯度系统” 你现在的偏好,本质上是: 👉 低噪音 + 高结构 + 强控制感 具体表现就是: * 空间:极简、整洁、可预测 * 信息:清晰、压缩、无冗余 这类人有一个很明显的优势: 👉 处理复杂问题时,

By SHI XIAOLONG