代码修复 (16 个模块): - GARCH 模型统一改用 t 分布 + 收敛检查 (returns/volatility/anomaly) - KS 检验替换为 Lilliefors 检验 (returns) - 修复数据泄漏: StratifiedKFold→TimeSeriesSplit, scaler 逐折 fit (anomaly) - 前兆标签 shift(-1) 预测次日异常 (anomaly) - PSD 归一化加入采样频率和单边谱×2 (fft) - AR(1) 红噪声基线经验缩放 (fft) - 盒计数法独立 x/y 归一化, MF-DFA q=0 (fractal) - ADF 平稳性检验 + 移除双重 Bonferroni (causality) - R/S Hurst 添加 R² 拟合优度 (hurst) - Prophet 递推预测避免信息泄露 (time_series) - IC 计算过滤零信号, 中性形态 hit_rate=NaN (indicators/patterns) - 聚类阈值自适应化 (clustering) - 日历效应前后半段稳健性检查 (calendar) - 证据评分标准文本与代码对齐 (visualization) - 核心管道 NaN/空值防护 (data_loader/preprocessing/main) 报告修复 (docs/REPORT.md, 15 处): - 标度指数 H_scaling 与 Hurst 指数消歧 - GBM 6 个月概率锥数值重算 - CLT 限定、减半措辞弱化、情景概率逻辑修正 - GPD 形状参数解读修正、异常 AUC 证据降级 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
76 lines
2.4 KiB
Python
76 lines
2.4 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
测试脚本:验证Hurst分析增强功能
|
||
- 15个时间粒度的多尺度分析
|
||
- Hurst vs log(Δt) 标度关系图
|
||
"""
|
||
|
||
import sys
|
||
from pathlib import Path
|
||
|
||
# 添加项目路径
|
||
sys.path.insert(0, str(Path(__file__).parent.parent))
|
||
|
||
from src.hurst_analysis import multi_timeframe_hurst, plot_multi_timeframe, plot_hurst_vs_scale
|
||
|
||
def test_15_scales():
|
||
"""测试15个时间尺度的Hurst分析"""
|
||
print("=" * 70)
|
||
print("测试15个时间尺度Hurst分析")
|
||
print("=" * 70)
|
||
|
||
# 定义全部15个粒度
|
||
ALL_INTERVALS = ['1m', '3m', '5m', '15m', '30m', '1h', '2h', '4h', '6h', '8h', '12h', '1d', '3d', '1w', '1mo']
|
||
|
||
print(f"\n将测试以下 {len(ALL_INTERVALS)} 个时间粒度:")
|
||
print(f" {', '.join(ALL_INTERVALS)}")
|
||
|
||
# 执行多时间框架分析
|
||
print("\n开始计算Hurst指数...")
|
||
mt_results = multi_timeframe_hurst(ALL_INTERVALS)
|
||
|
||
# 输出结果统计
|
||
print("\n" + "=" * 70)
|
||
print(f"分析完成:成功分析 {len(mt_results)}/{len(ALL_INTERVALS)} 个粒度")
|
||
print("=" * 70)
|
||
|
||
if mt_results:
|
||
print("\n各粒度Hurst指数汇总:")
|
||
print("-" * 70)
|
||
for interval, data in mt_results.items():
|
||
print(f" {interval:5s} | R/S: {data['R/S Hurst']:.4f} | DFA: {data['DFA Hurst']:.4f} | "
|
||
f"平均: {data['平均Hurst']:.4f} | 数据量: {data['数据量']:>7}")
|
||
|
||
# 生成可视化
|
||
output_dir = Path(__file__).parent.parent / "output" / "hurst_test"
|
||
output_dir.mkdir(parents=True, exist_ok=True)
|
||
|
||
print("\n" + "=" * 70)
|
||
print("生成可视化图表...")
|
||
print("=" * 70)
|
||
|
||
# 1. 多时间框架对比图
|
||
plot_multi_timeframe(mt_results, output_dir, "test_15scales_comparison.png")
|
||
|
||
# 2. Hurst vs 时间尺度标度关系图
|
||
plot_hurst_vs_scale(mt_results, output_dir, "test_hurst_vs_scale.png")
|
||
|
||
print(f"\n图表已保存至: {output_dir.resolve()}")
|
||
print(" - test_15scales_comparison.png (15尺度对比柱状图)")
|
||
print(" - test_hurst_vs_scale.png (标度关系图)")
|
||
else:
|
||
print("\n⚠ 警告:没有成功分析任何粒度")
|
||
|
||
print("\n" + "=" * 70)
|
||
print("测试完成")
|
||
print("=" * 70)
|
||
|
||
if __name__ == "__main__":
|
||
try:
|
||
test_15_scales()
|
||
except Exception as e:
|
||
print(f"\n❌ 测试失败: {e}")
|
||
import traceback
|
||
traceback.print_exc()
|
||
sys.exit(1)
|