Polymarket Bot 教程 · 第 27 章,共 32 章
Polymarket 上的天气与气候预测 bot:飓风登陆市场、日最高气温、El Nino/La Nina(ENSO)、NOAA 和 NWS 数据源,以及如何把天气数据转换为交易信号。
本章涵盖内容
Polymarket 上的天气市场是一个被低估的类别。它们拥有干净的公开数据源、缓慢的价格发现,以及不频繁的活跃交易者。对 bot 来说,优势是真实存在的,但这些市场通常流动性很薄。本章涵盖飓风、温度和 ENSO 市场。
- 将天气作为可交易信号
- 飓风市场:NHC 数据
- 日最高气温:NWS 数据
- ENSO(El Nino/La Nina)周期
- 延迟:天气更新很慢(对散户有利)
- 风险:预测模型误差尾部
- 代码:拉取 NOAA 飓风数据并调整仓位
将天气作为可交易信号
天气市场有免费的权威数据源(NOAA、NWS、NHC)可用,而且结算依据是客观测量,而不是主观判断。这使它们非常适合系统化策略-优势来自数据解读,而不是和人类抢新闻速度。
缺点是:成交量并不大。一个飓风市场的生命周期成交额可能是 50 万到 200 万美元;一个城市温度市场可能只有 5 万到 20 万美元。在政治或体育上能规模化运作的策略,不能直接迁移到天气市场-你优势的美元规模受限于市场总流动性。
适合的 bot 模式:在许多天气市场中持有小额、分散的仓位,持有到结算。节奏缓慢;天气不是日内交易市场。
飓风市场:NHC 数据
飓风季(大西洋:6 月至 11 月)会在 Polymarket 上产生关于登陆地点、强度以及命名风暴数量的市场。数据来源:National Hurricane Center(NHC)在活跃风暴期间每 6 小时发布一次公开公告;当飓风在 72 小时内可能登陆时,每 3 小时发布一次。
策略:当 NHC 的预测锥显示某个具体登陆概率,而市场并不认同时,选择更接近 NHC 官方预测的一边。NHC 是最终的真值来源,市场最终会向它收敛。
注意:尾部风险。飓风偶尔会做出预测没有预料到的动作。仓位大小应按“80% 时候 NHC 是对的”来设定,而不是 100%。
日最高气温:NWS 数据
Polymarket 会针对部分美国城市列出每日温度阈值市场。例如:“纽约市在 8 月 15 日会达到 95°F 吗?” 数据来源:National Weather Service(NWS)预测每天更新 2-3 次;事后再用实测数据结算。
市场通常会以一定噪声给出 NWS 的预测概率。优势在于:NWS 预报存在偏差(通常在极端高温事件上较为保守)。了解某个城市/季节偏差方向的 bot,可以站在 NWS 系统性低估的一边。
约束:成交量低(典型 5 万到 10 万美元)、仓位要小、持有到结算。周期:当天早上入场,晚上结算。
ENSO(El Nino/La Nina)周期
El Niño / La Niña 预测市场的时间跨度是数月,并且数据干净(NOAA 每月 ENSO 更新)。Polymarket 隐含概率在每次月度更新后,往往会比 NOAA 的预测置信度滞后 1-2 周。
bot 模式:在 NOAA 发布日读取更新,站在与 NOAA 预测调整一致的一边,持有 1-2 周,直到市场追上。每个季节有多次更新,也就有多个入场点。
成交量中等(每个周期 10 万到 50 万美元),但策略节奏足够慢,纯量化散户可以在这个细分领域与有限的 bot 竞争者对抗。
延迟:天气更新很慢(对散户有利)
天气数据的更新频率是分钟到小时级,而不是亚秒级。这对散户是一个实质性优势:主导体育和加密市场的低延迟套利,在这里并不适用。
一个在早上 8:15 读取 NOAA 8 点更新的散户 bot,可以在市场里更慢的交易者甚至还没看到更新之前,就用 FOK 在新的公允价值上成交。与新闻套利 2 秒的预算相比,15 分钟的延迟预算非常宽松。
代价是:成交量薄意味着即使是高速 bot,每个市场也只能部署小仓位。“广度优先而非深度优先”的模式(第 21 章)在天气市场里尤其适用。
风险:预测模型误差尾部
天气预报有已知的误差范围。NHC 每年都会公布其飓风预测误差-在 72 小时时间跨度下,登陆位置平均误差约为 100-200 英里。NWS 气温预测在 7 天跨度下平均误差约为 2-4°F。
对仓位大小的含义是:永远不要高置信度地认定“预测一定正确”。仓位应按预测有 70-80% 几率正确来设定。把预测当成金科玉律的 bot,会在模型偏离的 20-30% 交易中亏损。
飓风类别尤其具有尾部风险。一场 5 级飓风在低概率预测地点登陆,对自信做空仓位来说是无限大级别的损失。单个飓风的敞口应限制在天气总配置的 10% 以内。
代码:拉取 NOAA 飓风数据并调整仓位
参考:在飓风季轮询 NHC 公告 feed,监测预测锥变化并发出提醒。
import requests, feedparser
NHC_RSS = "https://www.nhc.noaa.gov/index-at.xml"
def poll_nhc():
while True:
feed = feedparser.parse(NHC_RSS)
for entry in feed.entries:
storm_id = entry.id
advisory = parse_advisory(entry.summary)
prev = load_last_advisory(storm_id)
if advisory["track"] != prev.get("track"):
alert(f"track update for {storm_id}: {advisory['track']}")
save_advisory(storm_id, advisory)
time.sleep(900) # 15 min
Polymarket 的登陆市场最好在季初手动匹配到 NHC 的风暴 ID;自动匹配很脆弱,因为 Polymarket 的市场标题并不总是遵循 NHC 的命名规则。





