Files
hermes_weatherbot/README.md
T
2026-04-18 18:06:30 +08:00

230 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🌦️ 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](https://img.shields.io/badge/Python-3.13-blue.svg)](https://www.python.org/downloads/)
[![Polygon](https://img.shields.io/badge/Chain-Polygon%20137-9B59B6.svg)](https://polygon.technology/)
[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)
---
![alt text](image-1.png)
## 🤖 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
```bash
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:
```bash
cp .env.example .env
```
Edit `.env`:
```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:
```json
{
"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
```bash
# 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
```python
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)
```python
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.25`**Strong BUY** 📈
### Step 3 — Kelly Criterion (Optimal Bet Sizing)
```python
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](https://github.com/polymarket/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.*