POLYETH 15 trades Polymarket's Ethereum "Up or Down" 15-minute binary markets — every quarter hour, a fresh market pays $1.00 per share if ETH ends the period higher (Up) or lower (Down), and $0.00 for the losing side. The bot polls the order book every second, enters on momentum-confirmed value, and manages the position through a 7-priority exit chain until resolution. It ships with a neon-blue C# WinForms dashboard showing live P/L, positions, and trade history.
ETH is the primary asset here: ETH market discovery is mandatory (the bot refuses to run without it) and the canonical 15-minute period clock is derived from the ETH market's slug timestamp. BTC/SOL/XRP markets are monitored only.
Part of a four-bot family — same engine, different primary asset:
polybit-15 (BTC) · polysol-15 (SOL) ·
polybit-15-pro (XRP). All four are independent processes
and can run side-by-side.
The repo ships no credentials. Copy the template and plug in your own:
cp config.example.json config.json # config.json is gitignored — it never leaves your machine| Field | What it is | Where to get it |
|---|---|---|
private_key |
Your Polygon wallet's private key (hex) | The wallet you use with Polymarket |
api_key / api_secret / api_passphrase |
Polymarket CLOB L2 API credentials | Derived from your wallet — Polymarket API settings or py-clob-client's create_or_derive_api_creds() |
Fund the wallet with USDC on Polygon before going live. Treat config.json
like a wallet seed.
Entry — momentum-gated dip buying on ETH
- Waits a few minutes into each period, then buys the ETH Up token when its ask sits in the configured value zone (default ≤ $0.55).
- A rolling linear regression on the ETH Up ask supplies a direction signal;
when R² clears the confidence threshold the bot may pay up to
momentum_max_buy_price(default $0.60). - No entries in the final seconds; spread and depth guards filter bad books.
Exit — 7-priority chain, checked every tick
1. TIME HOLD mid ≥ 85¢, < 5 min left → ride to $1.00 resolution
2. PROFIT LOCK tiered partial sells (85¢/90¢) → bank 25% per tier, let rest run
3. TIME CUT mid < 50¢ with > 10 min left → cut a loser early
4. LATE CUT mid < 45¢ with > 5 min left → cut before decay
5. FINAL EXIT mid < 45¢ in the last 5 min → salvage vs $0 resolution
6. STOP LOSS hard floor → sell all
7. RESOLVED period ends → $1.00 or $0.00
All thresholds live in config.example.json — tune without recompiling.
Defaults to simulation: every would-be trade is tracked in local JSON files against real market prices, no orders placed. When your simulated P/L satisfies you:
polyeth-15-bot.exe --no-simulation # real orders, real moneysrc/main.rs entry point, market discovery (ETH mandatory, others soft-fail)
src/monitor.rs 1-second polling loop; ETH slug timestamp = canonical period clock
src/detector.rs price detection + linear-regression momentum on ETH Up ask
src/trader.rs buy execution, the 7-priority exit chain, resolution handling
src/simulation.rs simulated fills, P/L accounting, trade records
src/api.rs Polymarket CLOB + Gamma API client (EIP-712 order signing)
src/config.rs config loading, CLI flags (--simulation / --no-simulation)
src/bin/ research binaries: backtester, limit-order experiments, test tools
dashboard/ C# WinForms dashboard (.NET 8), neon-blue Ethereum theme
docs/ architecture deep-dive + strategy design notes
Dashboard: live stat cards (P/L, win rate, open positions), trade grids fed
by a file watcher on the bot's output, process detection with START/STOP (launches
the bot hidden, no terminal window), and optional trade sounds (drop .wav files
into sounds/ beside the exe — silent if absent).
cargo build --release # bot → target/release/polyeth-15-bot.exe
cd dashboard && dotnet build BtcDashboard/BtcDashboard.csproj -c Release # dashboard (Windows)Run the bot from the repo root (reads config.json, writes runtime files there).
Real-money trading software. It can and will lose money; 15-minute binaries are fast and unforgiving. Not financial advice. Simulation results don't guarantee live results. Check Polymarket's legality in your jurisdiction. Use at your own risk.