POLYMARKET.md — Polymarket 交易系统文档
维护人: Spark ⚡ | 最后更新: 2026-04-28
📅 变更日志
每日变更记录: [docs/daily/](docs/daily/) — 最新: [2026-05-04](docs/daily/2026-05-04.md)
Weather 天气合约
🔑 结算规则(最重要!)
权威数据源: Weather Underground (WU)
每个合约的 Rules 页面明确写明:
"The resolution source for this market will be information from Wunderground, specifically the highest temperature recorded for all times on this day..."
>
"To toggle between Fahrenheit and Celsius, click the gear icon next to the search bar and switch the Temperature setting between °F and °C."
>
"The resolution source for this market measures temperatures to whole degrees Celsius (eg, 9°C)."
结算数据获取方式:
WU 页面切换到 °C 模式后显示的整数就是结算值。技术实现上:
| 精度类型 | 城市 | WU 存储 | 结算值 | 示例 |
|---|---|---|---|---|
whole_c | 亚洲/欧洲/中东 | calendarDayTemperatureMax (°F整数) | WU °C 显示值 = round((°F-32)×5/9) | 63°F → 17.22 → 17°C |
whole_f | 美国城市 (LA, Chicago, etc.) | calendarDayTemperatureMax (°F整数) | 直接用 °F | 74°F → 74°F |
WU °C 值获取流程:
1. 从 WU history 页面的 app-root-state JSON 提取 calendarDayTemperatureMax[0](°F 整数)
2. 转换:whole_c = round((°F - 32) × 5 / 9)
3. 这与 WU 页面切换到 °C 后显示的值完全一致(WU 前端用的是同样的 Math.round())
ℹ️ 关于 TWC API units=m:
units=m 参数直接返回 °CcalendarDayTemperatureMax 在 current observations 端点中为 null,仅在 forecast 端点有值(是预报值,不是实测值)temperatureMax24Hour(滚动24h)≠ calendarDayTemperatureMax(日历天)—— 时间窗口不同,值可能不一样app-root-state) 永远返回 °F,无参数可切换已验证的转换一致性:
| 城市 | WU °F | 计算 °C | WU 页面显示 |
|---|---|---|---|
| Beijing | 63°F | round(17.22) = 17 | 17°C ✅ |
| Tokyo | 74°F | round(23.33) = 23 | 23°C ✅ |
| Shenzhen | 86°F | round(30.00) = 30 | 30°C ✅ |
| Singapore | 93°F | round(33.89) = 34 | 34°C ✅ |
| Moscow | 53°F | round(11.67) = 12 | 12°C ✅ |
| Tel Aviv | 84°F | round(28.89) = 29 | 29°C ✅ |
⚠️ 例外城市 — 香港 (Hong Kong):
香港合约的结算源不是 WU,而是 Hong Kong Observatory (HKO):
"The resolution source for this market will be information from the Hong Kong Observatory, specifically the 'Absolute Daily Max (deg. C)' the specified date once information is finalized in the relevant 'Daily Extract'."
https://www.weather.gov.hk/cis/dailyExtract/dailyExtract_YYYYMM.xmlstn.data[].dayData[] 数组,每行 [day, pressure, abs_max, abs_min, ...]香港实时数据采集(HKO Open Data API):
| 数据源 | API / URL | 更新频率 | 用途 |
|---|---|---|---|
| rhrread 当前天气 | weather.php?dataType=rhrread | 每小时 | 27站实时温度/湿度 |
| 1-min温度 CSV | latest_1min_temperature.csv | 每10分钟 | 40+站高精度温度 |
| Max/Min since midnight | latest_since_midnight_maxmin.csv | 每10分钟 | ⭐ 结算值实时追踪 |
| 1-min湿度/风力/气压/太阳辐射 | 各 CSV | 每10分钟 | 预测因子 |
| 9天预报 | weather.php?dataType=fnd | 每日2次 | HKO官方预报 |
| AWS animate CSVs | animate_J1.csv 等 | 实时 | 39站过去24h逐小时 |
| Daily Extract XML | dailyExtract_YYYYMM.xml | 每月 | ⭐ 香港结算权威源 |
多站预测模型 (hko_predict.py):
10个信号加权集成 (v2),每10分钟更新:
| 信号 | 基准权重 | 原理 |
|---|---|---|
| 🌤️ HKO预报 (bias-corrected) | 20% | fnd 官方预报 + 7天偏差 EMA |
| 📝 天气词 NLP | 8% | 从 flw/fnd 提取 hot/rain/sunny 关键词,调整预报 |
| 🌧️ 降雨概率 (PSR) | 8% | PSR → 降温抑制 (40%rain → -0.5°C) |
| ⚠️ 天气警告 | 10% | WHOT +1.5°C / WRAIN -2°C / WCOLD -3°C |
| 🏔️ 内陆站回归 | 18% | 上水/大埔/石岗/打鼓岭 max → 回归天文台 |
| 📈 当日走势外推 | 12% | 升温率 × 剩余小时 × 衰减因子 |
| ☀️ 太阳辐射 | 8% | W/m² → 午后升温幅度 |
| 💨 风向信号 | 5% | 南风(海风)降温 / 北风升温 |
| 📅 7天均值+趋势 | 8% | 气候基线 + 近期趋势修正 |
| 📍 当前最高 | 10-70% | 硬下界,16:00后权重升至 70% |
动态权重调整:
输出:预测最高温 + 结算预测(整数°C) + 概率分布 + 置信度(HIGH/MEDIUM/LOW)
香港回测结果 (2026-03-08 ~ 2026-04-15, 39天):
| 指标 | 值 |
|---|---|
| MAE | 1.41°C |
| RMSE | 1.76°C |
| 结算准确率 (精确) | 28.2% |
| ±1°C 准确率 | 59.0% |
| 策略交易 | 40笔 (2W) |
| 策略 PnL | +$3.71 |
注意:回测仅用日级数据(无当天多站实时数据),实盘有当日多站信号后准确率会更高。
⚠️ 绝对禁止用于结算的数据源:
temperatureMax24Hour(滚动24h最高温,与日历天最高温不同!)calendarDayTemperatureMax 来源其他数据源角色: 仅用于策略预测(概率估计、套利发现),不用于结算。
📊 覆盖城市 (18城)
| 城市 | ICAO | WU 路径 | 精度 | 时区 |
|---|---|---|---|---|
| Beijing | ZBAA | cn/beijing/ZBAA | °C | Asia/Shanghai |
| Chicago | KORD | us/il/chicago/KORD | °F | America/Chicago |
| Hong Kong | VHHH | hk/hong-kong/VHHH | °C | Asia/Hong_Kong |
| Istanbul | LTFM | tr/istanbul/LTFM | °C | Europe/Istanbul |
| London | EGLL | gb/london/EGLL | °C | Europe/London |
| Los Angeles | KLAX | us/ca/los-angeles/KLAX | °F | America/Los_Angeles |
| Moscow | UUEE | ru/moscow/UUEE | °C | Europe/Moscow |
| New York | KJFK | us/ny/new-york/KJFK | °F | America/New_York |
| Paris | LFPG | fr/paris/LFPG | °C | Europe/Paris |
| Seoul | RKSI | kr/seoul/RKSI | °C | Asia/Seoul |
| Shanghai | ZSPD | cn/shanghai/ZSPD | °C | Asia/Shanghai |
| Shenzhen | ZGSZ | cn/shenzhen/ZGSZ | °C | Asia/Shanghai |
| Singapore | WSSS | sg/singapore/WSSS | °C | Asia/Singapore |
| São Paulo | SBGR | br/sao-paulo/SBGR | °C | America/Sao_Paulo |
| Taipei | RCTP | tw/taipei/RCTP | °C | Asia/Taipei |
| Tel Aviv | LLBG | il/tel-aviv/LLBG | °C | Asia/Jerusalem |
| Tokyo | RJTT | jp/tokyo/RJTT | °C | Asia/Tokyo |
| Miami | KMIA | us/fl/miami/KMIA | °F | America/New_York |
🏗️ 系统架构
┌─────────────────────────────────────────────────────────────┐
│ 数据采集层 │
│ Open-Meteo │ WU │ HKO (39站) │ METAR │ 类比日 │ wttr.in │
└───────────────┬─────────────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────┐
│ 概率估计层 │
│ 高斯模型(30%) + 集成直方图(45%) + 贝叶斯更新(25%) │
│ + 偏差修正(EMA) + 类比日预测 + 过峰检测 │
└───────────────┬─────────────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────┐
│ 信号筛选层 │
│ Edge ≥ 5-8% │ EV ≥ 2x │ 入场价 ≤ $0.15 │ 死合约过滤 │
└───────────────┬─────────────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────┐
│ LLM 审核层 │
│ DeepSeek Chat 二次验证 │ confidence ≥ 0.4 → 通过 │
└───────────────┬─────────────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────┐
│ 执行层 │
│ Paper Trade ($1-3/笔) │ 微信通知 │ Dashboard 可视化 │
└─────────────────────────────────────────────────────────────┘
📈 数据源详解
| 数据源 | 用途 | 更新频率 | 备注 |
|---|---|---|---|
| Open-Meteo | 91模型集成预报,概率分布 | 每次扫描 | 最重要的预报源,但不做结算 |
| wttr.in | 实时温度 + 简单预报 | 每次扫描 | 快速但精度有限 |
| Weather Underground | 结算源 ⭐ (香港除外) | 每次扫描 | 权威,calendarDayTemperatureMax |
| HKO | 香港结算源 ⭐ | 每10分钟 | 40+站实时 + Daily Extract 结算值 |
| METAR | 交叉验证 | 每次扫描 | 机场原始观测,0.1°C 精度,仅参考 |
| 类比日 (Analog) | 相似日修正 | 每次扫描 | 90天历史特征匹配,新模块 |
| 历史偏差 (Bias) | 预报修正 | 每日更新 | EMA 跟踪每城市预报偏差 |
🧮 概率模型
三模型集成
| 模型 | 权重 | 原理 |
|---|---|---|
| 高斯分布 | 30% | 以修正预报为均值,自适应 σ 为标准差 |
| 集成直方图 ⭐ | 45% | 91个模型各预测一个最高温,直接形成概率分布 |
| 贝叶斯更新 | 25% | 当天有实测数据时,用贝叶斯公式更新先验 |
类比日预测(Analog Forecast)
用历史天气特征找相似日,基于相似日实际最高温修正预报:
| 特征 | 权重 | 说明 |
|---|---|---|
| 🌡️ 上午均温 | 30% | 最重要的预测因子 |
| ☁️ 云量 | 25% | 影响太阳辐射加热 |
| 💧 湿度 | 20% | 影响热容量 |
| 💨 风速 | 15% | 影响热交换 |
| 🌧️ 降水 | 10% | 直接降温效应 |
过峰检测
当地时间 ≥ 14:00 且温度已回落 → 最高温基本锁定,使用更窄的概率分布。
偏差修正
预报 - 实际 偏差历史corrected = forecast + bias_ema💰 Paper Trader 参数
| 参数 | 值 | 说明 |
|---|---|---|
| 最大入场价 | $0.15 | 只买 ≤15 美分的便宜期权 |
| 最低公允概率 | 2% | 低于 2% 视为噪音 |
| EV 倍数下限 | 2.0x | 公允概率 ≥ 2倍市场价 |
| STRONG 阈值 | 5.0x | EV ≥ 5x 为强信号 |
| STRONG 仓位 | $3.00 | 每笔强信号投 $3 |
| MEDIUM 仓位 | $1.00 | 每笔中等信号投 $1 |
| LLM 最低置信度 | 0.40 | DeepSeek Chat confidence < 40% 则拒绝 |
| Edge 阈值 (exact) | 5% / 10% | MEDIUM / STRONG |
| Edge 阈值 (range) | 8% / 15% | MEDIUM / STRONG |
🤖 LLM 审核
{action: BUY_YES/SKIP, confidence: 0-1, reasoning: "..."}⚰️ 死合约过滤
基于 WU 实时观测最高温,过滤已不可能的合约:
| 合约类型 | 条件 | 动作 |
|---|---|---|
=X°C | WU 观测 > X | 跳过(已超过,不可能等于 X) |
≤X°C | WU 观测 > X | 跳过(已超过上限) |
≥X°C | WU 观测 ≥ X | 确定 YES(如果市价 < $0.90 则是套利) |
📈 有效比较符推导
Polymarket 合约看似都是精确匹配 "be X°C",但实际:
≤X°C(吸收已关闭的更低选项)≥X°C(吸收已关闭的更高选项)=X°C📊 核心策略
"低价才是机会" — 买 $0.001-$0.15 的便宜期权,追求高 EV 倍数。
🗂️ 关键文件
| 文件 | 用途 |
|---|---|
scripts/weather_arb_scanner.py | 核心扫描器:概率估计 + 套利发现 |
scripts/weather_paper_trader.py | Paper Trading 引擎:LLM审核 + 仓位管理 |
weather_market_arbitrage.py | 主动发现合约 (Gamma API) |
analog_forecast.py | 类比日预测模块 |
expiry_utils.py | 过期检测工具库(城市时区感知) |
weather_data_collector.py | 完整快照采集器 |
price_ticker.py | 每分钟价格快照 |
weather_db.py | DuckDB 数据层 |
web/dashboard.py | Web Dashboard (localhost:8765) |
strategy/trend_follow.py | 趋势跟踪策略 |
strategy/trend_monitor.py | 价格动量监控 |
scripts/henry_copytrade.py | Henry 跟单信号 |
scripts/hko_data_fetcher.py | HKO 39站数据爬取器(每10分钟 cron) |
scripts/hko_predict.py | HKO 最高温预测引擎(每10分钟 cron) |
scripts/hko_backfill.py | HKO 历史数据回填 |
DuckDB HKO 表:
| 表名 | 内容 |
|---|---|
hko_obs | 10分钟全站观测(temp, humidity, pressure, solar, wind, max/min since midnight) |
hko_daily | 每日汇总(结算值, max/min, 湿度, 降雨, 预报值) |
hko_forecast | 9天预报快照(跟踪预报演变) |
数据文件:
| 文件 | 位置 |
|---|---|
weather_arb.json | /Volumes/data128G/polymarket-data/ — 扫描结果 |
weather_paper_state.json | /Volumes/data128G/polymarket-data/ — Paper Trade 状态 |
weather_paper_decisions.jsonl | /Volumes/data128G/polymarket-data/ — LLM 决策记录 |
weather_paper_notify.txt | /Volumes/data128G/polymarket-data/ — 最新通知文本 |
arbitrage_opportunities.json | data/ — 套利机会 |
last_notified_arbs.json | data/ — 通知去重记录 |
⏰ 定时任务
| 任务 | 频率 | 模型 | 功能 |
|---|---|---|---|
| hko_data_fetcher | 10 分钟 | cron | HKO 39站数据采集 + DB写入 |
| hko_predict | 10 分钟 | cron | HKO 最高温预测 + 概率分布 |
| weather-paper-trade | 5 分钟 | chat | 运行 paper trader,新信号发微信 |
| 30分钟机会查找 | 1 小时 | chat | 套利机会扫描 + 微信通知 |
| weather-data-collector | 30 分钟 | chat | 完整快照采集 |
| tunnel-health-alert | 10 分钟 | chat | 隧道健康检查 |
| polymarket-position-monitor | 整点 9-17 | chat | 持仓监控 |
| DuckDB Sync | 15 分钟 | chat | 数据同步到 DuckDB |
📈 Paper Trade 业绩
截至 2026-04-16:
总交易: 379 笔
已结算: 269 (胜63 / 负206)
胜率: 23.4%
PnL: +$9,863
投入: $975
ROI: 1012%
🧠 HKO 预测模型 v3 (2026-04-16)
架构: 15 信号加权集成 + 自适应偏差修正
文件: scripts/hko_predict.py
信号列表
| # | 信号 | 权重 | 数据源 | 说明 |
|---|---|---|---|---|
| 1 | HKO 预报 (bias-corrected) | 20% | fnd API | 偏差修正后的官方预报最高温 |
| 2 | 天气描述 NLP | 8% | fnd/flw | 关键词匹配: sunny/hot → 加温, rain/cloudy → 降温 |
| 3 | 降雨概率 | 8% | PSR | 降雨>40% 抑制最高温 |
| 4 | 天气警告 | 10% | warnsum | WHOT/WRAIN/WCOLD 调整 |
| 5 | 内陆站回归 | 18% | hko_obs | 上水/打鼓岭/石岗/大埔/元朗 先行指标 |
| 6 | 温度轨迹 + 进度比率 | 14% | hko_obs | 融合线性外推 + 历史进度比率预测 |
| 6b | 日变曲线预测 | 10% | hko_obs 7天 | EMA(α=0.4) 加权的每小时峰值 + 当前小时偏差调整 |
| 6c | 峰值时间感知 | 50%* | hko_obs 7天 | 过了平均峰值时间+1h → 锁定当前最高 |
| 6d | 湿度潜力 | 8% | hko_obs | 湿度<65% → +1.2°C, >75% → -0.5°C |
| 6e | 升温加速 | 6% | hko_obs | 上下半段升温速率对比 |
| 7 | 太阳辐射 + 阳光指数 | 8%+7% | hko_obs + fnd icon | 实测 W/m² + ForecastIcon → 0.0-1.0 阳光指数 |
| 8 | 风向效应 | 5% | hko_obs | 岸上风降温 / 离岸风升温 |
| 9 | 气候学 + 趋势 | 8% | hko_daily 7天 | 7天均值 + 近期趋势 |
| 10 | 当前最高 (硬下界) | 10-70%* | hko_obs | 随时间推移权重加大 |
| 11 | NWP 6模型集成 | 12% | Open-Meteo | GFS/ECMWF/JMA/ICON/GEM/BestMatch |
| 12 | 深圳先行指标 | 6% | Open-Meteo | 深圳预报最高 - 0.8°C |
*权重随时间动态调整
偏差修正
不确定度
实战验证 (2026-04-16)
旧模型预测: 28.7°C (误差 1.4°C)
v3 模型预测: 29.9°C (误差 0.2°C) ← 大幅改善
实际最高: 30.1°C
为什么今天比昨天高 1.2°C?(反思记录)
| 因素 | 昨天 (28.9°C) | 今天 (30.1°C) |
|---|---|---|
| 早晨温度 | 25.5°C | 25.4°C (几乎一样) |
| 中午湿度 | 72% | 64% (-8%) |
| 升温模式 | 11时开始减速 | 12时仍加速 |
| 太阳辐射 | 186-256 W/m² | ~900 W/m² (3-4倍) |
关键教训: 早上温度相似不代表下午相似。湿度下降速度和太阳辐射强度是下午分化的主因。已通过 Signal 6d (湿度潜力) 和 6e (升温加速) 捕捉。
🔗 实时信号整合
frontrun 策略 (strategy/frontrun.py) 对香港合约直接接入 HKO v3 预测模型:
predicted_max → 替代策略自带的线性外推uncertainty → 替代硬编码的 sigma (从 ±1.0-2.5°C 收窄到 ±0.2-0.5°C)数据流水线
hko_data_fetcher.py (cron 每10分钟)
│
├─ 抓取 HKO API (rhrread/fnd/flw/1min/maxmin/solar/wind/pressure)
├─ 抓取 AWS GIS CSV (全港气象站)
├─ 写入 DuckDB + hko_latest.json
│
├─ hko_predict.py (预测)
│ └─ 写入 hko_prediction.json
│
├─ weather_strategy_runner.py --scan (策略)
│ └─ 有 CRITICAL/HIGH 信号 → 微信通知
│
└─ weather_paper_trader.py --once (Paper Trade)
└─ 有新交易 → 微信通知
🐛 已知问题 & 教训
1. Open-Meteo ≠ WU: OM 与 WU 经常差 1-8°C,绝不能用 OM 结算
2. METAR 不能覆盖 WU: METAR 可能报更高值(瞬时峰值),但 WU 的 calendarDayMax 是结算依据
3. 微信通知 PATH 问题: cron 环境找不到 openclaw,必须用绝对路径 /opt/homebrew/bin/openclaw
4. WU Rate Limiting: 频繁抓取 WU 可能被限流,需要控制请求频率
5. 过期合约: 最高温合约当地 16:00 后视为过期,最低温合约当地 10:00 后
6. 早上相似 ≠ 下午相似: 湿度和太阳辐射可以让相同早晨温度的两天下午差 1.2°C+
7. DuckDB 锁: 多个 cron 同时写入会锁库,read_only 模式可并发读
🌐 Dashboard
HK 专页: https://polymkt.lt.sopher.cool:4433/weather/hk
6 个 Tab:
实时更新:
/api/weather/hk/live (HKO one_json.xml)决策中心: https://polymkt.lt.sopher.cool:4433/weather/decision?city=hong-kong&date=YYYY-MM-DD
🎯 香港预测策略详解
核心预测模型 (hko_predict.py)
21 信号加权集成 — 每 10 分钟更新,随时间推移动态调整权重
预测最高温 = Σ(signal_i × weight_i) / Σ(weight_i) + bias_correction
📡 实时信号 (10个)
| # | 信号 | 说明 | 权重 | 特殊逻辑 |
|---|---|---|---|---|
| 1 | current_max | 当前已达最高温 | 15-50% | 午后递增,16:00后主导 |
| 2 | inland | 内陆站回归预测 | 20% | 先行指标 |
| 3 | trajectory | 温度轨迹+进度比率 | 14% | |
| 4 | diurnal_curve | 7日日变化曲线预测 | 10% | |
| 5 | humidity_potential | 湿度驱动升温潜力 | 6-15% | <55%: +2.2°C, >75%: -0.8°C |
| 6 | warming_accel | 升温加速度检测 | 5-12% | vs历史同期速率 |
| 7 | solar | 太阳辐射(实测) | 6-12% | |
| 8 | sunshine | 阳光指数(Icon推算) | 7% | |
| 9 | wind | 风向效应 | 5% | 海风-0.8°C, 陆风+0.5°C |
| 10 | past_peak | 已过峰值锁定 | 50% | 16:00后触发,压制其他信号 |
📋 预报信号 (4个)
| # | 信号 | 说明 | 权重 |
|---|---|---|---|
| 11 | forecast | HKO官方预报(偏差修正) | 16-18% |
| 12 | weather_text | 天气描述NLP解析 | 8% |
| 13 | rain_cooling | 降雨降温效应 | 8% |
| 14 | warning | 天气警告(酷热/暴雨/雷暴) | 10% |
📊 基准+外部信号 (4个)
| # | 信号 | 说明 | 权重 |
|---|---|---|---|
| 15 | climatology | 7日气候学均值+趋势 | 8% |
| 16 | nwp_ensemble | NWP 6模型集成 | 12% |
| 17 | shenzhen | 深圳先行指标 | 6-10% |
| 18 | early_aggressive | 早期激进预测(8-11点) | 10-25% |
📅 气象预报信号 (5个) — Open-Meteo 逐时预报 9-17h
| # | 信号 | 数据 | 影响规则 | 权重 |
|---|---|---|---|---|
| 19 | cloud_cover | 日间云量% | ≥80%: -1.2°C, ≥65%: -0.6°C, <40%: +0.4°C | 8% |
| 20 | forecast_radiation | 日间辐射 W/m² | ≥700: +0.8°C, ≥500: +0.2°C, <300: -1.0°C | 6% |
| 21 | rain_forecast | 降雨概率峰值% | ≥60%: -1.2°C, ≥40%: -0.6°C, ≥20%: -0.2°C | 6% |
| 22 | cape | CAPE对流指数 J/kg | ≥1500: -1.5°C, ≥800: -0.6°C, ≥300: -0.2°C | 5% |
| 23 | forecast_humidity | 日间湿度预报% | ≥80%: -0.8°C, ≥70%: -0.3°C, <55%: +0.5°C | 5% |
📅 相似日信号 (1个)
| # | 信号 | 说明 | 权重 |
|---|---|---|---|
| 24 | analog_day | 过去7天相似日加权预测 | 8-12% |
多个 close match (distance < 0.3) 加权集成,权重 = 1/(similarity+0.05)。匹配数越多权重越高。
LLM 推理信号 (llm_reasoning)
| # | 信号 | 说明 | 权重 |
|---|---|---|---|
| 25 | llm_reasoning | DeepSeek-R1 综合分析预测 | 10-30% |
模型: deepseek-reasoner (DeepSeek-R1),配置在 config/llm_config.json
输入: 全量实时数据 + 预报 + NWP + 历史 + 规则信号结果
输出: 结构化 JSON(predicted_max, settlement, confidence_pct, reasoning, peak_passed, risk)
权重调度:
缓存: 10分钟 TTL,避免重复调用(每次调用 ~60s)
日志: data/hko/llm_predictions_YYYYMMDD.jsonl
为什么重要:
1. 解决规则信号冲突(当 17 个信号方向不一致时做因果推理)
2. 识别异常(温度回落、突发天气变化)
3. 理解语义(“主要多云偶有阳光” ≠ “晋天”)
4. 果断决策(不会给 50/50,必须选边)
温度回落信号 (temp_declining)
| # | 信号 | 说明 | 权重 |
|---|---|---|---|
| 26 | temp_declining | 实时温度回落检测 | 15-55% |
触发条件:
效果:
权重动态调度
| 时段 | 模式 | 主导信号 |
|---|---|---|
| 8-11点 | 激进模式 | early_aggressive 25% + inland 20% |
| 12-14点 | 均衡模式 | 多信号集成 + llm_reasoning 20-30% |
| 14-16点 | 收敛模式 | current_max 30%+ / temp_declining 触发则锁定 |
| 16点后 | 锁定模式 | past_peak 50%, 其他压至 30% |
天天温差对比 (strategy/hk_day_over_day.py)
每 5 分钟运行,22 项指标全面对比今天 vs 昨天,结果追加到 hk_dod_YYYYMMDD.jsonl 快照。
| 分类 | 指标 | 重要性 |
|---|---|---|
| 🎯 核心 | HKO天文台最高温 | ⭐ Critical |
| 📡 实时 | 同时刻温度进度 / 全站最高 | High |
| 📋 预报 | HKO官方预报 / 昨日预报偏差 | High/Medium |
| 🤖 模型 | DLWP AI / NWP集成 / 日变曲线 / 相似日 | High/Medium |
| 🌡️ 气象 | 湿度 / 辐射 / 气压 / 风 | Medium/Low |
| 🌍 外部 | 深圳先行指标 | Medium |
| 📊 趋势 | 7日均值偏离 | Medium |
| 📅 气象预报 | 云量 / 辐射 / 降雨率 / CAPE / 湿度 / 综合影响 | High/Critical |
| 🌤️ 定性 | 天气描述 / 警告 | Medium |
综合信号: 所有温度类指标自动投票,投票比 ≥70% → HIGH 信心
5分钟快照字段: 温度(predicted/observed/current/station)、气象参数、模型信号、气象预报、相似日、概率分布
走势图 (3个面板):
相似日分析 (strategy/hk_analog_day.py)
从过去 7 天找气象指纹最相似的若干天 (distance < 0.3)。
气象指纹 (10 维度)
| 维度 | 权重 | 归一化范围 | 说明 |
|---|---|---|---|
max_so_far | 1.5 | 3°C | 同时刻已达最高 — 最重要 |
humidity | 1.2 | 15% | 湿度 — 强影响蒸发降温 |
temp | 1.0 | 3°C | 同时刻 HKO 温度 |
solar | 1.0 | 400 W/m² | 太阳辐射 |
cloud_avg | 1.0 | 30% | 日间云量 |
station_max | 0.8 | 3°C | 全站最高 |
rain_prob_max | 0.8 | 30% | 降雨概率峰值 |
pressure_trend | 0.8 | 2 hPa | 3h 气压变化 |
min_temp | 0.6 | 3°C | 夜间最低温 |
pressure | 0.5 | 3 hPa | 绝对气压 |
相似度计算: distance = sqrt( Σ(w_i × (diff_i / scale_i)²) / Σ(w_i) )
多匹配集成: 所有 distance < 0.3 的相似日都参与预测,按 1/(sim+0.05) 加权。每个相似日的预测 = 实际最高 + 30% × 那天预报偏差。
前端展示: 所有 close match 都展示完整指纹对比表 + 候选日排名 + 交易启示
数据源
| 源 | 数据 | 频率 |
|---|---|---|
| HKO 天文台 | 实时温度/湿度/辐射/气压/风/预报/40+站 | 10分钟 |
| Open-Meteo Forecast | 逐时云量/辐射/降雨/CAPE/湿度 | 30分钟缓存 |
| Open-Meteo Archive | 历史实际温度 (全城市) | 按需 |
| DLWP (CPU) | AI 天气模型 6h 步长 | 6小时 |
| NWP (Open-Meteo) | 6 个数值预报模型集成 | 每次预测 |
| 深圳 (Open-Meteo) | 深圳实时+预报温度 | 每次预测 |
| DeepSeek API | LLM 市场分析 | 按需 |
Cron 调度
| 任务 | 频率 | 脚本 |
|---|---|---|
| HKO 采集+预测 | 10 分钟 | hko_data_fetcher.py + hko_predict.py |
| 天天温差对比 | 5 分钟 | strategy/hk_day_over_day.py |
| 全城市套利扫描 | 30 分钟 | weather_arb_scanner.py |
| DLWP AI 预测 | 6 小时 | DLWP pipeline |
文件结构
strategy/
├── hk_day_over_day.py # 天天温差对比 (每5分钟, 22项指标)
├── hk_analog_day.py # 相似日分析 (10维指纹匹配)
├── day_over_day.py # 全城市温差对比
├── HK_WEATHER_STRATEGY.md # 策略详细文档
└── ...
data/hko/
├── hko_latest.json # HKO 实时数据
├── hko_prediction.json # 最新预测结果 (21信号+权重)
├── hko_curve_YYYYMMDD.json # 每日逐时曲线 (40+站)
├── hk_day_over_day.json # 天天对比最新结果
├── hk_dod_YYYYMMDD.jsonl # 5分钟快照时序数据
├── hk_analog_day.json # 相似日分析结果
├── om_hourly_cache.json # Open-Meteo逐时缓存
└── dlwp_hko_latest.json # DLWP AI预测
反思与教训
2026-04-21: 温度回落检测 — 模型不该给五五开
背景: 4/21 13:55,HKO 天文台今日最高 28.7°C,当前温度已回落到 27.9°C(从峰值下降 0.8°C)。模型给出 29.0°C 预测,概率分布 28°C:50% / 29°C:50%。
问题:
1. 五五开等于没预测 — 模型的职责是做出判断,不是两边下注。50/50 的概率分布对交易毫无指导意义。
2. 忽视了实时回落信号 — 天文台温度已经从 28.7 跌到 27.9(-0.8°C),这是一个极强的 "峰值已过" 信号,但模型没有检测。
3. peak 检测逻辑太粗 — 原来只有 past_peak 信号在 current_hour > avg_peak_hour + 1.0 才触发(即 14.7 时之后),但实际上温度回落本身就是峰值已过的直接证据,不需要等到固定时间。
4. 时间阈值是死的,温度趋势是活的 — 同样是 13:55,如果温度还在涨就该给 29°C 更高概率;如果已经在跌就该偏向 28°C。原模型不区分这两种截然不同的状态。
解决方案: 新增 temp_declining 信号
current_max 权重(相当于提前进入 "锁定模式"),压低其他乐观信号核心洞察:
温度回落是比时钟更可靠的峰值检测器。14:00 温度还在涨和 13:00 温度已回落 0.8°C,后者对 "峰值已过" 的证据强度远高于前者。
预期效果:
此文档随系统演化持续更新。最后更新: 2026-04-21