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

# Markets tab

> Search Polymarket, open a market, and place a buy or sell without leaving the popup.

The **Markets** tab is the extension's own market browser: search, pick an outcome, place
an order. It is what you use when you are not already on a Polymarket page — when you
are, the [on-page panel](/extension/on-page-panel) is quicker.

## Search

Type into the search box at the top. Results appear as you stop typing, and only cover
markets that are currently active and open.

Each result shows the event image and title, plus either the YES and NO prices — for
events with a single market — or a count like *12 markets*.

Pressing a result takes you straight to the order form if the event has one market, or to
a list of its markets if it has several. In that list, every market shows its YES and NO
prices; anything resolved or not accepting orders is greyed out and cannot be opened.

## Place an order

The order form is the same shape every time.

<Steps>
  <Step title="Check YES or NO">
    Both buttons show the current price in cents, and **YES is already selected**
    when the form opens. Press **NO** if that is the side you want — nothing points
    out that the default was left in place.
  </Step>

  <Step title="Apply a preset (optional)">
    If you have any [presets](/extension/presets-tab), an **Apply a preset…**
    dropdown sits above the form. Choosing one fills in the order type, side, price
    and size in one go. You can still edit anything afterwards.
  </Step>

  <Step title="Choose Limit or Market, and Buy or Sell">
    Two toggles side by side.
  </Step>

  <Step title="Enter price and size">
    Limit orders take a **price** between 1¢ and 99¢, entered as a decimal — `0.35`
    is 35¢. The size field asks for dollars on a buy and shares on a sell; the label
    tells you which.
  </Step>

  <Step title="Press Buy or Sell">
    The order goes to Polymarket's order book. A limit order rests there until it
    fills or you cancel it from the [History tab](/extension/history-tab).
  </Step>
</Steps>

If the market is not currently accepting orders, the form says so and the button stays
disabled.

## Buys in dollars, sells in shares

One rule covers every order across Ballista: **you buy with an amount of money, and you
sell a number of shares.** You buy \$20 of an outcome; you close the 34.5 shares you
actually hold.

| Order       | Size field     | You enter        |
| ----------- | -------------- | ---------------- |
| Market buy  | Amount (USDC)  | Dollars to spend |
| Limit buy   | Amount (USDC)  | Dollars to spend |
| Market sell | Shares to sell | Shares           |
| Limit sell  | Shares to sell | Shares           |

A limit buy is the one case where the two units meet, and the form does the conversion
for you: enter `$20` at `0.35` and a line under the fields reads **≈ 57.14 shares @
35¢**. That is the order that gets placed, and the share count is always rounded **down**
to the nearest 0.01, so the cost never exceeds the amount you typed.

Limit sells get the same treatment in one direction only — a share count is floored to
0.01, and the line shows the floored figure, so what you read is what is placed.

## Prices sit on the 1¢ tick

Polymarket's book works in whole cents, so your limit price is snapped to the nearest
cent before anything else happens — before the share conversion, and before the order is
signed. When a typed price is moved, the same line tells you: **≈ 57.14 shares @ 9¢ —
price snapped from 0.086**.

Because the snap comes first, the price in that line is the price your order is placed
at, and the share count is the count it buys at that price. The three numbers cannot
disagree.

A price outside the tradable band is refused outright with **Price must be between 1¢ and
99¢**, and the order button stays disabled. Two other messages appear in the same place
when an order cannot be placed as typed:

* **Amount too small to buy 0.01 shares @ 35¢** — your dollar amount does not reach one
  share-cent at that price.
* **Order must be worth at least \$0.01 @ 35¢** — the order clears a share-cent but is
  worth too little for the book.

## Save the setup as a preset

Next to the order button is **Save preset**. Press it, then **Confirm save**, and the
current order type, side, price and size become a reusable preset — available in the
on-page panel, in this dropdown, and in the [Presets tab](/extension/presets-tab).

The preset stores the size in the unit you entered it in — dollars for a buy, shares for
a sell — and, for a limit preset, the snapped price. A limit preset cannot be saved
without a valid price, so **Confirm save** stays disabled until the price is one the book
accepts.

Presets are not tied to the market you saved them from. They are a shape of order, so a
`BUY market $25` preset can be fired at anything.

You can hold **six presets per combination** of order type and side — six limit buys, six
market buys, and so on. Past that, saving fails and the popup shows the message
*maximum of 6 presets per order type, side, and platform*. Delete one from the
[Presets tab](/extension/presets-tab) to make room.
