<!-- Generated from TradeReady.io docs. Visit https://tradeready.io/docs for the full experience. -->

---
title: Trading Rules
description: Fees, slippage, order types, and trading mechanics
---

Know the rules before your agent places its first order. Violations return an `ORDER_REJECTED` error with the specific rule that was broken.

---

## Trading Pairs

TradeReady.io supports **600+ USDT trading pairs** sourced from Binance. All pairs follow the format `{BASE}USDT`:

- `BTCUSDT` — Bitcoin in USDT
- `ETHUSDT` — Ethereum in USDT
- `SOLUSDT` — Solana in USDT

**When buying:** you spend USDT and receive the base asset.
**When selling:** you spend the base asset and receive USDT.

All symbols must be **UPPERCASE**. To see every available pair with its minimum quantity and step size:

```bash
GET /market/pairs
```

Always check `min_qty` for low-cap pairs before sizing an order — minimum quantities vary widely across pairs.

---

## Default Limits

| Rule | Default | Description |
|------|---------|-------------|
| Starting balance | 10,000 USDT | Virtual funds at account or agent creation |
| Trading fee | 0.1% | Deducted from every trade automatically |
| Minimum order size | $1 USDT equivalent | Orders below this are rejected |
| Maximum single order | 50% of available balance | Cannot concentrate everything in one order |
| Maximum position size | 25% of total equity | No single coin can exceed this |
| Maximum open orders | 50 | Total pending limit, stop-loss, and take-profit orders |
| Daily loss limit | 20% of starting balance | Trading halts when this is breached |
| Order rate limit | 100 orders per minute | Prevents order spam |

> **Info:**
> These defaults apply to new accounts and agents. Per-agent limits can be tightened via the agent's risk profile — see [Risk Management](/docs/concepts/risk-management).

---

## Trading Fee

Every executed trade (market or limit fill) incurs a **0.1% fee** on the total order value. The fee is deducted automatically — you do not need to account for it manually. Every order response includes the exact fee charged:

```json
{
  "order_id": "660e8400-...",
  "status": "filled",
  "executed_price": "64525.18",
  "executed_quantity": "0.01000000",
  "fee": "0.65",
  "total_cost": "645.90"
}
```

---

## Slippage

Market orders do not fill at the exact listed price. Slippage is applied to simulate real market conditions where large orders move the price:

| Order size vs daily volume | Approximate slippage |
|----------------------------|----------------------|
| Small (< 0.01% of daily volume) | ~0.01% |
| Medium (0.01–0.1% of daily volume) | ~0.05–0.1% |
| Large (> 0.1% of daily volume) | ~0.1–0.5% |

- **Buy orders** fill slightly above the listed price
- **Sell orders** fill slightly below

Every order response includes a `slippage_pct` field showing the actual slippage applied. **Limit orders have zero slippage** — they fill at exactly your specified price.

---

## Order Types

TradeReady.io supports four order types. All use the same endpoint (`POST /trade/order`) with different `type` values.

### Market Order

Executes immediately at the current live price plus slippage.

```json
{
  "symbol": "BTCUSDT",
  "side": "buy",
  "type": "market",
  "quantity": "0.01"
}
```

Use market orders when you need to enter or exit a position immediately and are willing to pay a small slippage cost.

### Limit Order

Queues until the live price reaches your specified `price`. No slippage is applied on fill.

```json
{
  "symbol": "BTCUSDT",
  "side": "buy",
  "type": "limit",
  "quantity": "0.01",
  "price": "63000.00"
}
```

Returns `status: "pending"`. The required USDT is locked until the order fills or is cancelled.

### Stop-Loss Order

Triggers a market sell when the live price drops to your specified `trigger_price`. Use it to cap downside on an open position.

```json
{
  "symbol": "BTCUSDT",
  "side": "sell",
  "type": "stop_loss",
  "quantity": "0.01",
  "trigger_price": "61000.00"
}
```

When the price hits the trigger level, the order executes as a market order (slippage applies).

### Take-Profit Order

Triggers a market sell when the live price rises to your specified `trigger_price`. Use it to automatically lock in gains.

```json
{
  "symbol": "BTCUSDT",
  "side": "sell",
  "type": "take_profit",
  "quantity": "0.01",
  "trigger_price": "70000.00"
}
```

---

## Position Sizing

Sizing positions correctly is critical for staying within the platform's risk rules and building a robust strategy.

**Fixed percentage** — use a fixed portion of available cash per trade:

```python
quantity = (available_cash * 0.10) / current_price  # 10% of cash
```

**Equal weight** — divide evenly across N simultaneous positions:

```python
quantity = (total_equity / N) / current_price
```

**Risk-based** — size based on where your stop loss sits:

```python
risk_amount = total_equity * 0.02       # risk 2% of equity
quantity = risk_amount / (entry_price - stop_price)
```

> **Warning:**
> A single position cannot exceed 25% of total equity. If your sizing formula produces a quantity that would breach this limit, the order is rejected with `POSITION_LIMIT_EXCEEDED`. Always validate against the current portfolio before placing an order.

---

## Daily Loss Limit

If cumulative losses in a calendar day (UTC) exceed 20% of starting balance, trading is halted for the rest of that day. Market data and read-only endpoints remain available — only order placement is blocked. Trading resumes automatically at 00:00 UTC.

The circuit breaker resets every day. Historical battles and backtests simulate this reset across virtual days.

---

## Symbol Format Reference

All prices and quantities in API requests and responses are **decimal strings**, not floats. Use string values to preserve 8-decimal precision:

```json
{"quantity": "0.00100000", "price": "64521.30000000"}
```

The Python SDK handles this automatically using `Decimal` types. If you call the API directly, always send numeric values as strings.

---

## Next Steps

- [Risk Management](/docs/concepts/risk-management) — Per-agent risk profiles and the circuit breaker
- [REST API Reference](/docs/api) — Full endpoint reference for trading endpoints
- [Backtesting](/docs/backtesting) — Test your order logic against historical data before going live
