STRASMORE/EXPLORE 2,433 QUERIES

rueckblick

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-20, from itm-vs-otm-leaps.

as of table 3×14read in context →
rueckblick — 3 rows by 14 columns, computed from US exchange, SIP and OPRA data.
strike_typebasispreisverfallspy_startspy_endespy_veraenderung_pctpraemie_startpraemie_endepraemie_veraenderung_pctdelta_startdelta_endezeitwert_anteil_start_pctzeitwert_anteil_ende_pctstichtag_ende
ITM (Delta ~0,80)61017.12.2027657.25757.528615.3119.75188.557.40.80.8960.521.710.09.2026
ATM (Delta ~0,50)73017.12.2027657.25764.4816.350.17105.01109.30.520.7110067.211.09.2026
OTM (Delta ~0,30)80517.12.2027657.25764.4816.321.455.74160.50.310.5310010011.09.2026
Rows × columns
3 × 14
Computed
Completeness
No missing values
Source
US exchange, SIP and OPRA market data
Licence
Strasmore terms · free, no signup
Formats
JSON · CSV · the SQL below

What each column holds

Column definitions for rueckblick, derived from the stored result.
ColumnTypeRangeNotes
strike_type text 3 distinct values
basispreis number 610 to 805
verfall text 1 distinct value (17.12.2027)
spy_start number every row is 657.25
spy_ende number 757.5286 to 764.48
spy_veraenderung_pct number 15.3 to 16.3 percent
praemie_start number 21.4 to 119.75
praemie_ende number 55.74 to 188.5
praemie_veraenderung_pct number 57.4 to 160.5 percent
delta_start number 0.31 to 0.8
delta_ende number 0.53 to 0.89
zeitwert_anteil_start_pct number 60.5 to 100 percent
zeitwert_anteil_ende_pct number 21.7 to 100 percent
stichtag_ende text 2 distinct values (10.09.2026, 11.09.2026)

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
    a.strike_type                                                        AS strike_type,
    a.basispreis                                                         AS basispreis,
    formatDateTime(a.verfall, '%d.%m.%Y')                                AS verfall,
    a.spy_start                                                          AS spy_start,
    b.spy_ende                                                           AS spy_ende,
    round((b.spy_ende / a.spy_start - 1) * 100, 1)                       AS spy_veraenderung_pct,
    a.praemie_start                                                      AS praemie_start,
    b.praemie_ende                                                       AS praemie_ende,
    round((b.praemie_ende / a.praemie_start - 1) * 100, 1)               AS praemie_veraenderung_pct,
    round(a.delta_start, 2)                                              AS delta_start,
    round(b.delta_ende, 2)                                               AS delta_ende,
    round(a.zeitwert_anteil_start, 1)                                    AS zeitwert_anteil_start_pct,
    round((b.praemie_ende - greatest(b.spy_ende - a.basispreis, 0)) / b.praemie_ende * 100, 1) AS zeitwert_anteil_ende_pct,
    formatDateTime(b.end_datum, '%d.%m.%Y')                              AS stichtag_ende
FROM
(
    SELECT
        ['ITM (Delta ~0,80)', 'ATM (Delta ~0,50)', 'OTM (Delta ~0,30)'][i] AS strike_type,
        [0.80, 0.50, 0.30][i]                                              AS ziel_delta,
        argMin(tuple(ticker, toFloat64(strike_price), toFloat64(option_close), toFloat64(underlying_close),
                     toFloat64(delta), expiration_date),
               abs(toFloat64(delta) - [0.80, 0.50, 0.30][i]))              AS best,
        tupleElement(best, 1)                                              AS kontrakt,
        tupleElement(best, 2)                                              AS basispreis,
        tupleElement(best, 3)                                              AS praemie_start,
        tupleElement(best, 4)                                              AS spy_start,
        tupleElement(best, 5)                                              AS delta_start,
        tupleElement(best, 6)                                              AS verfall,
        (praemie_start - greatest(spy_start - basispreis, 0)) / praemie_start * 100 AS zeitwert_anteil_start
    FROM global_markets.options_greeks
    ARRAY JOIN [1, 2, 3] AS i
    WHERE underlying_symbol = 'SPY'
      AND option_type IN ('call', 'C', 'CALL')
      AND date = '2025-09-12'
      AND iv_converged = 1
      AND volume > 0
      AND option_close > 0
      AND expiration_date =
      (
          SELECT max(expiration_date)
          FROM
          (
              SELECT expiration_date
              FROM global_markets.options_greeks
              WHERE underlying_symbol = 'SPY'
                AND option_type IN ('call', 'C', 'CALL')
                AND date = '2025-09-12'
                AND iv_converged = 1
                AND volume > 0
                AND days_to_expiry >= 365
              GROUP BY expiration_date
              HAVING count() >= 15
          )
      )
    GROUP BY i
) AS a
INNER JOIN
(
    SELECT
        ticker,
        argMax(toFloat64(option_close), date)     AS praemie_ende,
        argMax(toFloat64(underlying_close), date) AS spy_ende,
        argMax(toFloat64(delta), date)            AS delta_ende,
        max(date)                                 AS end_datum
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'SPY'
      AND option_type IN ('call', 'C', 'CALL')
      AND date BETWEEN '2026-09-01' AND '2026-09-11'
      AND expiration_date >= '2026-12-01'
      AND option_close > 0
    GROUP BY ticker
) AS b ON b.ticker = a.kontrakt
ORDER BY a.ziel_delta DESC
⌘/Ctrl + Enter