Expected Move API - Straddle-Implied Move Per Expiry - FlashAlpha Lab API
Lab API Expected Move

Expected Move API

Straddle-implied expected move per expiry, derived from ATM implied volatility. Generalizes the earnings-only expected move to any upcoming expiry.

Works with CME futures. Pass ES=F or NQ=F and URL-encode the = as %3D - e.g. /v1/expected-move/ES%3DF. Options-on-futures are priced with Black-76 using the CME multiplier ($50/pt ES, $20/pt NQ); CME futures are Growth-tier. See the futures hub.

Endpoint

GET /v1/expected-move/{symbol}
Auth required (X-Api-Key) Rate Limited: Yes Basic+

Parameters

Name In Required Default Description
symbol path yes - Underlying ticker (case-insensitive; normalized to uppercase).
expiry query no all expiries Restrict the result to a single expiry, YYYY-MM-DD. Omit to receive every upcoming expiry.
curl -H "X-Api-Key: YOUR_API_KEY" \
  "https://lab.flashalpha.com/v1/expected-move/SPY?expiry=2026-06-20"
import requests

resp = requests.get(
    "https://lab.flashalpha.com/v1/expected-move/SPY",
    params={"expiry": "2026-06-20"},
    headers={"X-Api-Key": "YOUR_API_KEY"}
)
data = resp.json()
print(f"Expected move: {data['expected_moves'][0]['expectedMove']}")
const resp = await fetch(
  "https://lab.flashalpha.com/v1/expected-move/SPY?expiry=2026-06-20",
  { headers: { "X-Api-Key": "YOUR_API_KEY" } }
);
const data = await resp.json();
console.log("Expected move: " + data.expected_moves[0].expectedMove);

Response

{
  "symbol": "SPY",
  "underlying_price": 542.18,
  "as_of": "2026-06-05T14:32:10.123Z",
  "expected_moves": [
    {
      "expiry": "2026-06-20",
      "daysToExpiry": 15,
      "atmIv": 0.1642,
      "expectedMove": 17.6234,
      "expectedMovePct": 3.2504,
      "lowerBound": 524.5566,
      "upperBound": 559.8034
    }
  ]
}

Key Response Fields

Field Type Description
underlying_pricenumberSpot price of the underlying
as_ofstringTimestamp of the snapshot
expected_moves[]arrayOne entry per upcoming expiry, ordered by expiry
daysToExpiryintegerCalendar days to the expiry
atmIvnumber/nullATM implied vol as a decimal, or null when no ATM IV can be derived
expectedMovenumber1-σ move in price terms
expectedMovePctnumberExpected move as a percentage of spot
lowerBound / upperBoundnumberImplied range (spot ∓ expectedMove)

Errors

Status Description
400invalid_expiry - expiry query parameter is not a valid YYYY-MM-DD date
403tier_restricted - Free plan. Requires Basic or higher
404symbol_not_found - No data for the symbol. Message notes when the market is closed (9:30 AM - 4:00 PM ET)

About

Returns an ATM-IV-derived 1-sigma expected move per expiry: a model band, not an observed straddle price or execution breakeven. It generalizes the earnings-only expected move to any upcoming expiry, giving a 1-σ implied range for every expiration on the chain.

Top-level keys are snake_case (underlying_price, as_of, expected_moves) while the items inside expected_moves use camelCase. Each entry carries daysToExpiry, atmIv, expectedMove, expectedMovePct, and the lowerBound / upperBound of the implied range.

Release pending GET /v1/expected-move/{symbol}/history?start=&end=&tenor_days=30 (Alpha, SPY/QQQ) will compare reconstructed sigma bands with matured terminal moves and recorded intraperiod breaches. It returns 503 historical_source_unhealthy until the daily-series release.

Common Use Cases

  • Set targets and stops around the range - use lowerBound / upperBound as the 1-σ envelope when placing price targets and protective stops for an expiry
  • Size premium-selling structures - place iron-condor and credit-spread short strikes outside expectedMove so the structure clears the 1-σ band
  • Read the term structure of risk - compare expectedMovePct across the expected_moves[] entries to see how implied risk scales with daysToExpiry
  • Judge rich vs cheap - benchmark atmIv and expectedMovePct for an expiry against recent history to decide whether to buy or sell the move
  • Frame an event-week trade - isolate the expiry that straddles a catalyst and size around its expectedMove to bracket the implied reaction
  • Trade calendars off the term structure - exploit a front-to-back gap in expectedMovePct when near-dated implied move looks expensive relative to a later expiry

Related reading

Complementary endpoints

  • VRP - whether the implied move is rich versus realized
  • Volatility - the ATM IV term structure behind the move
  • Skew Term Structure - directional bias the symmetric move misses
  • Earnings - the earnings-only expected move this endpoint generalizes

Ready to build with FlashAlpha?

Get your free API key and start pulling live options data in 30 seconds.

No credit card required Setup in 60 seconds Secure & reliable