# Simple Moving Average (SMA)

The **Simple Moving Average** smooths option (aggregate) prices over a fixed number of periods, useful for trend context, crossover ideas, and level-style analysis.

<div data-try-url="/v1/options/indicators/sma/O:NFLX260402C00075000/?timespan=day&window=20&limit=10"></div>

## Endpoint

```
GET /v1/options/indicators/sma/{ticker}
```

### Path parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `ticker` | string | Yes | Full options ticker (for example `O:NFLX260402C00075000`). |

### Query parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `timestamp` | string | No | Anchor time: `YYYY-MM-DD` or **millisecond** Unix timestamp. |
| `timestamp.gte` | string | No | Range lower bound (date or ms timestamp). |
| `timestamp.gt` | string | No | Strictly greater. |
| `timestamp.lte` | string | No | Range upper bound. |
| `timestamp.lt` | string | No | Strictly less. |
| `timespan` | string | No | Aggregate bar width (for example `minute`, `hour`, `day`, `week`, `month`, `quarter`, `year`). |
| `adjusted` | boolean | No | Use split-adjusted aggregates when `true` (default). `false` uses non-adjusted bars. |
| `window` | integer | No | Number of bars in the moving average (e.g. `20` with `timespan=day` → 20-day SMA). |
| `series_type` | string | No | Which aggregate field drives the calculation (commonly `close`). |
| `expand_underlying` | boolean | No | When `true`, `results.underlying` includes an `aggregates` array and a `url` for the matching [aggregates](/docs/aggregates) range. When `false` or omitted, `underlying` is omitted. See **Response**. |
| `order` | string | No | Sort order of points by timestamp (`asc` / `desc`). |
| `limit` | integer | No | Max points returned. Default **10**, maximum **1000**. |
| `page` | string | No | Pagination continuation: use the URL in `next_url`, or pass the `page` query value from that URL here. |

### Response

| Field | Type | Description |
| --- | --- | --- |
| `status` | string | Outcome (for example `OK`). |
| `request_id` | string | Unique identifier for this request, assigned by CuteMarkets. |
| `results` | object | Indicator payload. |
| `next_url` | string | When more values exist, full URL for the next page. |

Use `limit` and timestamp filters per page; follow `next_url` when present.

`results` contains:

| Field | Type | Description |
| --- | --- | --- |
| `values` | array | Objects with `timestamp` (ms) and `value` (SMA at that time). |
| `underlying` | object | **Only when** you pass `expand_underlying=true`. Contains `aggregates` (OHLC bars used in the calculation) and `url`, an absolute URL to the same contract’s aggregates over the inferred date range (for example `https://api.cutemarkets.com/v1/options/aggs/{ticker}/1/day/{from}/{to}/`). |

### Example request

```bash
curl \
  "https://api.cutemarkets.com/v1/options/indicators/sma/O:NFLX260402C00075000/?timespan=day&window=20&limit=10" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

### Sample response

```json
{
  "results": {
    "values": [
      { "timestamp": 1775016000000, "value": 19.801499999999997 },
      { "timestamp": 1774929600000, "value": 20.021499999999996 },
      { "timestamp": 1774843200000, "value": 20.137499999999996 }
    ]
  },
  "status": "OK",
  "request_id": "cm_54709e440a0a40f6988c4cede291c443"
}
```

## SMA-specific behavior

SMA gives every bar in the window equal weight. That makes it slower than EMA but easier to reason about when the goal is a stable baseline. For option contracts, SMA is most useful after the contract has enough traded bars to make the average meaningful.

| Decision | SMA guidance | Why it matters for options |
| --- | --- | --- |
| Window length | Use shorter windows for short-dated contracts and longer windows for liquid, longer-lived contracts. | A 20-day window can be meaningless for a newly listed weekly contract. |
| Series type | Start with `close`, then test `vwap` when trade quality matters. | Sparse contracts can have noisy closes. |
| Contract filter | Check volume, open interest, and bid/ask width before trusting the line. | A smooth SMA on an illiquid contract can still be untradeable. |

## Implementation note

If a scanner compares option SMA values across contracts, store the exact `ticker`, `timespan`, `window`, `series_type`, and `adjusted` flag with the signal. Without those parameters, a later investigation cannot tell whether two contracts were measured on the same basis.

## Practical interpretation for options

SMA is best treated as a stable baseline. Because every bar in the window receives the same weight, the line changes only when new bars enter the window and old bars leave it. That makes SMA slower than EMA, but it also makes the result easier to audit when a research notebook needs to explain why a contract was selected.

For option contracts, the main risk is incomplete history. A newly listed weekly option may not have enough observations for a long window, while a longer-dated monthly contract may have enough bars but limited current liquidity. A scanner should report whether the full window was available and should avoid comparing a full-window SMA against a partial-window SMA without labeling the difference.

## SMA quality checks

Before using SMA in a model, verify:

- The contract has enough historical bars to fill the requested window.
- The selected `timespan` matches the holding period of the strategy.
- The bar field used by `series_type` is appropriate for the question.
- The current quote market is liquid enough for the signal to be actionable.

Those checks keep SMA from becoming a smooth-looking number that hides missing observations, stale closes, or contracts that cannot be traded at a reasonable spread.
