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.
Use EMA with Aggregates, Options Chain API, Historical Options Data API, Backtesting Data Quality Checklist, and Stock Aggregates and Indicators.
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.
EMA calculations should be sourced from Aggregates, compared with Stock Aggregates and Indicators, and logged in the Backtesting Data Model. Keep OHLCV, lookback window, smoothing factor, warm-up period, timestamp alignment, and adjusted aggregate policy consistent across research and production.
EMA implementation notes
EMA output depends on source bars, timespan, adjusted setting, window length, warm-up history, and timestamp alignment. Store those parameters with every EMA value. If a screen later joins EMA state into Option Chain or Contracts, pass the stock signal timestamp beside the option request so the option leg can be audited against the underlying signal that created it.
EMA reacts faster than SMA, which makes it useful for watchlists and opening-range context but also easier to overfit. A product screen should label incomplete warm-up windows, split-adjusted bars, extended-hours policy, and stale snapshot state. For cross-product workflows, pair this page with Stock and Options Data Join Workflow, Stock Aggregates and Indicators, and Market Hours, Timestamps, and Timezones.
For backtests, avoid calculating an EMA from bars that were not complete at the signal timestamp. A 5-minute bar can update several times before close, while an indicator value based on the completed bar belongs after the interval ends. Store bar_end, calculation_time, and signal_time separately when the strategy enters options after an EMA cross or pullback.