rate_by_expiry
Answered against 22 years of US equities and 12 years of US options data and published with the query that produced it. This result is stored as of 2026-09-25, from leaps-vs-margin-loan-financing-cost.
| expiry | parity_rate_pct | tenor_label | strike_count |
|---|---|---|---|
| Nov 2026 | 3.77 | 1.9 months | 11 |
| Dec 2026 | 5.09 | 2.8 months | 16 |
| Jan 2027 | 4.28 | 3.7 months | 15 |
| Feb 2027 | 4.21 | 4.9 months | 4 |
| Mar 2027 | 4.2 | 5.8 months | 4 |
| Apr 2027 | 4.53 | 6.7 months | 5 |
| Sep 2027 | 4.66 | 11.8 months | 6 |
| Dec 2027 | 4.5 | 14.8 months | 2 |
| Jan 2028 | 4.8 | 15.9 months | 7 |
- Rows × columns
- 9 × 4
- Computed
- Completeness
- No missing values
- Source
- US exchange, SIP and OPRA market data
- Licence
- Strasmore terms · free, no signup
What each column holds
| Column | Type | Range | Notes |
|---|---|---|---|
expiry |
text | 9 distinct values (Apr 2027, Dec 2026, Dec 2027…) | |
parity_rate_pct |
number | 3.77 to 5.09 | percent |
tenor_label |
text | 9 distinct values (1.9 months, 11.8 months, 14.8 months…) | |
strike_count |
number | 2 to 16 | US dollars |
Computed from Strasmore's warehouse of US exchange, SIP and OPRA market data. Equity prices are delayed; options greeks and implied volatility are end-of-day. This result is stored, not recomputed on load — it is exactly the numbers that were returned on , and the query below is what returned them.
Run it yourself
This is the exact query behind the result above. Change a ticker, a date or a column and run it against the warehouse — no account, no key. The no-signup tier is smaller than the one this page was computed on; a query that reaches past it comes back saying which plan runs it.
SELECT
formatDateTime(expiration_date, '%b %Y') AS expiry,
round(avg(rate_pct), 2) AS parity_rate_pct,
concat(toString(round(avg(term_days) / 30.44, 1)), ' months') AS tenor_label,
toUInt32(count()) AS strike_count
FROM
(
SELECT
expiration_date,
strike_price,
max(days_to_expiry) AS term_days,
100 * log(toFloat64(strike_price) / (avg(toFloat64(underlying_close))
- avgIf(toFloat64(option_close), leg = 'call')
+ avgIf(toFloat64(option_close), leg = 'put')))
/ (max(days_to_expiry) / 365.0) AS rate_pct
FROM
(
SELECT
expiration_date,
strike_price,
underlying_close,
option_close,
days_to_expiry,
if(lower(toString(option_type)) LIKE 'c%', 'call', 'put') AS leg
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date = (
SELECT max(date)
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
)
AND toFloat64(option_close) > 0
AND days_to_expiry BETWEEN 45 AND 600
AND toDayOfWeek(expiration_date) = 5
AND toDayOfMonth(expiration_date) BETWEEN 15 AND 21
AND toFloat64(strike_price) / toFloat64(underlying_close) BETWEEN 0.60 AND 0.90
)
GROUP BY expiration_date, strike_price
HAVING countIf(leg = 'call') > 0
AND countIf(leg = 'put') > 0
)
GROUP BY expiration_date
HAVING count() >= 2
ORDER BY expiration_date
LIMIT 12
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.