STRASMORE/EXPLORE 3,293 QUERIES

monthly_2026

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-24, from us-options-expiration-dates-beijing-time.

as of series 12×9read in context →
monthly_2026 — 12 rows by 9 columns, computed from US exchange, SIP and OPRA data.
expiration_dateexpiry_labelweekdayruleshifted_to_thursdayet_cutoffus_clockbeijing_cutoffutc8_clock
2026-01-161 月 16 日周五第三个周五016:00EST 冬令时01-17 周六 05:005
2026-02-202 月 20 日周五第三个周五016:00EST 冬令时02-21 周六 05:005
2026-03-203 月 20 日周五第三个周五016:00EDT 夏令时03-21 周六 04:004
2026-04-174 月 17 日周五第三个周五016:00EDT 夏令时04-18 周六 04:004
2026-05-155 月 15 日周五第三个周五016:00EDT 夏令时05-16 周六 04:004
2026-06-186 月 18 日周四周五休市,提前至周四116:00EDT 夏令时06-19 周五 04:004
2026-07-177 月 17 日周五第三个周五016:00EDT 夏令时07-18 周六 04:004
2026-08-218 月 21 日周五第三个周五016:00EDT 夏令时08-22 周六 04:004
2026-09-189 月 18 日周五第三个周五016:00EDT 夏令时09-19 周六 04:004
2026-10-1610 月 16 日周五第三个周五016:00EDT 夏令时10-17 周六 04:004
2026-11-2011 月 20 日周五第三个周五016:00EST 冬令时11-21 周六 05:005
2026-12-1812 月 18 日周五第三个周五016:00EST 冬令时12-19 周六 05:005
Rows × columns
12 × 9
Period covered
to
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 monthly_2026, derived from the stored result.
ColumnTypeRangeNotes
expiration_date date 2026-01-16 to 2026-12-18
expiry_label text 12 distinct values (1 月 16 日, 10 月 16 日, 11 月 20 日…)
weekday text 2 distinct values (周五, 周四)
rule text 2 distinct values (周五休市,提前至周四, 第三个周五)
shifted_to_thursday number 0 to 1
et_cutoff text 1 distinct value (16:00)
us_clock text 2 distinct values (EDT 夏令时, EST 冬令时)
beijing_cutoff text 12 distinct values
utc8_clock number 4 to 5

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
    toString(expiry)                                                        AS expiration_date,
    concat(toString(toMonth(expiry)), ' 月 ', toString(toDayOfMonth(expiry)), ' 日') AS expiry_label,
    transform(toDayOfWeek(expiry), [4, 5], ['周四', '周五'], '其他')         AS weekday,
    if(expiry = third_friday, '第三个周五', '周五休市,提前至周四')            AS rule,
    if(expiry = third_friday, 0, 1)                                         AS shifted_to_thursday,
    formatDateTime(cutoff_et, '%H:%i', 'America/New_York')                  AS et_cutoff,
    if(timeZoneOffset(cutoff_et) = -14400, 'EDT 夏令时', 'EST 冬令时')        AS us_clock,
    concat(formatDateTime(cutoff_et, '%m-%d', 'Asia/Shanghai'), ' ',
           transform(toDayOfWeek(toTimeZone(cutoff_et, 'Asia/Shanghai')), [5, 6], ['周五', '周六'], '其他'), ' ',
           formatDateTime(cutoff_et, '%H:%i', 'Asia/Shanghai'))             AS beijing_cutoff,
    toHour(toTimeZone(cutoff_et, 'Asia/Shanghai'))                          AS utc8_clock
FROM
(
    SELECT
        cal.third_friday                                                    AS third_friday,
        if(cal.third_friday IN (SELECT date FROM global_markets.stocks_market_holidays WHERE status = 'closed')
           OR (cal.third_friday < today() - 3 AND ifNull(t.bars, 0) = 0),
           cal.third_friday - 1,
           cal.third_friday)                                                AS expiry,
        toDateTime(concat(toString(expiry), ' 16:00:00'), 'America/New_York') AS cutoff_et
    FROM
    (
        SELECT addDays(month_start, ((5 - toDayOfWeek(month_start) + 7) % 7) + 14) AS third_friday
        FROM (SELECT addMonths(toDate('2026-01-01'), arrayJoin(range(12))) AS month_start)
    ) AS cal
    LEFT JOIN
    (
        SELECT
            toDate(toTimeZone(window_start, 'America/New_York')) AS d,
            count()                                              AS bars
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY'
          AND window_start >= toDate('2026-01-01')
          AND window_start <  toDate('2027-01-02')
          AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
               + toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
          AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
               + toMinute(toTimeZone(window_start, 'America/New_York'))) < 960
        GROUP BY d
    ) AS t ON t.d = cal.third_friday
)
ORDER BY expiry
⌘/Ctrl + Enter

在你的 AI 助手中使用这些数据

打开即可查询,已带上本页数据。免费,无需账号。