Catalysm
Live Bots

Stats Methodology

How Catalysm calculates win rate, trade counts, and performance metrics.

Performance stats on the Bots page are derived from each bot's bet log — a JSONL file recording every signal and outcome.

What counts as a trade

A row is included in stats when all of the following are true:

  1. Mode is LIVE — paper trades and backtests are excluded.
  2. Side is not NO_TRADE — the bot actually picked UP or DOWN.
  3. Executed on-chain — when the executed field is present, only executed: true rows count. Older logs without this field count all qualifying LIVE trades.

This means a signal that fired but failed to fill does not inflate trade counts or distort win rate.

Win rate

win rate = wins / (wins + losses) × 100

Only resolved trades (outcome: WIN or outcome: LOSS) contribute. Pending or unresolved markets are excluded.

Time periods

Period stats (24h, 7d, 30d) filter trades by timestamp relative to sync time. "All time" includes every qualifying trade in the log.

Syncing stats

Stats are generated locally by the sync script:

npm run sync:stats

This reads bet logs from the bot repositories and writes data/bot-stats.json, which the site renders on /bots.

Limitations

  • Stats reflect logged data, not a live blockchain indexer.
  • Bots without executed tracking may include failed fills until their logging is updated.
  • Past performance does not guarantee future results.

On this page