The Exponential Moving Average weights recent prices more heavily than a Simple Moving Average, making it more responsive to new price action. It is widely used for trend detection, EMA crossover signals, and dynamic support/resistance levels.
Example Endpoint
/v1/options/indicators/ema/O:NFLX260402C00075000/?timespan=day&window=20&limit=10Endpoint
GET /v1/options/indicators/ema/{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: minute, hour, day, week, month, quarter, or 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 window (for example 20 with timespan=day → 20-day EMA). |
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. |
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 (EMA at that time). |
underlying | object | Only when you pass expand_underlying=true. Contains aggregates 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/ema/O:NFLX260402C00075000/?timespan=day&window=20&limit=10" \
-H "Authorization: Bearer YOUR_API_KEY"
Sample response
{
"results": {
"values": [
{ "timestamp": 1775102400000, "value": 18.49000953885931 },
{ "timestamp": 1775016000000, "value": 18.046852648212923 },
{ "timestamp": 1774929600000, "value": 17.767573979603757 }
]
},
"status": "OK",
"request_id": "cm_2de95a6462ce46928c2aabf152f813cf"
}
EMA-specific behavior
EMA gives more weight to recent bars. That makes it faster than SMA when an option price changes quickly around earnings, macro events, or expiration week. The tradeoff is that EMA can react to noisy prints in thin contracts, so it should be paired with liquidity and quote-quality checks.
| Decision | EMA guidance | Why it matters for options |
|---|---|---|
| Responsiveness | Use EMA when recent movement should dominate the signal. | Short-dated options can reprice quickly as delta and IV change. |
| Noise control | Require volume or quote evidence before using a crossover. | One sparse print can move an EMA more than an SMA. |
| Pairing | Compare EMA with SMA or MACD for confirmation. | A single fast line can overreact to microstructure noise. |
Implementation note
When a dashboard displays EMA beside option chain fields, label the source bar interval clearly. A 20 period EMA on daily bars and a 20 period EMA on five-minute bars are different signals even if the label looks similar.
Practical interpretation for options
EMA is most useful when the recent bars are more informative than older bars. That is common for contracts near earnings, index events, macro releases, or the final weeks before expiration. In those windows, the option premium can change because the underlying moved, implied volatility moved, time value compressed, or the spread widened. The EMA does not explain which cause drove the move, but it gives a responsive line that can be compared with quotes, trades, IV, and open interest.
Use EMA as an input to a richer decision, not as a standalone signal. A rising EMA on a contract with tight quotes and steady volume means something different from a rising EMA created by one isolated print. For production scanners, store the bar timestamp, window, timespan, series_type, quote age, and spread at the same time as the EMA value.
EMA quality checks
Before ranking contracts by EMA behavior, apply a few filters:
- Exclude contracts with very few bars in the lookback window.
- Require recent bid/ask evidence when the signal will drive a fill model.
- Compare the EMA slope with underlying movement and IV movement.
- Treat very short-dated contracts separately from longer-dated contracts.
These checks make the indicator easier to defend when a signal looks strong in a chart but weak in a real execution workflow.