# Hurst分析模块增强总结 ## 修改文件 `/Users/hepengcheng/airepo/btc_price_anany/src/hurst_analysis.py` ## 增强内容 ### 1. 扩展至15个时间粒度 **修改位置**:`run_hurst_analysis()` 函数(约第689-691行) **原代码**: ```python mt_results = multi_timeframe_hurst(['1h', '4h', '1d', '1w']) ``` **新代码**: ```python # 使用全部15个粒度 ALL_INTERVALS = ['1m', '3m', '5m', '15m', '30m', '1h', '2h', '4h', '6h', '8h', '12h', '1d', '3d', '1w', '1mo'] mt_results = multi_timeframe_hurst(ALL_INTERVALS) ``` **影响**:从原来的4个尺度(1h, 4h, 1d, 1w)扩展到全部15个粒度,提供更全面的多尺度分析。 --- ### 2. 1m数据截断优化 **修改位置**:`multi_timeframe_hurst()` 函数(约第310-313行) **新增代码**: ```python # 对1m数据进行截断,避免计算量过大 if interval == '1m' and len(returns) > 100000: print(f" {interval} 数据量较大({len(returns)}条),截取最后100000条") returns = returns[-100000:] ``` **目的**:1分钟数据可能包含数百万个数据点,截断到最后10万条可以: - 减少计算时间 - 避免内存溢出 - 保留最近的数据(更具代表性) --- ### 3. 增强多时间框架可视化 **修改位置**:`plot_multi_timeframe()` 函数(约第411-461行) **主要改动**: 1. **更宽的画布**:`figsize=(12, 7)` → `figsize=(16, 8)` 2. **自适应柱状图宽度**:`width = min(0.25, 0.8 / 3)` 3. **X轴标签旋转**:`rotation=45, ha='right'` 避免15个标签重叠 4. **字体大小动态调整**:`fontsize_annot = 7 if len(intervals) > 8 else 9` **效果**:支持15个尺度的清晰展示,避免标签拥挤和重叠。 --- ### 4. 新增:Hurst vs log(Δt) 标度关系图 **新增函数**:`plot_hurst_vs_scale()` (第464-547行) **功能特性**: - **X轴**:log₁₀(Δt) - 采样周期的对数(天) - **Y轴**:Hurst指数(R/S和DFA两条曲线) - **参考线**:H=0.5(随机游走)、趋势阈值、均值回归阈值 - **线性拟合**:显示标度关系方程 `H = a·log(Δt) + b` - **双X轴显示**:下方显示log值,上方显示时间框架名称 **时间周期映射**: ```python INTERVAL_DAYS = { "1m": 1/(24*60), "3m": 3/(24*60), "5m": 5/(24*60), "15m": 15/(24*60), "30m": 30/(24*60), "1h": 1/24, "2h": 2/24, "4h": 4/24, "6h": 6/24, "8h": 8/24, "12h": 12/24, "1d": 1, "3d": 3, "1w": 7, "1mo": 30 } ``` **调用位置**:`run_hurst_analysis()` 函数(第697-698行) ```python # 绘制Hurst vs 时间尺度标度关系图 plot_hurst_vs_scale(mt_results, output_dir) ``` **输出文件**:`output/hurst/hurst_vs_scale.png` --- ## 输出变化 ### 新增图表 - `hurst_vs_scale.png` - Hurst指数vs时间尺度标度关系图 ### 增强图表 - `hurst_multi_timeframe.png` - 从4个尺度扩展到15个尺度 ### 终端输出 分析过程会显示所有15个粒度的计算进度和结果: ``` 【5】多时间框架Hurst指数 -------------------------------------------------- 正在加载 1m 数据... 1m 数据量较大(1234567条),截取最后100000条 1m: R/S=0.5234, DFA=0.5189, 平均=0.5211 正在加载 3m 数据... 3m: R/S=0.5312, DFA=0.5278, 平均=0.5295 ... (共15个粒度) ``` --- ## 技术亮点 ### 1. 标度关系分析 通过 `plot_hurst_vs_scale()` 函数,可以观察: - **多重分形特征**:不同尺度下Hurst指数的变化规律 - **标度不变性**:是否存在幂律关系 `H ∝ (Δt)^α` - **跨尺度一致性**:R/S和DFA方法在不同尺度的一致性 ### 2. 性能优化 - 对1m数据截断,避免百万级数据的计算瓶颈 - 动态调整可视化参数,适应不同数量的尺度 ### 3. 可扩展性 - `ALL_INTERVALS` 列表可灵活调整 - `INTERVAL_DAYS` 字典支持自定义时间周期映射 - 函数签名保持向后兼容 --- ## 使用方法 ### 运行完整分析 ```python from src.hurst_analysis import run_hurst_analysis from src.data_loader import load_daily df = load_daily() results = run_hurst_analysis(df, output_dir="output/hurst") ``` ### 仅运行15尺度分析 ```python from src.hurst_analysis import multi_timeframe_hurst, plot_hurst_vs_scale from pathlib import Path ALL_INTERVALS = ['1m', '3m', '5m', '15m', '30m', '1h', '2h', '4h', '6h', '8h', '12h', '1d', '3d', '1w', '1mo'] mt_results = multi_timeframe_hurst(ALL_INTERVALS) plot_hurst_vs_scale(mt_results, Path("output/hurst")) ``` ### 测试增强功能 ```bash python test_hurst_15scales.py ``` --- ## 数据文件依赖 需要以下15个CSV文件(位于 `data/` 目录): ``` btcusdt_1m.csv btcusdt_3m.csv btcusdt_5m.csv btcusdt_15m.csv btcusdt_30m.csv btcusdt_1h.csv btcusdt_2h.csv btcusdt_4h.csv btcusdt_6h.csv btcusdt_8h.csv btcusdt_12h.csv btcusdt_1d.csv btcusdt_3d.csv btcusdt_1w.csv btcusdt_1mo.csv ``` ✅ **当前状态**:所有数据文件已就绪 --- ## 预期效果 ### 标度关系图解读示例 1. **标度不变(分形)**: - Hurst指数在log(Δt)轴上呈线性关系 - 例如:H ≈ 0.05·log(Δt) + 0.52 - 说明:市场在不同时间尺度展现相似的统计特性 2. **标度依赖(多重分形)**: - Hurst指数在不同尺度存在非线性变化 - 短期尺度(1m-1h)可能偏向随机游走(H≈0.5) - 长期尺度(1d-1mo)可能偏向趋势性(H>0.55) 3. **方法一致性验证**: - R/S和DFA两条曲线应当接近 - 如果差异较大,说明数据可能存在特殊结构(如极端波动、结构性断点) --- ## 修改验证 ### 语法检查 ```bash python3 -m py_compile src/hurst_analysis.py ``` ✅ 通过 ### 文件结构 ``` src/hurst_analysis.py ├── multi_timeframe_hurst() [已修改] +数据截断逻辑 ├── plot_multi_timeframe() [已修改] +支持15尺度 ├── plot_hurst_vs_scale() [新增] 标度关系图 └── run_hurst_analysis() [已修改] +15粒度+新图表调用 ``` --- ## 兼容性说明 ✅ **向后兼容**: - 所有原有函数签名保持不变 - 默认参数依然为 `['1h', '4h', '1d', '1w']` - 可通过参数指定任意粒度组合 ✅ **代码风格**: - 遵循原模块的注释风格和函数结构 - 保持一致的变量命名和代码格式 --- ## 后续建议 1. **参数化配置**:可将 `ALL_INTERVALS` 和 `INTERVAL_DAYS` 提取为模块级常量 2. **并行计算**:15个粒度的分析可使用多进程并行加速 3. **缓存机制**:对计算结果进行缓存,避免重复计算 4. **异常处理**:增强对缺失数据文件的容错处理 --- **修改完成时间**:2026-02-03 **修改人**:Claude (Sonnet 4.5) **修改类型**:功能增强(非破坏性)