Skip to main content

The problem

Quantitative research on Polymarket requires clean historical fill data, position snapshots at arbitrary points in time, and PnL series that reconcile with wallet state. Reconstructing this from on-chain logs is possible but expensive: parsing conditional-token events, joining against order-book snapshots, and handling neg-risk mechanics is a several-week engineering project.

What Bravado provides

  • Full historical fills for any wallet via GET /traders/{address}/trades with cursor pagination.
  • Position reconstruction at any timestamp via GET /traders/{address}/positions with time range filters.
  • PnL time series via GET /traders/{address}/pnl with configurable bucketing.
  • Universe-level data via GET /trades for global fill data across wallets.
  • All PnL computed under PMWAS, so backtests reconcile with the live Analytics endpoints.

APIs used

Worked example

Pull all fills for a leaderboard cohort and load them into a dataframe:
The resulting parquet has every fill for every wallet, with columns for symbol, side, size, price, fee, block_timestamp, and market metadata. Feed it directly to a Jupyter notebook or a research feature store.

Common research patterns

  • Alpha decay. Track leader wallets’ PnL post-signal and correlate with mirroring latency.
  • Fee sensitivity. Simulate strategies at different fee levels using PMWAS cost-basis math.
  • Liquidity modeling. Cross-reference fill sizes against depth snapshots to model slippage.
  • Neg-risk arbitrage. Detect stale prices across a neg-risk basket where the YES-share sum diverges from $1.

Notes on data

  • Numeric fields are strings. Cast to Decimal before arithmetic, not float. See Numeric conventions.
  • Cursor pagination is stable against new inserts. Backfill jobs can resume from a persisted cursor.
  • Fees are itemized per fill.