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

# Markets and tokens

> How Polymarket Up/Down binary markets map to YES / NO tokens, strike prices, and resolution outcomes.

PolyQuantLab covers Polymarket's **crypto Up/Down** binary markets —
the markets whose `event_type` is one of `5m · 15m · 1h · 4h ·
daily_up_down`.

## Event types

| `event_type`    | Duration   | Resolution boundary      |
| --------------- | ---------- | ------------------------ |
| `5m`            | 5 minutes  | every :00, :05, :10 …    |
| `15m`           | 15 minutes | every :00, :15, :30, :45 |
| `1h`            | 1 hour     | every :00                |
| `4h`            | 4 hours    | every 4-hour boundary    |
| `daily_up_down` | 1 day      | midnight UTC             |

Each market resolves **Up** if the underlying's price at the resolution
boundary is **above** the strike price; **Down** otherwise. Strike is
the underlying price at the market open boundary (see [Strike price](#strike-price)).

## YES / NO tokens

Each market trades two tokens on the Polymarket CLOB:

* **YES** — pays out $1 if the market resolves **Up**, $0 otherwise.
* **NO** — pays out $1 if the market resolves **Down**, $0 otherwise.

`yes_ask + no_ask` should be ≥ $1 at any point in time. When it drops
below $1 — even by a few cents — there's a [logical arb](/docs/concepts/arb-audit)
on the table: buy both sides, collect the deterministic payoff at
resolution.

## Strike price

The strike is the underlying's spot price at the market's **open**
boundary, not its close. Markets are published 12–24 hours before they
open (so users can pre-trade), which means **the strike isn't defined
until the open boundary passes**.

The API computes strike as follows:

```
strike = (first Binance spot tick at or after resolution_at - duration)
```

This is the canonical strike for backtest correctness — using the
publish-time price would be off by hours of drift.

## Tickers

Three crypto underlyings:

| `ticker` | Binance symbol | Chainlink aggregator (Polygon)               |
| -------- | -------------- | -------------------------------------------- |
| `BTC`    | `BTCUSDT`      | `0xc907E116054Ad103354f2D350FD2514433D57F6f` |
| `ETH`    | `ETHUSDT`      | `0xF9680D99D6C9589e2a93a78A04A279e509205945` |
| `SOL`    | `SOLUSDT`      | `0x10C8264C0935b3B9870013e057f330Ff3e9C56dC` |

Endpoints accept the **ticker** form (`BTC`), not the symbol.

## Resolution outcome

When a market resolves, Polymarket publishes a `resolution_outcome`
string. We normalise to `"Up"` / `"Down"`:

| Polymarket text    | Normalised | YES payout | NO payout |
| ------------------ | ---------- | ---------- | --------- |
| starts with `up`   | `Up`       | \$1        | \$0       |
| starts with `down` | `Down`     | \$0        | \$1       |
| anything else      | left raw   | —          | —         |

A non-{Up, Down} resolution means the market was disputed or N/A — see
[Resolution risk modeling](/docs/concepts/strategy-spec#resolution-risk).
