协整检验单周期优化方案
协整检验单周期优化方案
日期: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_THRESHOLD:3→1
分析层(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_map从DATA_WINDOW_CONFIG动态构建- 数据量检查从
< 3改为< len(DATA_WINDOW_CONFIG) latest_alt_price:不再从 K 线取价,传None让下游走get_all_mids()实时价格- analysis_record:
zscore_5m/zscore_1h固定为0.0,corr_5m_7d/corr_1h_30d固定为None
交易层(1 个文件)
src/trading/orchestrator.py
- 入场信号:
zscore_5m/zscore_1h固定0.0,zscore_4h用zscore_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 联合查询简化为仅查 4hfetch_klines_batch():仅加载配置中的 timeframeanalyze_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.py、backfill_all_data.py、query_purr_zscore.py 等)从 DB 读取历史数据(含 zscore_5m/zscore_1h 列),不影响运行时逻辑,保持不动。