> For the complete documentation index, see [llms.txt](https://fx100.gitbook.io/fx100-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://fx100.gitbook.io/fx100-docs/trading/pricing-and-execution.md).

# Pricing and execution

FX100 has no order book. Every fill is priced from the oracle and adjusted by a dynamic spread. If you are used to reading an order book, a few numbers in the interface will surprise you at first — understanding the spread explains all of them.

## Oracle price

The reference price comes from an oracle feed with three components:

| Component | Used for                         |
| --------- | -------------------------------- |
| **Mid**   | The on-chain reference price.    |
| **Ask**   | Opening a long, closing a short. |
| **Bid**   | Opening a short, closing a long. |

**Mark price** — the price used for unrealized PnL and liquidation — is equivalent to the oracle price. Source and failure behaviour are covered in [oracle and price risk](/fx100-docs/how-the-system-works/oracle.md).

## The dynamic spread

Your fill price is the oracle price plus a spread. The spread can be positive or negative, so your execution price can be **better or worse** than the oracle price depending on how the components come out.

```
totalSpread = constantSpread + depthSpread + skewImpact
```

### Constant spread

A fixed baseline of **0.01%**, applied on every market regardless of size. It represents the minimum cost of accessing leverage.

### Depth spread

Grows with order size. Small orders pay approximately nothing; large orders pay proportionally more, on a convex curve.

```
depthSpread = max( exp(orderSize · k / depth) − 1 , orderSize / depth ) / 100
```

`depth` is the estimated notional required to move the asset by 1%.

### Skew impact

An adjustment based on the market's global long/short open interest imbalance.

* Trading on the **lighter side** — improving the imbalance — produces a **negative** impact. You get a better fill than the oracle mid.
* Trading on the crowded side, worsening the imbalance, costs you a premium.
* A perfectly balanced market produces zero skew impact.

The sensitivity coefficient can increase during extreme conditions, to bound vault exposure and pull the market back toward balance faster.

{% hint style="info" %}
Skew impact is the component most likely to work in your favour. If you are taking the unpopular side of a crowded market, you are being paid to do it — a better fill price, and often positive [funding](/fx100-docs/how-the-system-works/funding.md) as well.
{% endhint %}

## Execution price

```
useMax    = (open AND long) OR (close AND short)

execPrice = useMax ? ceil(  indexAsk · (1 + totalSpread) )
                   : floor( indexBid · (1 − totalSpread) )
```

Rounding always goes against the trader — standard exchange convention, and worth noting so the last decimal place in your fill is not a surprise.

## What this means in practice

**Your execution price can be better or worse than the oracle price.** The dynamic spread can be positive or negative — a large order on the crowded side pays a premium, while trading the lighter side of a skewed market can fill you better than the oracle mid. The order preview shows the estimated execution price with the spread already included; rely on it rather than the mid price on the chart.

**Your entry price is the execution price, not the oracle mid.** Everything downstream — unrealized PnL, liquidation price — is computed from it. See [PnL and closing](/fx100-docs/trading/pnl-and-closing.md).

**Large orders pay more, by design.** The depth component grows convexly with size, so a large fill pays for the price impact it puts on the vault. Splitting an order into pieces mostly just pays the constant spread on each piece and stretches your fills across a moving market. The preview shows the true cost of the order in front of you; size to that, not around it.
