sensitivity
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-10-02, from what-determines-an-option-price.
| input_shifted | new_premium | premium_change | change_pct |
|---|---|---|---|
| Volatility +5 points | 8.25 | 1.876 | 29.45 |
| Spot +1% | 7.86 | 1.492 | 23.43 |
| Dividend yield 2% a year | 6.14 | -0.226 | -3.55 |
| One day of decay | 6.21 | -0.158 | -2.48 |
| Short rate +100 bp | 6.48 | 0.11 | 1.72 |
| Base case (quoted inputs) | 6.37 | 0 | 0 |
- Rows × columns
- 6 × 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 |
|---|---|---|---|
input_shifted |
text | 6 distinct values | |
new_premium |
number | 6.14 to 8.25 | US dollars |
premium_change |
number | -0.226 to 1.876 | US dollars |
change_pct |
number | -3.55 to 29.45 | percent |
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.
WITH
pin AS
(
SELECT
toFloat64(underlying_close) AS s,
toFloat64(strike_price) AS k,
days_to_expiry / 365.0 AS t,
implied_volatility AS v,
risk_free_rate AS r
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND startsWith(lower(toString(option_type)), 'c')
AND date = toDate('2026-09-16')
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 25 AND 45
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.03
ORDER BY volume DESC, ticker ASC
LIMIT 1
),
shocked AS
(
SELECT
sc.1 AS input_shifted,
sc.2 AS spot_multiplier,
sc.3 AS vol_add,
sc.4 AS day_add,
sc.5 AS rate_add,
sc.6 AS div_yield,
s,
k,
t,
v,
r
FROM pin
ARRAY JOIN
[
('Base case (quoted inputs)', 1.0, 0.0, 0.0, 0.0, 0.0),
('Spot +1%', 1.01, 0.0, 0.0, 0.0, 0.0),
('Volatility +5 points', 1.0, 0.05, 0.0, 0.0, 0.0),
('One day of decay', 1.0, 0.0, -1.0, 0.0, 0.0),
('Short rate +100 bp', 1.0, 0.0, 0.0, 0.01, 0.0),
('Dividend yield 2% a year', 1.0, 0.0, 0.0, 0.0, 0.02)
] AS sc
),
priced AS
(
SELECT
input_shifted,
(log(s / k) + (r + (v * v) / 2) * t) / (v * sqrt(t)) AS d1_base,
d1_base - v * sqrt(t) AS d2_base,
s * 0.5 * (1 + erf(d1_base / sqrt(2))) - k * exp(-r * t) * 0.5 * (1 + erf(d2_base / sqrt(2))) AS base_premium,
s * spot_multiplier AS s_new,
v + vol_add AS v_new,
t + day_add / 365.0 AS t_new,
r + rate_add AS r_new,
(log(s_new / k) + (r_new - div_yield + (v_new * v_new) / 2) * t_new) / (v_new * sqrt(t_new)) AS d1_new,
d1_new - v_new * sqrt(t_new) AS d2_new,
s_new * exp(-div_yield * t_new) * 0.5 * (1 + erf(d1_new / sqrt(2))) - k * exp(-r_new * t_new) * 0.5 * (1 + erf(d2_new / sqrt(2))) AS new_premium_exact
FROM shocked
)
SELECT
input_shifted,
round(new_premium_exact, 2) AS new_premium,
round(new_premium_exact - base_premium, 3) AS premium_change,
round(100 * (new_premium_exact - base_premium) / base_premium, 2) AS change_pct
FROM priced
ORDER BY abs(new_premium_exact - base_premium) DESC
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.