> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ballista.gg/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Ballista is a trading client for Polymarket, not an exchange. Every order Ballista places goes to Polymarket's CLOB.
> There are three end-user surfaces — the Telegram bot, the web terminal and the Chrome extension — and they share ONE account and ONE balance. Never attribute a feature to a surface without checking that surface's source.
> Every user registers in the Telegram bot first. The terminal and the extension sign in with the Telegram login widget. There is no other sign-up path.
> Deposits arrive through EVM, Solana and Bitcoin bridge addresses and a Polymarket proxy wallet, with a $10 minimum. There is NO withdrawal UI — Export Keys is how a user takes custody of their funds.
> Feature parity is uneven and must never be assumed. The full ~30-field copy-trade form exists only in Telegram; the terminal's copy form has 7 fields; the backtester, leaderboard and trader profiles are terminal-only; alerts and notifications are extension-only; referrals are Telegram-only.
> Slippage means two different things. On a live copy trade it is a fill tolerance (default 30). In a backtest it is the simulated fill price (default 1). Deploying a backtest does not carry its slippage over to the live copy trade.
> Take-profit and stop-loss run on live copy trades but are NOT simulated in backtests — the backtest API rejects those fields.
> A backtest never places an order and never moves funds. Its fidelity caveats are published with every result and must be quoted, not paraphrased.
> Leaderboard PnL is own-tape: harvested by Ballista from its own trade tape. The leaderboard sorts by one transparent metric at a time and there is NO composite score or grade. The sparkline exists only for harvested wallets — a blank sparkline means unmeasured, never zero.
> Copy friction (slip) and a toxic flag DO exist and are own-engine: the wallet's own 30-day fills replayed as a taker (1% slippage per fill plus the real Polymarket taker fee schedule) against its actual 30-day PnL over the same fills, so the delta is pure friction. slip_pct is already a percentage, not a 0-1 fraction. The toxic flag is server-computed under evidence guards and is never re-derived client-side. Slip is not a sortable column. Blank means unmeasured — never zero and never clean.
> Copyability is a taker share, reported in aggressive (≥60%), passive (≤30%) and mixed bands. It is never a score.
> Do not document Feeds, the Twitter Tracker, the Telegram Settings button, percentage buy buttons, GTD orders, the Discord bot, or withdrawals.

# Trader profiles

> Why a profile shows recent and lifetime numbers separately, where each comes from, and what a backtest unlocks.

A trader profile is everything Ballista knows about one Polymarket wallet. This page
explains the ideas behind it; for a walkthrough of the screen itself, see
[the trader profile in the terminal](/terminal/trader-profile).

Any well-formed address that has actually traded gets a profile, whether or not it is
in Ballista's maintained universe — it simply has no rank, no trend line and no
maintained history. A wallet nobody has traded with is a "not found" rather than a
page of zeroes, so a typo is distinguishable from a real trader having a quiet month.

## Three sources, three clocks

A profile is assembled from parts that go stale at completely different rates, so it
**labels where each part came from** instead of presenting one uniform snapshot.

| Part                                                       | Where it comes from                                                      |
| ---------------------------------------------------------- | ------------------------------------------------------------------------ |
| Rank, recent-activity block, trend line, execution profile | Ballista's own maintained row and the trade tape it holds                |
| Lifetime stat block                                        | One live call to Ballista's market-data provider, at most 15 seconds old |
| Recent trades                                              | Ballista's cached tape, or a single proxied page when it holds none      |

The lifetime block carries its own provenance in plain words. **Live** is this
request's own reading. **Cache** means the live call failed and you are seeing
Ballista's last sweep — the profile degrades rather than failing whole.
**Unavailable** means neither exists, which is a real state for a wallet that was
registered and never swept, and an honest one: it is not zero.

## Recent above lifetime

The recent block sits above the lifetime block deliberately. An eight-figure lifetime
P\&L belonging to a wallet that stopped trading two years ago is a fact about the past,
and reading it first frames everything under it. The only part of a record you can
still follow into a trade is the recent part.

