ii
2026-04-18 15:27:39 +08:00
2026-04-18 18:06:30 +08:00
2026-03-03 15:27:53 -06:00
2026-03-09 02:24:13 -05:00
2026-03-22 07:06:05 -05:00
2026-04-18 18:06:30 +08:00
2026-03-03 15:27:53 -06:00
2026-04-18 18:06:30 +08:00
2026-03-03 17:40:36 -06:00
ii
2026-04-18 15:27:39 +08:00

🌦️ WeatherBet — Powered by Hermes Agent

Fully Autonomous Prediction Market Trading Bot — Uses ECMWF weather forecast data to automatically find mispriced Polymarket markets and bet on them. Self-improves over time via the Hermes Agent framework.

Python 3.13 Polygon License: MIT


alt text

🤖 Why Hermes Agent

This project demonstrates the power of Hermes Agent framework in autonomous trading:

Hermes Agent Feature Application in This Project
Self-Learning & Evolution Bot automatically adjusts Kelly fraction and EV threshold from trade history
Fully Autonomous Execution 60-min scan loop → signal calculation → auto order execution → on-chain settlement — zero human intervention
Multi-Platform Gateway Real-time trade alerts via Telegram — control everything from your phone
Persistent Memory Trade logs + learning models persist across sessions
Model Agnostic Switch any LLM provider for decision reasoning
Tool Orchestration Integrates weather API + on-chain CLOB trading + Telegram notifications

🎯 What It Does

The bot monitors 6 US cities (NYC, Chicago, Miami, Dallas, Seattle, Atlanta) and scans Polymarket temperature prediction markets for mispricing opportunities.

Core Logic: When weather forecast implies a different probability than what the market price suggests → calculate Expected Value (EV) → auto-bet if EV exceeds threshold.


🚀 Quick Start

1. Clone & Install

git clone https://github.com/nicolastinkl/hermes_weatherbot.git
cd hermes_weatherbot
python3.13 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

2. Configure

Copy the example env file and fill in your wallet credentials:

cp .env.example .env

Edit .env:

# Your Polygon private key (hex, without 0x prefix)
PK=your_polygon_private_key_here

# Your Polygon wallet address
WALLET=0xYourWalletAddressHere

# Signature type (0 = EOA)
SIG_TYPE=0

Edit config.json to set your trading parameters:

{
  "max_bet": 2.0,
  "min_ev": 0.10,
  "min_volume": 500,
  "scan_interval": 3600,
  "telegram_bot_token": "your_token",
  "telegram_chat_id": "your_chat_id"
}

3. Start Trading

# Start the bot (runs in background)
./start_bot_v3.sh

# Stop the bot
./stop_bot_v3.sh

That's it! The bot will continuously scan markets and trade automatically.


🧠 Core Math: Gaussian Bucket Model

Step 1 — True Probability from ECMWF

import math

def norm_cdf(x):
    """Cumulative distribution function of standard normal"""
    return 0.5 * (1.0 + math.erf(x / math.sqrt(2.0)))

def bucket_prob(forecast_temp, t_low, t_high, sigma=2.0):
    """
    Forecast says 72°F ± 2σ.
    What's the probability actual high falls in 70-75°F bucket?
    P(t_low ≤ X ≤ t_high) = CDF(z_high) - CDF(z_low)
    """
    z_low  = (t_low  - forecast_temp) / sigma
    z_high = (t_high - forecast_temp) / sigma
    return norm_cdf(z_high) - norm_cdf(z_low)

Step 2 — Expected Value (EV)

def calc_ev(true_prob, market_price):
    """
    EV = P(win) × payoff - P(lose) × cost
    EV > 0 → market is underpriced → BUY signal
    """
    win  = true_prob * (1 / market_price - 1)
    lose = (1 - true_prob) * 1
    return win - lose

Example:

  • Forecast: 72°F → 75% chance of 70-75°F bucket
  • Market price: $0.30 (implies 30% probability)
  • EV = 0.75 × (1/0.30 - 1) - 0.25 = +1.25Strong BUY 📈

Step 3 — Kelly Criterion (Optimal Bet Sizing)

def calc_kelly(p, price):
    """Kelly % = (bp - q) / b — uses 1/4 Kelly conservative fraction"""
    b = 1.0 / price - 1.0
    f = (p * b - (1.0 - p)) / b
    return round(min(max(f, 0.0) * KELLY_FRAC, 1.0), 4)

🌀 Auto-Evolution Learning System

This is a core strength of the Hermes Agent framework — the bot learns from trading and auto-tunes:

data/learning/
├── trade_log.json   # All trades: city, bucket, cost, outcome, pnl
└── model.json       # Learned parameters per city/bucket

Adaptation Rules:

  • Winrate < 45% → Kelly fraction ×0.8, EV floor +10%
  • Winrate > 55% + PnL > $2 → Kelly fraction ×1.1, EV floor 5%
  • Per-city winrate tracking adjusts confidence per market
  • Starts conservative (25% Kelly) → converges to optimal as data accumulates

📊 Architecture

ECMWF Weather Forecast API
        ↓
Hermes Agent (Autonomous Decision Engine)
    ├── Gaussian Bucket Model → True Probability
    ├── calc_ev() → Expected Value Calculation
    ├── calc_kelly() → Optimal Bet Sizing
    └── Adaptive Learning → Auto Parameter Tuning
        ↓
Polymarket CLOB (On-chain, Polygon)
        ↓
Telegram (Real-time Notifications)

🛡️ Risk Management

Parameter Value Purpose
Max bet $2.00 Per-trade exposure cap
Kelly fraction 25% 1/4 Kelly conservative
Min EV 10%+ Only trade positive EV
Min volume $500 Avoid illiquid markets
Max spread 3% Avoid high-slippage
Adaptive floor 10-20% Self-tuning from performance

🔐 Full Automated Trading Flow

1. Fetch ECMWF forecast (D+0 ~ D+3)
2. Query Polymarket temperature bucket markets
3. Gaussian model → true probability (σ=2°F)
4. Compare to market price → calculate EV
5. EV ≥ adaptive threshold → calculate Kelly bet size
6. Execute order on Polymarket CLOB (Polygon)
7. Record trade → update learning model
8. Telegram real-time notification
9. Repeat every 60 minutes

💡 Tech Stack

  • Framework: Hermes Agent (autonomous learning + multi-platform)
  • Language: Python 3.13
  • Trading: py_clob_client — Polymarket CLOB
  • Weather: ECMWF OpenMETAR / Open-Meteo API
  • Chain: Polygon (Chain ID 137) — USDC.e stablecoin
  • Notifications: Telegram Bot API
  • Learning: Pure Python JSON persistence (zero DB dependency)

⚠️ Disclaimer

This bot trades real markets with real money. Past performance does not guarantee future results. Trade at your own risk. For educational and research purposes only.


Built with 🐍 + Hermes Agent on Polygon — Autonomous Weather Prediction Trading.

S
Description
Autonomous trading bot that exploits weather forecast errors to find mispriced Polymarket prediction markets — and self-improves over time.
Readme MIT 781 KiB
Languages
Python 85.3%
HTML 13.8%
Shell 0.9%