1. API
  2. Recipes
  3. Earnings-week straddles

Recipe, one Python file

Earnings-week straddles

This week's reporters with the market's implied move next to what they usually do. Reads the next seven days of the earnings calendar, keeps the largest names, and prints the straddle-implied move beside the historical average move and the ratio between them. A ratio well above one says the market is paying up for the event; well below one says the event is cheap against its own history.

2Endpoints it calls
PremiumPlan and above, from $55/mo
2026-09-08Output captured

What it prints

The output,
as captured.

Run against the live API on 2026-09-08 with a real token. Premium sellers and buyers deciding which earnings to take a position in.

python3 earnings_week_straddles.pystdout, 2026-09-08
Earnings 2026-09-08 to 2026-09-15, 12 reporters, largest 8 shown

              date  timing  implied %  hist avg %  ratio  straddle move %
CPRT    2026-09-10     AMC       4.06        4.08   1.00             7.43
CNM     2026-09-09     TBD       7.16        8.44   0.85             9.95
KR      2026-09-11     BMO       3.87        4.72   0.82             5.55
CHWY    2026-09-09     BMO       7.26        8.94   0.81            11.20
CASY    2026-09-08     TBD       5.50        7.38   0.75             8.81
ADBE    2026-09-10     AMC       5.74        8.07   0.71             8.08
ORCL    2026-09-10     AMC       8.02       12.50   0.64            11.52
GME     2026-09-08     AMC       5.03        9.73   0.52             5.56

ratio = implied move over the average of past reported moves; above 1.2 the event is rich, below 0.8 cheap.

The script

One file,
requests and nothing else.

Set APEXVOL_API_TOKEN from Account, then API Access, and run it. The token is the only configuration.

earnings_week_straddles.pyPython 3.10+, pip install requests
import os
import sys

import requests

# One token, any paid or trial plan: Account, then API Access.
TOKEN = os.environ.get("APEXVOL_API_TOKEN") or sys.exit("set APEXVOL_API_TOKEN")
BASE = os.environ.get("APEXVOL_API_URL", "https://apexvol.com") + "/api/mcp/data"
S = requests.Session()
S.headers["Authorization"] = f"Bearer {TOKEN}"


def get(path, **params):
    r = S.get(BASE + path, params=params, timeout=90)
    body = r.json()
    if not body.get("success"):
        sys.exit(f"{path}: HTTP {r.status_code}: {body.get('error')}")
    return body["data"]


cal = get("/earnings-calendar", days_ahead=7)
rows = [r for r in cal["earnings"] if r.get("implied_move") and r.get("hist_avg_move")]
rows.sort(key=lambda r: -(r.get("market_cap") or 0))
rows = rows[:8]
if not rows:
    sys.exit("no priced reporters in the next seven days")

moves = get("/batch/expected-move", tickers=",".join(r["symbol"] for r in rows))
print(f"Earnings {cal['from_date']} to {cal['to_date']}, {cal['total_count']} reporters, largest {len(rows)} shown")
print()
print(f"{'':7}{'date':>11}{'timing':>8}{'implied %':>11}{'hist avg %':>12}{'ratio':>7}{'straddle move %':>17}")
for r in sorted(rows, key=lambda r: -(r.get("move_ratio") or 0)):
    em = moves["results"].get(r["symbol"]) or {}
    live = f"{em['expected_move_percent']:.2f}" if em else "n/a"
    print(f"{r['symbol']:7}{r['date']:>11}{(r.get('timing') or '?'):>8}{r['implied_move']:>11.2f}"
          f"{r['hist_avg_move']:>12.2f}{r['move_ratio']:>7.2f}{live:>17}")
print()
print("ratio = implied move over the average of past reported moves; above 1.2 the event is rich, below 0.8 cheap.")

How it works

1. Read the calendar
GET /earnings-calendar?days_ahead=7 carries implied_move, hist_avg_move and move_ratio per reporter.
2. Price the straddles
GET /batch/expected-move?tickers=... adds the live one standard deviation move to the next expiration.
3. Rank by ratio
Sort by implied over historical; the extremes at either end are where a view pays.

Schedule it

cron
0 12 * * 1 APEXVOL_API_TOKEN=avmcp_... python3 earnings_week_straddles.py
Monday 08:00 New York. Times in the crontab are UTC.
Claude Code
/loop 1d python3 earnings_week_straddles.py
Runs it on an interval inside a session, and the assistant reads the output each time.

The same job, no code

Ask an assistant
with the MCP server.

Connect the ApexVol MCP server and this recipe is one prompt. It ships in the client's prompt picker as recipe-earnings-week-straddles.

In Claude, Cursor or ChatGPTthrough the MCP server
You

Which large caps report earnings this week, and how does each one's implied move compare with its usual move?

The assistant calls get_earnings_calendar, calculate_expected_move and answers from the same JSON the script prints.

Set it up in:

Under the hood

2 endpoints,
one token.

Each card opens the endpoint's page: parameters and bounds, every field, a real response and a console that runs it on your ticker.

Access

Plan
Premium and above. Every endpoint follows the tier of its web feature; the chips on the cards say which.
Cost
Measured in upstream data requests against the monthly allowance, not calls; a batch call counts one rate-limit unit and one data request per symbol. GET /api/mcp/data/me/usage shows the meter.
Reference
The rate-limits guide, the conventions and the error model. The whole API as one Markdown file: /llms-full.txt.

Included with
every paid plan.

From $55 a month. Create a token under Account, then API Access, and this script runs as it is.

Real market data, not a sandbox. See it live on AAPL.

7 days free, cancel anytime Card required · no charge for 7 days
Start trial →