预测最高温时刻 - 策略更新总结


已实现的功能


1. 温度走势图表和预测 API

  • 端点: /api/weather/data/temp-trend?city=<城市名>
  • 功能: 获取过去7天平均温度曲线 + 今日温度曲线 + 预测最高温时刻
  • 预测算法: 基于过去7天平均曲线的峰值小时
  • 缓存: 10分钟缓存避免频繁API调用

  • 2. 前端温度走势图表

  • 位置: https://polymkt.lt.sopher.cool:4433/weather/data
  • 显示: 当选择城市时自动显示
  • 图表内容:
  • - 今日温度曲线(实测 + 预报)

    - 7天平均曲线 + 范围带

    - 预测最高温时刻标记

    - 当前温度标记

  • 数据面板:
  • - 当前温度

    - 今日已观测最高温

    - 预测最高温

    - 预测最高时刻

    - 7天平均最高温


    3. 核心策略更新 (weather_arb_scanner.py)


    新增函数:

    
    def get_predicted_peak_hour(lat, lon, tz, days=7):
        """获取基于过去N天平均模式的预测最高温时刻"""
        # 返回: (predicted_hour, confidence, avg_curve, today_curve)
    

    更新函数:

    
    def analyze_temp_curve(today_hourly, now_str, tz_name,
                           all_clouds, all_precip, all_humidity, 
                           all_wind, all_codes, all_times,
                           lat=None, lon=None):  # 新增经纬度参数
    

    主要改进:

    1. 时间判断逻辑更新:

    - 旧: 固定判断下午2-5点 (local_hour >= 14, local_hour >= 15, etc.)

    - 新: 基于预测最高温时刻 (hours_to_peak = predicted_peak_hour - local_hour)


    2. 新增返回字段:

    - predicted_peak_hour: 预测的最高温时刻 (0-23)

    - peak_prediction_confidence: 预测置信度 (0-1)

    - hours_to_predicted_peak: 距离预测峰值的小时数


    3. 策略影响:

    - 更准确地判断温度是否已过峰值

    - 提供量化的"距离峰值时间"信息

    - 支持动态交易策略调整


    4. 其他策略文件更新


    weather_paper_trader.py:

  • 在LLM提示中添加预测信息
  • 显示: Predicted peak hour, Hours to predicted peak

  • polyweather_scraper.py:

  • 待更新: 使用5分钟实时数据的峰值判断逻辑
  • 可整合预测信息提高准确性

  • 策略应用示例


    交易策略调整:

    
    # 基于预测最高温时刻的策略
    hours_to_peak = curve_analysis.get('hours_to_predicted_peak', 0)
    
    if hours_to_peak > 2:
        # 距离峰值还有2小时以上 → 温度可能继续上升
        strategy = "买入较高温度合约"
    elif hours_to_peak > 0:
        # 接近峰值 → 谨慎操作
        strategy = "部分获利了结"
    else:
        # 已过峰值 → 温度可能下降
        strategy = "卖出较高温度合约"
    

    概率估计优化:

  • estimate_probability() 函数现在使用更准确的峰值判断
  • 结合 predicted_peak_hourpeak_prediction_confidence
  • 提高温度超过特定阈值的概率估计准确性

  • 测试验证


    深圳测试结果:

    
    Predicted peak hour: 13:00
    Confidence: 0.86
    Hours to predicted peak: -2 (当前时间15:00,已过峰值2小时)
    Peak passed: True
    Confidence: 0.72
    

    后续优化方向


    1. 季节性调整: 考虑季节对每日温度曲线的影响

    2. 天气条件加权: 云量、降水对峰值时间的影响

    3. 机器学习模型: 使用历史数据训练更准确的预测模型

    4. 实时更新: 结合实时观测数据动态调整预测

    5. 多城市优化: 不同气候类型城市的个性化预测


    部署状态


    已完成部署:

  • 后端API端点
  • 前端温度走势图表
  • 核心策略更新
  • 纸面交易策略更新

  • 🔄 待更新:

  • polyweather_scraper.py 的实时峰值判断
  • 其他辅助脚本的预测信息整合

  • 性能考虑


    1. API调用: Open-Meteo API 免费版足够使用

    2. 缓存: 10分钟缓存减少API调用

    3. 计算复杂度: O(24×7) 简单计算,性能无影响

    4. 数据新鲜度: 实时数据 + 7天历史,足够准确


    🐛 Bug Fix: progress_prediction 覆盖真实峰值 (2026-04-27)


    问题描述

    峰值已过场景下,progress_prediction(内陆站外推值)覆盖了 LLM 的真实峰值判断,导致预测输出错误。


    案例

  • 日期: 2026-04-27 Hong Kong
  • 实际 HKO max: 27.9°C(午夜至今),峰值已过,温度持续下降
  • LLM 推理: predicted_max=27.9°C, peak_passed=True, 排除28°C触及
  • progress_prediction: 28.6°C(受内陆站 30.4°C + HKO 预报 28°C 拉高)

  • 错误表现

    字段错误值正确值
    predicted_max28.027.9
    settlement_pred2827
    27°C edge-99.45%+1.5%
    28°C actionHOLD (edge +99%)ABANDON

    根因

    预测管线中 progress_prediction 外推信号的权重在峰值已过场景下未被压制,覆盖了:

    1. LLM 的真实峰值判断(peak_passed=True

    2. 实际观测值(hko_max_midnight=27.9°C

    3. 日变曲线下降趋势(14-16时 EMA 从 26.6→26.1°C)


    修复方案

    peak_passed=Truehko_max_midnight < progress_prediction 时:

  • 将观察到的实际最大值作为硬上限,覆盖外推值
  • LLM 的 peak_passed 判断应有权否决 progress_prediction
  • 考虑在管线中加入:predicted_max = min(observed_max, progress_prediction) when peak passed

  • 验证

    重新触发预测后,系统正确输出 predicted_max=27.9, settlement=27


    监控指标


    1. 预测准确率: 预测vs实际峰值时间差异

    2. 策略表现: 使用预测信息的交易策略回报率

    3. API可用性: Open-Meteo API 成功率

    4. 用户使用: 温度走势图表的访问量