トリプルウィッチングとは?取引高と変動性
トリプルウィッチングは、指数先物、指数オプション、株式オプションが同時に満期を迎える四半期の取引日です。実際の約定データで取引高と変動性を検証します。
トリプルウィッチングとは、3月、6月、9月、12月の第3金曜日に行われる四半期ごとの取引日です。この日に株価指数先物、指数オプション、個別株オプションが同時に満期を迎えます。年4回、満期を迎えるデリバティブが一斉に決済、手仕舞い、またはロールされます。指数ファンドも予定されたリバランスを実施するため、同じ引け値に注文が集中します。
以下では、実際の約定データに基づき、直近8回のトリプルウィッチングを検証します。取引高、ボラティリティ、引けのオークション、行使価格を取り上げます。日程については、2026年6月の期日を木曜日に変更したJuneteenthの影響を含む四半期ごとの全満期日を、2026年のトリプルウィッチング日程で確認できます。
トリプルウィッチングの日に何が満期を迎えるのか
四半期ごとの期日には、三種類の契約が重なる。株価指数先物(およびその先物を対象とするオプション)、指数オプション、個別株オプションだ。個別株オプションは毎月第三金曜日に満期を迎える。四半期の期日が異なるのは、これに指数先物と指数オプションの満期サイクルが重なるためである。
二つの決済方式によって、この日は前半と後半に分かれる。多くの指数先物と指数オプションはAM決済で、前日の午後に取引を終える。その後、構成銘柄の寄り付きの約定価格から算出した価格で決済されるため、その日の朝の寄り付きオークションに注文フローが集中する。個別株オプションとETFオプションはPM決済で、午後4時の取引終了まで存続する。
この日の第三の要素は、デリバティブではない。主要な指数ファミリーは、構成銘柄の変更、採用、除外、株式数の更新を同じ四半期の期日に設定しており、インデックスファンドは取引終了時にこれらの変更に伴う売買を行う。リバランスに伴う注文フローと満期を迎えるポジションが、同じ午後の引けのオークションで交錯する。
なぜ「witching」と呼ばれるのか
この名称は、奇妙な出来事が起こるとされた民間伝承上の「魔女の刻(witching hour)」に由来します。1980年代には、単一株オプション(1973年から取引所に上場)に、指数先物(S&P 500先物は1982年上場)と指数オプションが加わり、四半期ごとの共通の満期日程で取引されるようになりました。こうした日の取引終了前の最後の1時間は、やがて「triple witching hour」と呼ばれるほど有名になりました。
その後、取引所は主要な指数契約の決済を終値ではなく寄り付きの約定価格に変更しました。これにより、最後の1時間の波乱は大きく抑えられました。「quadruple witching」は、2000年代初頭に米国で単一株先物が上場された際に登場しました。同商品を扱っていた取引所は2020年に閉鎖され、現在ではこの二つの用語が同じ四つの日付を指しています。
トリプルウィッチングの日程:2024~2027年
ルールは単純です。3月、6月、9月、12月の第3金曜日です。この金曜日が取引所の休場日に当たる場合、満期日は直前の取引日に繰り上がります。週次・日次サイクルを含む全日程は、オプションの満期日をご覧ください。
- 2024年: 3月15日、6月21日、9月20日、12月20日
- 2025年: 3月21日、6月20日、9月19日、12月19日
- 2026年: 3月20日、6月18日(米国取引所が休場となるJuneteenthの祝日に当たる6月19日(金)から前倒し)、9月18日、12月18日
- 2027年: 3月19日、6月18日、9月17日、12月17日
次回は2026年9月18日(金)です。
ウィッチング・セッションの売買高は、実際どれほど大きいのか
2024年末以降の各四半期ウィッチング・セッションについて、同じ月の「その他」のセッションにおける株式売買高の中央値と比較しています。最後の列は、「その月で最も売買高が多い日」という主張を検証する数値です。その月で売買高が最大だったウィッチング以外のセッションを差し引いています。正の数値はウィッチング・セッションがその月の最大を記録したことを、負の数値は別のセッションに上回られたことを示します。各セッションの売買高は、引けのオークションを含む一日合計です。このデータの一分足には、オークションで成立した取引が含まれていないためです。
| ウィッチング・セッション | ウィッチング株式 b | 他の日の中央値 b | 中央値の倍率 | 次に多い値との差 |
|---|---|---|---|---|
| 2024-09-20 | 17.9 | 9.7 | 1.86 | 6.71 |
| 2024-12-20 | 20.7 | 11.1 | 1.86 | 5.13 |
| 2025-03-21 | 19.8 | 13.7 | 1.44 | 2.37 |
| 2025-06-20 | 18.4 | 14.2 | 1.3 | -2.98 |
| 2025-09-19 | 25.6 | 15.7 | 1.63 | 7.8 |
| 2025-12-19 | 24.6 | 13.8 | 1.79 | 8.46 |
| 2026-03-20 | 26.8 | 18.2 | 1.48 | 6.39 |
| 2026-06-18 | 31.6 | 19.5 | 1.62 | 3.62 |
各数値の背後にある正確なSQL
WITH daily AS (
SELECT date AS day,
sum(toFloat64(volume)) / 1e9 AS shares_b
FROM global_markets.stocks_daily_aggs
WHERE date >= '2024-09-01'
AND date < '2026-07-01'
AND toMonth(date) IN (3, 6, 9, 12)
GROUP BY day
),
witching AS (
SELECT toStartOfMonth(day) AS m,
maxIf(day, day <= addDays(toStartOfMonth(day),
((5 - toDayOfWeek(toStartOfMonth(day)) + 7) % 7) + 14)) AS witching_day
FROM daily
GROUP BY m
)
SELECT toString(w.witching_day) AS witching_session,
round(anyIf(d.shares_b, d.day = w.witching_day), 1) AS witching_shares_b,
round(quantileDeterministicIf(0.5)(d.shares_b, cityHash64(toString(d.day)), d.day != w.witching_day), 1) AS other_days_median_b,
round(anyIf(d.shares_b, d.day = w.witching_day)
/ quantileDeterministicIf(0.5)(d.shares_b, cityHash64(toString(d.day)), d.day != w.witching_day), 2) AS times_median,
round(anyIf(d.shares_b, d.day = w.witching_day) - maxIf(d.shares_b, d.day != w.witching_day), 2) AS gap_to_next_heaviest
FROM daily AS d
INNER JOIN witching AS w ON toStartOfMonth(d.day) = w.m
GROUP BY w.witching_day
HAVING countIf(d.day != w.witching_day) > 0
ORDER BY w.witching_day売買高の上乗せは実在し、再現性もあります。直近のウィッチング・セッションでは、2026-06-18に31.6十億株を取引しました。同月のその他のセッションの中央値は19.5十億株で、通常の一日の1.62倍です。また、6月で次に売買高が多かったセッションを3.62十億株上回りました。最初の行の2024-09-20も、同様に1.86倍を記録しています。
ただし、最も忙しい日になるとは限りません。表が示すとおりです。2025-06-20は同月の中央値の1.3倍を取引しましたが、同じ月の別のセッションを下回って終えました。最後の列が負の数値になっているのはそのためです。最後の列には正負の両方が現れます。ウィッチングはその月の最大売買高を記録する有力な候補ですが、確実ではありません。指数のリバランス、四半期末の資金フロー、マクロ経済指標の発表によって、ウィッチングを上回るセッションが生じることもあります。
2026年6月のメジャーSQが木曜日になった理由
2026年6月の第3金曜日は、米国取引所が休場となるジューンティーンスの6月19日でした。そのため、四半期限月の一連の契約はすべて6月18日木曜日に満期を迎えました。オプションの売買データから、未決済ポジションがどこに集中していたかが分かります。6月1日から18日までに取引された契約を、契約に設定された満期日ごとに集計しています。
| 満期 | 契約 mm |
|---|---|
| 2026-06-18 | 193.7 |
| 2026-06-12 | 113.1 |
| 2026-06-05 | 102.2 |
| 2026-07-17 | 83.8 |
| 2026-06-10 | 41.4 |
| 2026-06-26 | 37.6 |
| 2026-06-17 | 35.9 |
| 2026-06-08 | 34.9 |
各数値の背後にある正確なSQL
SELECT toString(expiry) AS expiry,
round(sum(vol) / 1e6, 1) AS contracts_mm
FROM (
SELECT toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) AS expiry,
toFloat64(volume) AS vol
FROM global_markets.options_minute_aggs
WHERE window_start >= '2026-06-01 04:00:00'
AND window_start < '2026-06-19 04:00:00'
)
WHERE expiry IS NOT NULL
GROUP BY expiry
ORDER BY contracts_mm DESC
LIMIT 82026-06-18満期の契約は、この14セッションで193.7百万契約が取引されました。次に取引量が多かった満期日である2026-06-12の113.1百万契約を上回りました。未決済建玉は数カ月かけて四半期限月に積み上がり、売買高もそこに集中します。
契約か株式か、実際に急増するのはどちらか
多くのメジャーSQ解説では、この区別が抜け落ちている。ポジションは四半期満期に向けて積み上がるが、満期当日に売買されるオプション契約自体は、特段目立つものではない。以下では、メジャーSQのセッションを、その直前の通常の金曜日二回と並べ、各セッションで当日満期を迎える0DTEの取引高を分けて示す。
メジャーSQ当日の取引高は79.2百万契約だった。これは、2026-06-05の通常の金曜日の103.1百万契約を上回る。変化したのは内訳である。メジャーSQ当日の取引高の48.7%が同じセッションで満期を迎える契約だったのに対し、通常の金曜日は43.9%と44.7%だった。メジャーSQの特徴は「誰もがオプションをより多く売買する」ことではない。株式市場の取引が活発になる点にある。指数の決済やファンドのリバランスは、契約ではなく株式で執行される。
トリプルウィッチングでボラティリティは高まるのか?
売買高とボラティリティは別の問題であり、後者が検証されることは少ない。ここでは、各ウィッチング・セッションにおけるSPYの場中の高値から安値までの値幅を始値比で示し、さらに始値から終値までの絶対変動幅も示す。それぞれを、同じ月の他のセッションの中央値と比較している。
| ウィッチング・セッション | ウィッチング値幅(%) | 他の日の中央値の値幅(%) | ウィッチング正味変動(%) | 他の日の中央値の正味変動(%) |
|---|---|---|---|---|
| 2024-09-20 | 0.73 | 0.92 | 0.05 | 0.35 |
| 2024-12-20 | 2.55 | 0.61 | 1.56 | 0.34 |
| 2025-03-21 | 1.23 | 1.72 | 0.88 | 0.75 |
| 2025-06-20 | 1.1 | 0.73 | 0.69 | 0.4 |
| 2025-09-19 | 0.63 | 0.71 | 0.2 | 0.22 |
| 2025-12-19 | 0.68 | 0.7 | 0.59 | 0.22 |
| 2026-03-20 | 1.82 | 1.28 | 1.21 | 0.52 |
| 2026-06-18 | 0.58 | 1.12 | 0.16 | 0.55 |
各数値の背後にある正確なSQL
WITH daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS day,
toFloat64(max(high) - min(low)) / toFloat64(argMin(open, window_start)) * 100 AS range_pct,
abs(toFloat64(argMax(close, window_start)) - toFloat64(argMin(open, window_start)))
/ toFloat64(argMin(open, window_start)) * 100 AS net_move_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= '2024-09-01 04:00:00'
AND window_start < '2026-07-01 04:00:00'
AND toMonth(toTimeZone(window_start, 'America/New_York')) IN (3, 6, 9, 12)
AND toHour(toTimeZone(window_start, 'America/New_York')) >= 9
AND toHour(toTimeZone(window_start, 'America/New_York')) < 16
AND NOT (toHour(toTimeZone(window_start, 'America/New_York')) = 9
AND toMinute(toTimeZone(window_start, 'America/New_York')) < 30)
GROUP BY day
),
witching AS (
SELECT toStartOfMonth(day) AS m,
maxIf(day, day <= addDays(toStartOfMonth(day),
((5 - toDayOfWeek(toStartOfMonth(day)) + 7) % 7) + 14)) AS witching_day
FROM daily
GROUP BY m
)
SELECT toString(w.witching_day) AS witching_session,
round(anyIf(d.range_pct, d.day = w.witching_day), 2) AS witching_range_pct,
round(quantileDeterministicIf(0.5)(d.range_pct, cityHash64(toString(d.day)), d.day != w.witching_day), 2) AS other_days_median_range_pct,
round(anyIf(d.net_move_pct, d.day = w.witching_day), 2) AS witching_net_move_pct,
round(quantileDeterministicIf(0.5)(d.net_move_pct, cityHash64(toString(d.day)), d.day != w.witching_day), 2) AS other_days_median_net_move_pct
FROM daily AS d
INNER JOIN witching AS w ON toStartOfMonth(d.day) = w.m
GROUP BY w.witching_day
HAVING countIf(d.day != w.witching_day) > 0
ORDER BY w.witching_day結論は、体系的には高まらないということだ。ウィッチング・セッションの値は、その月の中央値を上回る場合も下回る場合もある。2024-12-20の値幅は2.55%で、中央値は0.61%だった。本当に荒れたセッションである。一方、直近のセッションは2026-06-18で、値幅は0.58%、中央値は1.12%だった。始値から終値までの純変動は0.16%で、中央値は0.55%だった。その月で売買高が最大だった日が、価格変動では最も穏やかな日の一つでもあった。
これが、このテーマ全体に対する正確な要約である。ウィッチングでは、予定された機械的なフローが集中する。機械的なフローは、構造上、必ず双方向になる。ロールされたポジションは一つの契約で決済され、別の契約で新たに建てられる。指数への採用銘柄の組み入れには、除外銘柄の売却が対応する。結果として生じるのは、価格推移が通常の範囲にとどまる一方で、売買高だけが極めて大きくなる状態である。
大引けのオークションの内側
この日、明確に様相が異なるのは大引けです。ここでは、S&P 500構成銘柄のうち大型株10銘柄について、各銘柄・各セッションで1件ずつ成立した大引けのオークション取引を抽出します。テープ上の大引け取引条件コードで特定したもので、1分足にはこの取引が含まれていません。さらに、ウィッチングデーにこれらの取引で動いた売買代金を、通常の6月のセッションと比較します。
| ウィッチング終値(ドル) b | 他の六月の中央値終値(ドル) b | 中央値の倍率 | ウィッチング終値の日中比(%) | 他の六月の中央値終値の日中比(%) |
|---|---|---|---|---|
| 49.6 | 18.1 | 2.75 | 29 | 14.5 |
各数値の背後にある正確なSQL
WITH sessions AS (
SELECT b.day AS day,
p.print_dollars AS close_dollars,
b.continuous_dollars + p.print_dollars AS day_dollars
FROM
(
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS day,
sum(toFloat64(close) * toFloat64(volume)) AS continuous_dollars
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'GOOGL', 'META', 'AVGO', 'TSLA', 'JPM', 'LLY')
AND window_start >= '2026-06-01 04:00:00'
AND window_start < '2026-07-01 04:00:00'
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York')) BETWEEN 570 AND 959
GROUP BY day
) AS b
INNER JOIN
(
SELECT day, sum(print_dollars) AS print_dollars
FROM
(
SELECT ticker,
toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS day,
toFloat64(argMaxIf(price, size, has(conditions, 8)))
* toFloat64(maxIf(size, has(conditions, 8))) AS print_dollars
FROM global_markets.stocks_trades
WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'GOOGL', 'META', 'AVGO', 'TSLA', 'JPM', 'LLY')
AND sip_timestamp >= '2026-06-01 04:00:00'
AND sip_timestamp < '2026-07-01 04:00:00'
AND toHour(toTimeZone(sip_timestamp, 'America/New_York')) = 16
AND toMinute(toTimeZone(sip_timestamp, 'America/New_York')) < 10
GROUP BY ticker, day
HAVING countIf(has(conditions, 8)) > 0
)
GROUP BY day
) AS p ON p.day = b.day
)
SELECT round(anyIf(close_dollars, day = '2026-06-18') / 1e9, 1) AS witching_close_dollars_b,
round(quantileDeterministicIf(0.5)(close_dollars, cityHash64(toString(day)), day != '2026-06-18') / 1e9, 1) AS other_june_median_close_dollars_b,
round(anyIf(close_dollars, day = '2026-06-18')
/ quantileDeterministicIf(0.5)(close_dollars, cityHash64(toString(day)), day != '2026-06-18'), 2) AS times_median,
round(anyIf(close_dollars / day_dollars, day = '2026-06-18') * 100, 1) AS witching_close_pct_of_day,
round(quantileDeterministicIf(0.5)(close_dollars / day_dollars, cityHash64(toString(day)), day != '2026-06-18') * 100, 1) AS other_june_median_close_pct_of_day
FROM sessions
HAVING countIf(day != '2026-06-18') > 0この10件の大引け取引では、ウィッチングデーに$49.6 billion相当の株式が売買されました。6月のセッション中央値は$18.1 billionで、倍率は2.75倍でした。また、10銘柄の通常取引時間中の売買代金に占める比率は29%で、通常日は14.5%でした。1銘柄につき1取引、価格は1つ。この瞬間に、数十億ドル規模のリバランスを迫られるインデックスファンドは相手方を見つけます。
ピンリスク:価格は大口行使価格に引き寄せられるのか?
「ピンリスク」と、その類似概念である「max pain」は、満期を迎える株式オプションの価格が、ディーラーが満期直前までヘッジを行うことで、建玉が最大の行使価格へ引き寄せられるという経験則です。実際の約定データはどう示しているのでしょうか。以下は、取引された契約数の順に並べたSPYの2026年6月18日満期シリーズです。各行使価格について、SPYが通常取引時間を終えた水準からの距離も示しています。
| 権利行使価格 | 契約数 k | 権利行使価格-終値 | 終値からの割合 |
|---|---|---|---|
| $746 | 1488.3 | -0.56 | 0.08 |
| $747 | 1482.4 | 0.44 | 0.06 |
| $745 | 1096.8 | -1.56 | 0.21 |
| $748 | 858.4 | 1.44 | 0.19 |
| $744 | 613.3 | -2.56 | 0.34 |
| $750 | 568 | 3.44 | 0.46 |
| $749 | 393.1 | 2.44 | 0.33 |
| $743 | 391.3 | -3.56 | 0.48 |
| $740 | 277.1 | -6.56 | 0.88 |
| $742 | 270.4 | -4.56 | 0.61 |
| $751 | 206.3 | 4.44 | 0.59 |
| $741 | 174.4 | -5.56 | 0.74 |
各数値の背後にある正確なSQL
WITH spy_close AS (
SELECT toFloat64(argMax(close, window_start)) AS px
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2026-06-18 09:30:00', 'America/New_York')
AND window_start < toDateTime('2026-06-18 16:00:00', 'America/New_York')
),
strikes AS (
SELECT toFloat64(substring(ticker, length(ticker) - 7, 8)) / 1000 AS strike,
sum(toFloat64(size)) AS contracts
FROM global_markets.options_trades
WHERE ticker LIKE 'O:SPY260618%'
AND sip_timestamp >= '2026-06-18 08:00:00'
AND sip_timestamp < '2026-06-19 01:00:00'
GROUP BY strike
)
SELECT concat('$', toString(toInt32(s.strike))) AS strike,
round(s.contracts / 1000, 1) AS contracts_k,
round(s.strike - c.px, 2) AS strike_minus_close,
round(abs(s.strike - c.px) / c.px * 100, 2) AS pct_from_close
FROM strikes AS s
CROSS JOIN spy_close AS c
ORDER BY s.contracts DESC, s.strike ASC
LIMIT 12SPYの終値は、取引が最も活発だった二つの満期行使価格の間に収まりました。最も取引が多かった$746は1488.3千契約で、終値から-0.56ポイント離れていました(0.08%離れた水準)。二番目の$747は1482.4千契約で、終値の反対側に0.44ポイント離れていました。
ここで、分かりやすい結論に飛びつくのは避けるべきです。トレーダーは、構造上、アット・ザ・マネーの行使価格に取引を集中させます。そこには満期時の結果が反映され、スプレッドも最も狭いからです。そのため、「最も取引が多い行使価格が終値を挟む」という現象は、どの満期日でもほぼ必然的に生じます。終値がどこかへ引き寄せられた証拠ではありません。一つのセッションだけでは、価格の磁石効果と偶然を区別できません。この経験則にも、少なくとも算術的な根拠はあります。SPYのチェーン全体でmax painを計算すれば、その数値が何を示すのか、また実際の決済値がそこからどれほど離れていたのかを確認できます。このパネルが示すのは、満期を迎えるオプションでは、アット・ザ・マネーから一ドル以内の行使価格の銘柄ほど、その価値の全てが最後の、取引が集中する一分間で決まるということです。
ウィッチングデーに実際に変えるべき対応
- 相対出来高のスクリーニング結果を割り引いて見る。 すべての銘柄で異常な出来高が一斉に記録される。ウィッチングセッションで相対出来高が2倍を示していても、それは材料ではなくカレンダー要因である。
- 静けさではなく、厚い板を想定する。 流動性は厚く、大口注文を執行しやすい。一方、上記の値幅表が示す通り、ウィッチングセッションの値動きは通常日の変動幅の両側に分布する。
- 満期を迎えるポジションを引けまで管理する。 現金決済の単一株式オプションとETFオプションは、引け値で決まる。アット・ザ・マネーに近い契約は、最後の数分でアウト・オブ・ザ・マネーとイン・ザ・マネーの間を行き来する。
- 引け値をセンチメントとして読まない。 その日の売買代金の20分の1が、機械的なリバランス注文で埋め尽くされた2分間に集中する。
- 4つの日付を事前に把握する。 売買における最も安価なフィルターはカレンダーである。
FAQ
次のトリプルウィッチングはいつですか?
トリプルウィッチングは、三月、六月、九月、十二月の第三金曜日です。次回は二千二十六年九月十八日(金曜日)で、その後は二千二十六年十二月十八日、二千二十七年三月十九日、六月十八日、九月十七日、十二月十七日です。
トリプルウィッチングとクアドラプルウィッチングの違いは何ですか?
「クアドラプル」では、三つの従来の満期商品(株価指数先物、株価指数オプション、個別株オプション)に個別株先物が加わりました。これらの商品を扱っていた米国の取引所が二千二十年に閉鎖されたため、現在は両方の用語が同じ四半期ごとの四つの日程を指します。
トリプルウィッチングの日に売買高が大きく増えるのはなぜですか?
満期を迎えると、未決済のデリバティブポジションごとに、決済、手仕舞い、ロールのいずれかを選ぶ必要があります。さらに、指数プロバイダーが構成銘柄のリバランスを同じ取引日に設定し、インデックスファンドが大引けで株式を売買します。直近のウィッチングの取引日は、月間中央値の株式売買高の1.62倍を記録しました。S&P 500の大型構成銘柄十銘柄だけでも、大引けのオークションで49.6十億ドルの取引が成立しました。
トリプルウィッチングによって株式市場のボラティリティは高まりますか?
必ずしも高まるわけではありません。SPYで測ると、ウィッチングの取引日の値幅は、その月の日中値幅の中央値を上回る場合も下回る場合もあります。2024-12-20の値幅は2.55%で、中央値は0.61%でした。一方、2026-06-18の値幅はわずか0.58%で、中央値は1.12%でした。売買高の増加と大幅な値動きは、別の現象です。
満期日におけるピンリスクとは何ですか?
ピンリスクとは、オプションが行使価格のごく近くで満期を迎えることによるエクスポージャーです。引け後まで、オプションが無価値で満期を迎えるのか、イン・ザ・マネーになるのかは分かりません。ショートポジションでは、株式の割り当てを受ける可能性もあります。二千二十六年六月十八日、SPYで満期を迎えた取引量の多い二つの行使価格は、終値からそれぞれ-0.56ポイントと0.44ポイント離れていました。
各パネルは、実際の約定データを対象とする保存済みのバージョン管理クエリです。数値を監査するにはSQLを展開してください。Strasmore terminalで、次回のウィッチングの取引日を自分で測定することもできます。