Weather APIs Mastery
Maximiser la précision des prévisions météo pour le trading.
Objectif
Ce skill définit les meilleures APIs météo classées par précision, rapidité de mise à jour, et région géographique. L'objectif : obtenir l'edge maximal sur les marchés Polymarket en utilisant les sources les plus fiables.
Classement Global des Modèles Météo (2025-2026)
Tier S - Gold Standard (Précision Maximale)
1. ECMWF IFS (European Centre for Medium-Range Weather Forecasts)
- •Précision : #1 mondial, ~1 jour d'avance sur les concurrents
- •Résolution : 9 km (la plus haute des modèles globaux)
- •Horizon : 15 jours, fiable jusqu'à 10 jours
- •MAJ : 2x/jour (00h et 12h UTC)
- •Forces : Medium-range (3-10 jours), ensemble 51 membres
- •API : Via Open-Meteo (gratuit) ou ECMWF direct (payant)
- •Usage prioritaire : Marchés J+3 à J+7
2. HRRR (High-Resolution Rapid Refresh)
- •Précision : #1 US pour court terme (0-48h)
- •Résolution : 3 km
- •Horizon : 48 heures
- •MAJ : Toutes les heures
- •Forces : Orages, précipitations convectives, mise à jour radar
- •API : Via Open-Meteo ou NWS direct (gratuit, US only)
- •Usage prioritaire : Marchés J+0 à J+1 (USA uniquement)
Tier A - Haute Précision
3. ICON (DWD - German Weather Service)
- •Précision : #2-3 mondial, meilleur que ECMWF pour certaines régions
- •Résolution : 13 km global, 6.5 km Europe, 2 km Allemagne
- •Horizon : 7 jours (local), 10+ jours (global)
- •MAJ : 4x/jour
- •Forces : Terrain complexe, Europe centrale, Alpes
- •API : Open-Meteo (gratuit)
- •Usage prioritaire : Europe, terrains montagneux
4. GFS (Global Forecast System - NOAA)
- •Précision : #3 mondial, amélioré avec GFSv16
- •Résolution : 13 km
- •Horizon : 16 jours
- •MAJ : 4x/jour (avantage sur ECMWF)
- •Forces : Mises à jour fréquentes, données fraîches
- •API : Open-Meteo, NWS (gratuit)
- •Usage prioritaire : Backup ECMWF, situations évolutives
5. UKMO (UK Met Office Unified Model)
- •Précision : #2 derrière ECMWF selon certaines métriques
- •Résolution : 10 km
- •Horizon : 7 jours
- •Forces : Maritime, Atlantique Nord, UK
- •API : Open-Meteo (limité), Met Office DataPoint (payant)
Tier B - Spécialisés
6. AROME (Météo-France)
- •Résolution : 1.3 km (!)
- •Horizon : 42 heures
- •Forces : Europe occidentale, orages, précision locale extrême
- •Limitation : Courte portée
7. NAM (North American Mesoscale)
- •Résolution : 3 km
- •Horizon : 60 heures
- •Forces : Bridge entre HRRR et GFS
8. GEM (Canadian Weather Service)
- •Résolution : 25 km global, 2.5 km Canada
- •Forces : Canada, Arctique
9. JMA (Japan Meteorological Agency)
- •Résolution : 20 km
- •Forces : Asie-Pacifique, typhons
Tier C - AI/ML Models (Nouveaux, Prometteurs)
10. AIFS (ECMWF AI Model)
- •Précision : Rivalise avec IFS traditionnel
- •Vitesse : 8x plus rapide
- •API : Open-Meteo
11. GraphCast (Google DeepMind)
- •Précision : 97.2% meilleur que ECMWF ensemble sur certaines métriques
- •Limitation : Moins bon pour événements extrêmes
12. FourCastNet (NVIDIA)
- •Vitesse : Ultra-rapide
- •Usage : Scénarios multiples rapidement
Stratégie d'Implémentation par Horizon Temporel
J+0 à J+1 (Aujourd'hui/Demain) - PRIORITÉ MAXIMUM
javascript
const SHORT_TERM_STRATEGY = {
primary: {
usa: ['HRRR', 'NAM', 'NBM'], // NBM = National Blend of Models
europe: ['ICON-EU', 'AROME', 'ICON-D2'],
asia: ['JMA', 'ICON'],
global: ['GFS', 'ICON']
},
confidence: 0.90 - 0.95,
updateFrequency: '1h',
sources: {
aviation: 'METAR/TAF via AviationWeather.gov',
realtime: 'Open-Meteo avec modèles locaux'
}
};
J+2 à J+5 (Medium Range) - ZONE SWEET SPOT
javascript
const MEDIUM_TERM_STRATEGY = {
primary: ['ECMWF', 'GFS', 'ICON'],
ensemble: true, // Utiliser les ensembles pour la confiance
confidence: 0.75 - 0.85,
updateFrequency: '6h',
consensusMethod: 'weighted_median',
weights: {
ecmwf: 1.0, // Gold standard
gfs: 0.85,
icon: 0.90,
ukmo: 0.85
}
};
J+6 à J+10 (Extended Range) - PRUDENCE
javascript
const EXTENDED_TERM_STRATEGY = {
primary: ['ECMWF', 'GFS'],
ensemble: 'required',
confidence: 0.55 - 0.70,
// Utiliser la dispersion de l'ensemble pour ajuster la confiance
confidenceFormula: (ensembleSpread) => {
// Plus la dispersion est faible, plus la confiance est haute
return Math.max(0.40, 0.75 - (ensembleSpread * 0.05));
}
};
Configuration Open-Meteo Optimale
Multi-Model Forecast (Recommandé)
javascript
const OPENMETEO_CONFIG = {
// Endpoint principal avec multi-modèles
forecast: {
url: 'https://api.open-meteo.com/v1/forecast',
params: {
models: [
'ecmwf_ifs04', // ECMWF haute résolution
'gfs_seamless', // GFS avec HRRR intégré
'icon_seamless', // ICON avec local
'gem_seamless', // GEM Canada
'jma_seamless', // JMA Japon
'meteofrance_seamless' // AROME/Arpège
],
daily: 'temperature_2m_max,temperature_2m_min',
timezone: 'auto',
forecast_days: 10
}
},
// ECMWF dédié (plus précis pour medium-range)
ecmwf: {
url: 'https://api.open-meteo.com/v1/ecmwf',
params: {
daily: 'temperature_2m_max,temperature_2m_min',
forecast_days: 10
}
},
// GFS avec HRRR (USA, court terme)
gfsHrrr: {
url: 'https://api.open-meteo.com/v1/gfs',
params: {
daily: 'temperature_2m_max,temperature_2m_min',
minutely_15: 'temperature_2m', // HRRR 15-min pour USA
forecast_days: 7
}
},
// Ensemble API (pour calcul de confiance)
ensemble: {
url: 'https://api.open-meteo.com/v1/ensemble',
params: {
models: 'ecmwf_ifs025,gfs025,icon_seamless',
daily: 'temperature_2m_max,temperature_2m_min'
}
}
};
Calcul de Consensus Multi-Modèle
javascript
function calculateEnsembleConsensus(forecasts) {
const values = forecasts.map(f => f.tempMax);
// Statistiques robustes
const sorted = [...values].sort((a, b) => a - b);
const median = sorted[Math.floor(sorted.length / 2)];
const mean = values.reduce((a, b) => a + b) / values.length;
const stdDev = Math.sqrt(
values.reduce((sum, v) => sum + Math.pow(v - mean, 2), 0) / values.length
);
// Coefficient de variation = mesure de l'accord entre modèles
const cv = stdDev / Math.abs(mean);
const agreement = Math.max(0, Math.min(1, 1 - cv));
return {
prediction: median, // Médiane plus robuste que moyenne
mean,
stdDev,
range: sorted[sorted.length - 1] - sorted[0],
agreement, // 0-1, 1 = accord parfait
confidence: calculateConfidence(agreement, stdDev)
};
}
APIs Alternatives par Région
États-Unis
| API | Gratuit | Précision | Usage |
|---|---|---|---|
| NWS (api.weather.gov) | ✅ Illimité | Très haute | Production |
| Open-Meteo + HRRR | ✅ | Très haute | Production |
| Tomorrow.io | 500/jour | Haute | Backup |
Europe
| API | Gratuit | Précision | Usage |
|---|---|---|---|
| Open-Meteo + ICON-EU | ✅ | Très haute | Production |
| Open-Meteo + AROME | ✅ | Extrême (1.3km) | France |
| Meteomatics | ❌ | Premium | Enterprise |
Global
| API | Gratuit | Précision | Usage |
|---|---|---|---|
| Open-Meteo | ✅ (non-commercial) | Haute | Production |
| Visual Crossing | 1000/jour | Haute | Backup |
| Weatherbit | 500/jour | Moyenne-Haute | Backup |
Intégration AviationWeather (Court Terme)
METAR - Observations Actuelles
javascript
const AVIATION_CONFIG = {
metar: {
url: 'https://aviationweather.gov/api/data/metar',
params: {
ids: 'KJFK,KLAX,KORD', // Codes ICAO
format: 'json'
},
// Limitations
rateLimit: '100 req/min',
cors: 'blocked', // Nécessite proxy ou backend
},
taf: {
url: 'https://aviationweather.gov/api/data/taf',
params: {
ids: 'KJFK',
format: 'json'
},
// TAF = prévisions 24-30h aéroport
horizon: '30h',
precision: 'très haute pour J+0/J+1'
}
};
// Mapping ville -> ICAO
const CITY_ICAO = {
'NYC': 'KLGA', // LaGuardia (utilisé par Polymarket)
'Los Angeles': 'KLAX',
'Chicago': 'KORD',
'Miami': 'KMIA',
'London': 'EGLC', // London City (pas Heathrow!)
'Paris': 'LFPG',
'Tokyo': 'RJTT',
// ...
};
Bonnes Pratiques
1. Cache Intelligent
javascript
const CACHE_STRATEGY = {
// Les modèles se mettent à jour à heures fixes
ecmwf: { updateTimes: ['00:00', '12:00'], cacheTTL: '6h' },
gfs: { updateTimes: ['00:00', '06:00', '12:00', '18:00'], cacheTTL: '3h' },
hrrr: { updateTimes: 'every_hour', cacheTTL: '1h' },
// Invalider le cache après update
shouldInvalidate: (model, lastFetch) => {
const nextUpdate = getNextUpdateTime(model);
return Date.now() > nextUpdate && lastFetch < nextUpdate;
}
};
2. Fallback Chain
javascript
async function getForecastWithFallback(city, date) {
const strategies = [
() => fetchOpenMeteoMultiModel(city, date),
() => fetchECMWFDirect(city, date),
() => fetchGFSOnly(city, date),
() => fetchVisualCrossing(city, date) // Backup payant
];
for (const strategy of strategies) {
try {
const result = await strategy();
if (result && result.confidence > 0.5) return result;
} catch (e) {
console.warn('Fallback to next source:', e.message);
}
}
throw new Error('All weather sources failed');
}
3. Validation Croisée
javascript
function validateForecast(primary, secondary) {
const diff = Math.abs(primary.tempMax - secondary.tempMax);
// Si les sources divergent fortement, réduire la confiance
if (diff > 5) {
console.warn(`Large divergence: ${diff}°F between sources`);
return {
...primary,
confidence: primary.confidence * 0.7,
warning: 'HIGH_MODEL_DIVERGENCE'
};
}
return primary;
}
Commandes
- •
/weather-apis:status— État des APIs et dernières MAJ des modèles - •
/weather-apis:compare— Comparer les prévisions multi-modèles pour une ville/date - •
/weather-apis:accuracy— Analyser la précision historique par modèle