The Simple Moving Average smooths option (aggregate) prices over a fixed number of periods, useful for trend context, crossover ideas, and level-style analysis.
Example Endpoint
/v1/options/indicators/sma/O:NFLX260402C00075000/?timespan=day&window=20&limit=10Endpoint
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 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
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
{
"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
timespanmatches the holding period of the strategy. - The bar field used by
series_typeis 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.