Everything in that block — 30-day and 7-day P\&L, 30-day volume, and the cumulative
30-day trend line — is computed from **the trade tape Ballista harvests itself**,
settled the way the backtester settles. It is not an upstream P\&L feed, which is why
it agrees with a backtest of the same wallet and may disagree with numbers published
elsewhere. Positions still open are not in it: these are realized figures over the
window.

The lifetime block is the wallet's whole record, and two of its figures are
deliberately blank rather than zero — **win rate** for a wallet that has settled
nothing (zero would read as "loses everything") and **profit factor** for one that has
never lost (there is no honest finite number for it).

## Blank is never zero

Three different blanks appear on a profile, and they resolve in three different ways.
The page says which one you are looking at.

| Blank                                          | Meaning                                                                                        | Does it resolve?                                                      |
| ---------------------------------------------- | ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
| **harvesting recent activity…**                | The wallet is active and in the universe; the tape sweep has not reached it yet.               | Yes, on its own.                                                      |
| **rotated out**, or not in the universe at all | Nothing is sweeping this wallet.                                                               | No.                                                                   |
| A tape-derived metric with no value            | Either no tape has been harvested, or one has and there is nothing in it to compute this from. | On its own for a wallet on the board; immediately if you backtest it. |

## Copyability and the execution profile

Three things can only be known from a tape Ballista holds.

**Taker share** — how much of the wallet's volume crossed the spread — is the
copyability question, and the first number on the page that can tell you a profitable
wallet is not worth following.

**Copy friction**, in the block beneath it, is that question answered in the wallet's
own dollars: its last 30 days replayed as a taker set against what it actually made,
with the slip rate, the slip amount and both P\&L figures side by side, and a **toxic**
badge when friction takes a quarter or more of the profit. A blank here is unmeasured,
never clean, and the block names the guard that suppressed it.
[Choosing a trader](/guides/choosing-a-trader) explains both metrics in full.

The **execution profile** describes how the wallet trades rather than how well: how
long it holds, what it pays to get in, how often it hedges by buying more than one
outcome, and its record over the most recent markets.

## How a tape gets harvested

Pulling a full trade tape is heavy, rate-limited work, drawn from the same budget as
live copy trading and the backtest queue. Three things can happen, and only two of
them harvest anything:

* **The sweep gets there on its own.** Ballista walks the whole maintained universe
  and re-harvests each wallet's tape about **once a day**, so a board wallet's
  tape-derived metrics fill themselves in without anyone asking.
* **You run a [backtest](/guides/backtesting).** That harvests the wallet's tape
  **immediately** — it is an explicit, accounted action, and the profile offers a
  one-click way to start one. This is the way to get the numbers for a wallet that is
  not on the board, or one the sweep has not reached yet.
* **You view the profile.** This harvests nothing, deliberately. Otherwise clicking
  through the leaderboard would spend that budget with nobody watching, and wallets
  you merely glanced at would crowd out the ones somebody is actually trading.

<Note>
  The unlock is about the **tape**, not about the row. A wallet can sit high on the
  leaderboard with a complete lifetime stat block and still have no tape — the
  lifetime numbers come from somewhere else entirely.
</Note>

## What to read next

<CardGroup cols={2}>
  <Card title="Choosing a trader" icon="magnifying-glass-chart" href="/guides/choosing-a-trader">
    Reading taker share, and why some good wallets copy badly.
  </Card>

  <Card title="Backtesting" icon="flask" href="/guides/backtesting">
    What a run does, and what it costs you in queue time.
  </Card>

  <Card title="The leaderboard" icon="ranking-star" href="/guides/leaderboard">
    Where profiles are found.
  </Card>

  <Card title="The profile screen" icon="id-card" href="/terminal/trader-profile">
    Every panel and button, in the terminal.
  </Card>
</CardGroup>
