probtrade-bot — Autonomous Polymarket Trading Bot
Autonomous trading bot that uses the probtrade skill to trade on Polymarket via prob.trade. Includes built-in risk management, pluggable strategies, and dry-run mode.
Requires: The probtrade skill must be installed and configured with API keys.
Setup
- Install and configure the
probtradeskill first (API key required) - Edit
{baseDir}/config.yamlto set your strategy and risk limits - By default,
dry_run: true— the bot will only log, not trade
Commands
Run Bot
Start the autonomous trading loop. Scans markets and places orders every cycle.
python3 {baseDir}/scripts/bot.py run
Override strategy:
python3 {baseDir}/scripts/bot.py run --strategy pair_arb
Scan Markets
Run a single scan to see what the strategy would do, without placing orders.
python3 {baseDir}/scripts/bot.py scan
Bot Status
Check balance, positions, open orders, and risk state.
python3 {baseDir}/scripts/bot.py status
List Strategies
See all available strategies.
python3 {baseDir}/scripts/bot.py strategies
Built-in Strategies
- momentum — Contrarian momentum / mean reversion. Buys markets where YES price dropped significantly in 24h, betting on reversion.
- pair_arb — Async pair cost arbitrage. Finds markets where YES + NO price < $0.95, buys the cheaper side for guaranteed profit on resolution.
Creating Your Own Strategy
- Create a file in
{baseDir}/lib/strategies/(e.g.my_strategy.py) - Implement a class that extends
Strategy:
from lib.strategy_base import Strategy, Signal, get_yes_price, get_price_change
class MyStrategy(Strategy):
name = "my_strategy"
def initialize(self, config):
self.threshold = config.get("my_param", 0.15)
def scan(self, markets, positions, balance):
signals = []
for m in markets:
if should_buy(m):
signals.append(Signal(
market=m["condition_id"],
side="BUY", outcome="Yes",
order_type="LIMIT", amount=5,
price=get_yes_price(m),
confidence=0.8,
reason="My reason"
))
return signals
- Set
strategy: my_strategyinconfig.yaml - Test:
python3 {baseDir}/scripts/bot.py scan --strategy my_strategy
Risk Management
The bot enforces risk limits defined in config.yaml:
- max_position_size: Maximum USDC per single order
- max_daily_spend: Total USDC allowed per day
- max_open_positions: Maximum concurrent positions
- max_drawdown_pct: Circuit breaker — halts all trading if portfolio drops by this %
- max_consecutive_losses: Circuit breaker trigger after N losses in a row
Environment Variables
Override config values via env vars:
DRY_RUN=true— force dry run modeSTRATEGY=pair_arb— override strategyLOOP_INTERVAL=60— override scan intervalPROBTRADE_SKILL_PATH=/path/to/probtrade/lib— custom path to probtrade skill lib
Output
All commands output structured data (JSON or formatted text) for easy parsing by AI agents.