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

# The copy-trade form

> Every field on the bot's copy-trade form, in the order you meet it.

The bot is the only surface with the complete copy-trade form. This page walks it
top to bottom and tells you what each button accepts. For what the settings
*do* — and how to combine them into a strategy — read
[Copy-trade settings](/guides/copy-trade-settings).

## How the form works

Every row is a button, and buttons come in two kinds.

**Toggles** change the moment you tap them: the label redraws with the new value.
**Prompts** send you a message asking for a value; you reply in the chat and the
form redraws.

A few conventions run through the whole form:

* A label showing **`-`** means the setting is unset — usually "no limit". Money
  fields render it as `$-`, including the two price fields, which are actually
  probabilities between 0 and 1 rather than dollars.
* **Only some fields can be cleared.** Where the prompt offers it, replying
  `reset` puts the value back to `-`. The rest — copy size, both slippages, TP/SL,
  balance TP/SL, the start and final times, and the tag — have no reset: once set,
  you can only overwrite them with another value.
* Values are in USDC unless the label says otherwise.

Remember that on an existing copy trade every change saves itself immediately,
while on a new one nothing is stored until you tap **+ Create**. See
[Copy trades](/telegram/copy-trades).

## Target Wallet

The wallet you want to mirror. Reply with a full EVM address — `0x` followed by 40
hex characters. This is the one field you must set before the copy trade can be
created.

## Tag · Reverse Copy

**Tag** — a label for this copy trade. Reply with any text. It becomes the button
name in your copy-trade list, so it is worth setting.

**Reverse Copy** — a toggle. ✅ or ❌, off by default.

## Copy Percentage/\$

How your order is sized against the target's. One prompt, two answer formats:

| Reply         | Result                                                        |
| ------------- | ------------------------------------------------------------- |
| `50` or `50%` | A percentage of the target's trade, up to 10000.              |
| `$10`         | A fixed amount, minimum \$5, regardless of the target's size. |

Setting one clears the other — a copy trade sizes by percentage or by fixed
amount, never both. The default is 100%.

## Market Order Copy Buy

A toggle between **Market** and **Limit** for the buys this copy trade places.
Market by default.

## Slippage · Retry on failure

**Slippage** — a prompt taking a number from 0 to 100 percent. Default 30%.

**Retry on failure** — a toggle that cycles 0, 1, 2, 3, 4, 5 and back to 0. Default
1\.

## TP %/Price · SL %/Price

Take-profit and stop-loss, each a prompt that accepts either form:

| Reply  | Read as                          |
| ------ | -------------------------------- |
| `10%`  | A percentage, from 0.1% to 100%. |
| `0.65` | A price, from 0.001 to 0.999.    |

A bare number of 1 or more is read as a percentage, capped at 100 — `101` is
rejected. A bare number below 1 is read as a price. Setting one form clears the
other.

## Balance TP · Balance SL

Two prompts, each taking a positive USDC amount. These are thresholds on your whole
account balance rather than on any single position — a way to stop a copy trade
once it has made, or lost, enough.

<Warning>
  **Crossing one liquidates and stops.** Your balance is checked every 30
  seconds. The moment it reaches your Balance TP or falls to your Balance SL, the
  copy trade is switched off and every position it has opened since you set the
  threshold is sold at market.

  You can switch it back on from the [web terminal](/terminal/overview) — but if
  your balance is still past the threshold, adjust or clear the level first, or it
  will stop again within 30 seconds.
</Warning>

Positions the copy trade opened *before* you set a balance level are not part of
this. Only what it opens afterwards is tracked, and only tracked positions are
sold.

## Below Min Limit, Buy at Min

A toggle. The bot's form starts it on.

## Ignore Trades \< · Ignore Trades >

Two prompts that skip the target's trades by size. Each takes a number from 0 to
9,999,999, or `reset` to clear. Entering `0` is the same as clearing.

## Min Price · Max Price

Two prompts bounding the price at which a trade will be copied. Each takes a value
from 0.001 to 0.999, or `reset`.

## Total Spend Limit

A prompt taking a positive USDC amount, or `reset`.

## Min Per Trade · Max Per Trade

Two prompts that clamp the size of each copied order after your percentage has been
applied. Each takes a number from 5 to 9,999,999, or `reset`.

## Max Per Yes/No · Max Per Market

**Max Per Yes/No** — a prompt taking a USDC amount of 1 or more, or `reset`.
Underneath there are two separate caps, one for Yes and one for No; the bot writes
your single value into both and keeps them equal.

**Max Per Market** — the same input, applied to a whole market rather than one
side.

## Only Copy market Final Time

A prompt taking a whole number of seconds from 1 to 300.

## Only Copy market Start Time

The same: a whole number of seconds from 1 to 300.

## Max Holder Market Number

A prompt taking a whole number from 1 to 999 — or `-1` for unlimited, which shows
as `-` on the label.

## Only copy specific market types

Opens a sub-menu with **All** on top and one row per category: Sports, Politics,
Crypto, Weather and Other. Tap to tick and untick; **« Back** returns to the form.

**All** means no filter — every market the target trades is copied. It is ticked
by default, and tapping it clears whatever you had selected. Ticking one or more
categories narrows the copy trade to those; the form label then reads *n selected*
instead of *All*.

<Note>
  Categories are matched against the tags Polymarket puts on the market itself.
  Unusual markets sometimes carry no matching tag, and those are skipped while a
  filter is on — so a narrow filter can be narrower than it looks.
</Note>

See [Copy-trade settings](/guides/copy-trade-settings) for what falls under each
category.

## Copy Buy · Copy Sell

Two toggles, both on by default, controlling which of the target's actions you
mirror.

## Sell: Market Order

A toggle between **Market** and **Limit** for the sells this copy trade places.
Market by default.

## Sell Slippage

A prompt taking a number from 0 to 100 percent. Default 30%.

## + Create / 🗑 Delete

The last button before **« Back** depends on which mode you are in: **+ Create** on
a new copy trade, **🗑 Delete** on an existing one.

## The defaults

These are the values the bot's form starts with, and the values it saves if you
change nothing. A copy trade created on another surface may start elsewhere.

| Setting                     | Default |
| --------------------------- | ------- |
| Copy Percentage/\$          | 100%    |
| Reverse Copy                | Off     |
| Buy order type              | Market  |
| Slippage                    | 30%     |
| Retry on failure            | 1       |
| Below Min Limit, Buy at Min | On      |
| Copy Buy                    | On      |
| Copy Sell                   | On      |
| Sell order type             | Market  |
| Sell Slippage               | 30%     |

Every other field starts unset, which means no limit and no filter.
