> ## 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.

# What Ballista does not do

> The limits, stated plainly, so none of them are a surprise later.

Everything here is true today. None of it is hidden behind a setting you have
not found.

## Ballista is not an exchange

<Warning>
  Ballista does not run a market, hold a book or match a trade. Every order it
  places is signed and handed to Polymarket's central limit order book.
</Warning>

Prices, liquidity, fills, market resolution and settlement are all Polymarket's.
If a market resolves in a way you disagree with, or a fill went worse than you
expected because the book was thin, that is the exchange — Ballista cannot
change it, reverse it, or compensate for it.

## There is no withdrawal screen

There is no withdraw button in the Telegram bot, the web terminal or the
extension. Not hidden, not gated — it does not exist.

The way out is [Export Keys](/guides/wallet-and-keys): take your private key,
import it into a wallet you control, sign in to Polymarket with it, and withdraw
there. Note that the key's own address will look empty in a wallet app — your
balance is held by the Polymarket proxy wallet that key controls, which is why
the route runs through Polymarket rather than a plain send. Deposits are one-way
as far as Ballista's interface is concerned.

## There is no sign-up outside Telegram

Accounts are created by sending `/start` to the Telegram bot, and only there. The
terminal and the extension sign in with the Telegram login widget to an account
that already exists; if it does not, they tell you to register in the bot. There
is no email sign-up, no password, and no way to attach a Ballista account to
anything other than a Telegram account.

## Backtests do not simulate take-profit or stop-loss

Take-profit and stop-loss work on live copy trades. They are **not** simulated.

The simulator only knows prices at the moments the trader you are copying
actually traded, and a stop-loss needs a continuous price path between those
moments to be meaningful. Rather than quietly ignore the settings, the
backtester **rejects** a configuration that carries them — a result labelled
"with a stop-loss" for a run that never had one is worse than an error message.

See [Backtest fidelity](/guides/backtest-fidelity) for the full list of what the
simulator does and does not model.

## Live slippage and backtest slippage are different numbers

They share a name and mean opposite things.

|            | Live copy trade                                                                                                             | Backtest                                            |
| ---------- | --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- |
| What it is | A **tolerance** on a fill-and-kill order — how far the book may have moved and still fill you, with a partial fill possible | The **fill price** assumed for every simulated fill |
| Default    | 30                                                                                                                          | 1                                                   |

A live tolerance of 30 costs nothing unless the market actually moved. The same
30 in a backtest is a guaranteed 30% haircut on every fill. Do not carry one
number across to the other, and note that deploying a backtested configuration
as a live copy trade does not carry the simulated value into the live setting.

## A blank slip cell is not a clean one

Ballista does publish a copy-friction figure — **slip** — and a **toxic** flag
beside it on the leaderboard and on trader profiles. Both are measured on
Ballista's own engine, by replaying a wallet's own recent fills as a taker and
comparing the result against the same wallet's own profit over the same markets.
Neither is a third-party score.

What Ballista will not do is fill them in when it cannot measure them. A wallet
needs enough settled markets in the window, a profit large enough for a ratio to
mean anything, and a fee schedule for every market in it. Short of that the cell
stays blank.

<Warning>
  A blank slip cell means **unmeasured**, never "no friction". A wallet with no
  toxic badge has not been cleared — it may simply never have been judged.
  Silence is not a verdict.
</Warning>

Slip is also not something you can rank on: it is a column you read, not a sort
key. [Choosing a trader](/guides/choosing-a-trader) explains what the number
means and how to use it.

## There is no composite score or grade

The [leaderboard](/guides/leaderboard) ranks by **one transparent metric at a
time**, and the value it sorted on is shown in the same row. There is no blended
score, no letter grade, no star rating — nothing that turns several
measurements into one number whose recipe you cannot see.

## A blank statistic means unmeasured, never zero

Where a trader metric has not been computed for a wallet, it renders as **—**
with an explanation of what would fill it in. It never renders as 0. A dash is
"we have not measured this", not "this is zero" — see
[Trader profiles](/guides/trader-profiles).

## Features are not on every surface

This is deliberate, not a rollout in progress.

|                                                                   |                                                                                                                                                                                                       |
| ----------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **The Telegram bot cannot sell**                                  | Every order the bot places is a buy. There is no sell action in a market and none on the positions screen, and no open-order list to cancel from. Close positions from the terminal or the extension. |
| **Full copy-trade configuration is Telegram-only**                | The bot exposes every setting the engine supports. The terminal has a short form covering the common case; the extension has no copy trading at all.                                                  |
| **Backtester, leaderboard and trader profiles are terminal-only** | Not in the bot, not in the extension.                                                                                                                                                                 |
| **Price alerts and notifications are extension-only**             | The bot and the terminal have no alerts screen.                                                                                                                                                       |
| **Referrals are Telegram-only**                                   | Your code, link, rates and pending rewards live in the bot.                                                                                                                                           |
| **Presets are terminal and extension only**                       | The bot has no preset list; orders there are entered each time. Only the extension can edit an existing preset.                                                                                       |
| **Combined trade history is extension-only**                      | The terminal shows your fills per market, never as one list. The bot shows none at all.                                                                                                               |

## Other things worth knowing

|                                          |                                                                                                                                             |
| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| **No paper trading**                     | Backtesting is the only simulation. Any order you place from any surface is real money on a live book.                                      |
| **No second factor**                     | Access to your Telegram account is access to your Ballista account, and your exported private key is the whole wallet.                      |
| **Nothing is undoable**                  | A resting order can be cancelled from the terminal or the extension, but a fill cannot be reversed and a deposit cannot be recalled.        |
| **Notifications cannot be deleted**      | Anything in the feed — a triggered price alert or a copy-trade notice — is cleared by marking it read. Only an alert itself can be deleted. |
| **A claimed referral code is permanent** | It cannot be changed or released once set.                                                                                                  |
| **Referral attribution happens once**    | Only when an account is created. Nobody can be re-attributed later.                                                                         |

## What to read next

<CardGroup cols={2}>
  <Card title="Limits" icon="ruler" href="/guides/limits">
    The numeric bounds — minimums, caps and windows.
  </Card>

  <Card title="Getting help" icon="life-ring" href="/guides/getting-help">
    Where to write, and what to include.
  </Card>
</CardGroup>
