BTC-only Polymarket 5-minute / 15-minute trading research stack.
Default supported mode: paper trading with real market data and no real orders.
- Update summary
- User manual
- Use cases
- Architecture/root-cause audit, 2026-05-08
- Postmortem/action plan, 2026-05-08
- Changelog
cd /Users/sebastian/MAKAKOO/plugins/agent-arbitrage-agent/src
PY=/usr/local/opt/python@3.11/bin/python3.11
$PY btc_live_go_nogo.py
$PY btc_trading_gym.py
$PY btc_decision_audit.py --hours 36 --limit 12
$PY btc_telegram_reporter.py --printThe BTC paper trader can run as two independent paper-only processes:
cd /Users/sebastian/MAKAKOO/plugins/agent-arbitrage-agent/src
PY=/usr/local/opt/python@3.11/bin/python3.11
# Start both agents for 6h with total $20 virtual bankroll ($10 each)
$PY btc_split_paper_agents.py start --duration 21600 --capital-total 20
# Start/restart with per-agent FastGA learning from paper + resolved live fills
$PY btc_split_paper_agents.py restart --duration 21600 --capital-total 20 --fast-ga --include-live-training
# Check both agents
$PY btc_split_paper_agents.py status
# Stop both agents
$PY btc_split_paper_agents.py stopProcess split:
btc-5mtrades only BTC 5-minute Polymarket windows.btc-15mtrades only BTC 15-minute Polymarket windows.- Each agent has its own params, PID, run-until file, and logs.
- Split agents remain paper-only: they never submit live orders.
- With
--include-live-training, FastGA also scores resolvedmode=livefills from the shared journal, filtered by timeframe.
Default is paper validation. Real-money mode is blocked by the durable kill switch until a fresh audit removes it intentionally.
The May 8 live canary lost money. The app now fails closed:
btc_split_live_agents.py stoparms the live kill switch and cancels CLOB open orders.- Live agents stop automatically after configured filled-loss, drawdown, or WR-floor breaches.
- Live external confirmation now fails closed when derivatives context is stale or both Coinalyze and CoinGlass are unavailable.
- Live agents do not mutate params by default. Auto-improvement is paper/shadow-only unless
--allow-live-param-mutationis explicitly passed. - Status prints strict filled-journal WR/PnL separately from raw in-memory counters.
- Entry path never uses the slow balance-retry loop; it rechecks seconds-left immediately before posting an order.
Safe stop/status:
cd /Users/sebastian/MAKAKOO/plugins/agent-arbitrage-agent/src
PY=/usr/local/opt/python@3.11/bin/python3.11
$PY btc_split_live_agents.py stop
$PY btc_split_live_agents.py statusLive restart requires all of these, on purpose:
- no active
data/arbitrage-agent/v2/state/live_trading_disabled.json, - passing
btc_live_go_nogo.pyor the explicit operator canary override, - small bankroll/order caps,
- circuit breakers left enabled.