Strasmore Research
徹底分析 Matt Connor著者: Matt Connor

SOXLとSOXSの減価:横ばい相場で両方が減る仕組みを実データで検証

SOXLとSOXSは同じ半導体指数を追う3倍ブル・ベアETFですが、横ばいで荒れた相場では両方が値を減らします。日次リセットの算数を一度だけ説明し、指数が往って来いで終わった月と片道で走った四半期の実データで、減価が効く局面と複利が味方する局面を確かめます。経費率と対象指数もファクトシートで確認します。

SOXLとSOXSの減価とは、追いかける半導体指数が上下に揺れたあと元の水準に戻っても、3倍ブルのSOXLと3倍ベアのSOXSがどちらも出発点より低い値で終わる現象です。鍵は日次リセット、つまり「指数のその日の騰落率の3倍(またはマイナス3倍)」を毎営業日仕切り直す設計にあり、往復の値動きが重なるほど両方の基準価額を削ります。この記事では計算の仕組みを一度だけ説明し、あとは指数が往って来いで終わった月と、片道で走った四半期の実データに語らせます。

日次リセットの算数を一度だけ

レバレッジETFの目標は「1日」の騰落率です。SOXLは指数の1日の値動きの300%、SOXSはマイナス300%を目指し、毎日の引けでエクスポージャーを組み直します(基本的な仕組みは レバレッジETFの仕組み で解説しています)。ここで指数が100から110に上がり(プラス10%)、翌日に100へ戻った(マイナス9.09%)と仮定します。指数は往って来いで差し引きゼロです。

  • 3倍ブル:1日目はプラス30%で130、2日目はマイナス27.27%で 130 × 0.7273 ≒ 94.5。指数はゼロなのに約5.5%減。
  • 3倍ベア:1日目はマイナス30%で70、2日目はプラス27.27%で 70 × 1.2727 ≒ 89.1。約10.9%減。

たった2日でこれだけ差が出る理由は単純で、2日目の3倍が「130」や「70」を起点に計算される点にあります。前日に増えた元本に3倍の下げが掛かり、前日に減った元本に3倍の上げが掛かる。値動きが大きいほど、往復の回数が多いほど、この取りこぼしは積み上がります。

目安の式もあります。レバレッジ倍率をLとすると、往復による減価はおおよそ「(L² - L) ÷ 2 × 日次リターンの分散」に比例します。プラス3倍なら (9 - 3) ÷ 2 = 3、マイナス3倍なら (9 + 3) ÷ 2 = 6。同じ指数、同じ荒れ方でも、ベア側は理屈の上でブル側の約2倍のペースで減ります。上の2日間の例(5.5%減と10.9%減)がちょうどこの比率です。なお、これは先物を乗り換えるETFに生じる コンタンゴとロールイールド とは別物です。SOXLとSOXSはスワップで日次エクスポージャーを作るので、ここで扱う減価は日次リセットの複利効果だけを指します。

SOXLとSOXSが追う指数と経費率

Direxionの2026年6月30日時点のファクトシートによると、両ファンドの対象指数はNYSE Semiconductor Index(ブルームバーグ略号ICESEMIT、旧称ICE Semiconductor Index)です。米国上場の半導体企業のうち時価総額上位30社で構成される、浮動株調整後の修正時価総額加重のルールベース指数です。日次目標はSOXLがプラス300%、SOXSがマイナス300%で、どちらも「手数料・費用控除前」の1日の騰落率に対する目標です。設定日は両方とも2010年3月11日。

経費率は同じファクトシートの記載で、SOXLが総経費率0.91%、純経費率0.75%。SOXSが総経費率1.00%、純経費率1.00%です。純経費率には投資先ファンドの費用(AFFE)が含まれ、運用会社Rafferty Asset Managementによる費用上限契約は2027年9月1日まで有効と記載されています。年1%前後のコストは減価とは別の、ゆっくり効く逆風です。

指数値そのものは本稿の株価データに含まれないため、以下では同じNYSE Semiconductor Indexに連動する1倍ETF、iShares Semiconductor ETF(SOXX)の終値を指数の代役に使います。SOXXにも信託報酬とわずかな追跡誤差があるので厳密には指数と同一ではありませんが、月単位の往復を見る目的には十分です。分割・併合の実施日は日次リターンの連鎖から除外し、前日比が75%を超える異常値も同じ扱いにしています(詳細は末尾のデータ注記)。

指数が往って来いで終わった月に、SOXLとSOXSはどうなったか

月次騰落率は、前月末の終値からその月末の終値までの変化として測ります(測り方の詳細は 月次リターンの測り方 にまとめています)。2022年1月から2026年8月までの各月について、指数代役SOXXの月間騰落率がプラスマイナス2.5%以内に収まった「ほぼ横ばい」の月だけを抜き出し、同じ月のSOXLとSOXSの騰落率を並べたのが次のパネルです。両建て合計、つまりSOXLとSOXSを同額ずつ持った場合の合計騰落率も添えました。

クエリ指数が±2.5%以内で終わった月のSOXL・SOXS騰落率(2022年1月以降)
labelindex_pctsoxl_pctsoxs_pctpair_pct
2022年2月-1.1-8-5.3-13.3
2022年3月-0.2-5.4-10.7-16.1
2022年10月2.40.7-16-15.4
2023年2月1.50.9-8.8-8
2024年1月1.72.2-8.1-5.8
2024年3月0.58.6-15.5-6.9
2024年8月-1.8-12.6-5.7-18.3
2024年9月-0.2-5.4-8.2-13.7
2024年11月-1.3-6.72.5-4.3
2024年12月0-2.7-5-7.7
2025年1月1.2-1.1-8.3-9.3
2025年4月-2.3-23.8-34.9-58.7
2025年7月0.6-0.5-2.2-2.7
2025年8月2.24.2-7.5-3.3
2025年12月1.51.9-8.7-6.9
2026年2月1.71.6-9.1-7.6
2026年8月1.2-1.7-9.7-11.4
各数値の背後にある正確なSQL
WITH
daily AS
(
    SELECT
        ticker,
        date,
        anyLast(toFloat64(close)) AS c
    FROM global_markets.stocks_daily_aggs
    WHERE ticker IN ('SOXX', 'SOXL', 'SOXS')
      AND date >= '2021-12-15'
      AND date <  '2026-09-01'
    GROUP BY ticker, date
),
lagged AS
(
    SELECT
        ticker,
        date,
        c,
        lagInFrame(c, 1) OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS prev_c
    FROM daily
),
rets AS
(
    SELECT
        ticker,
        date,
        c / prev_c - 1 AS r
    FROM lagged
    WHERE prev_c > 0
      AND abs(c / prev_c - 1) < 0.75
      AND date >= '2022-01-01'
      AND (ticker, date) NOT IN
      (
          SELECT ticker, toDate(execution_date)
          FROM global_markets.stocks_splits
          WHERE ticker IN ('SOXX', 'SOXL', 'SOXS')
      )
),
monthly AS
(
    SELECT
        toStartOfMonth(date)                        AS m,
        exp(sumIf(log(1 + r), ticker = 'SOXX')) - 1 AS soxx,
        exp(sumIf(log(1 + r), ticker = 'SOXL')) - 1 AS soxl,
        exp(sumIf(log(1 + r), ticker = 'SOXS')) - 1 AS soxs
    FROM rets
    GROUP BY m
    HAVING countIf(ticker = 'SOXX') >= 15
       AND countIf(ticker = 'SOXL') >= 15
       AND countIf(ticker = 'SOXS') >= 15
)
SELECT
    concat(toString(toYear(m)), '年', toString(toMonth(m)), '月') AS label,
    round(soxx * 100, 1)                                        AS index_pct,
    round(soxl * 100, 1)                                        AS soxl_pct,
    round(soxs * 100, 1)                                        AS soxs_pct,
    round((soxl + soxs) * 100, 1)                               AS pair_pct
FROM monthly
WHERE abs(soxx) < 0.025
ORDER BY m
自分で実行する

該当した月は 17 か月ありました。最初の該当月 2022年2月 は、指数が -1.1% とほぼ動かなかったのに対し、SOXLは -8%、SOXSは -5.3%、両建て合計は -13.3% です。直近の該当月 2026年8月 は、指数 1.2% に対してSOXLが -1.7%、SOXSが -9.7%、両建て合計が -11.4% でした。棒グラフで見てほしいのは各月の符号です。指数の棒がほとんど見えない月に、SOXLとSOXSの棒がそろって下に伸びている月がいくつあるか。両建て合計がマイナスの月は、往復の値動きだけで資金が削られた月です。

減価がいちばん効いた月を日次でなぞる

上の表から両建て合計がもっとも低かった月を1つ選び、前月末の終値を100として毎営業日の値を並べたのが次の折れ線です。どの月を選ぶかはSQLの中で決めており、手で月を指定していません。

クエリ両建て合計が最も低かった横ばい月の日次推移(前月末=100)
21 rows (showing 20)
session_dateday_labelindex_rebasedsoxl_rebasedsoxs_rebasedpair_rebased
2025-04-012025年4月1日100.110099.9199.9
2025-04-022025年4月2日100.7101.997.8199.8
2025-04-032025年4月3日90.571.5127198.5
2025-04-042025年4月4日83.854.7157211.8
2025-04-072025年4月7日85.757.4146.1203.5
2025-04-082025年4月8日82.351.7162.2213.9
2025-04-092025年4月9日97.680.171.4151.5
2025-04-102025年4月10日89.660.487.8148.2
2025-04-112025年4月11日91.564.182.3146.4
2025-04-142025年4月14日92.265.680.8146.5
2025-04-152025年4月15日92.566.579.6146.1
2025-04-162025年4月16日8958.689147.6
2025-04-172025年4月17日88.557.790.7148.3
2025-04-212025年4月21日8754.695.4150
2025-04-222025年4月22日88.757.690147.6
2025-04-232025年4月23日9264.579.7144.2
2025-04-242025年4月24日97.375.265.8141.1
2025-04-252025年4月25日98.277.464.1141.5
2025-04-282025年4月28日9877.164.6141.6
2025-04-292025年4月29日9774.466.6141
各数値の背後にある正確なSQL
WITH
daily AS
(
    SELECT
        ticker,
        date,
        anyLast(toFloat64(close)) AS c
    FROM global_markets.stocks_daily_aggs
    WHERE ticker IN ('SOXX', 'SOXL', 'SOXS')
      AND date >= '2021-12-15'
      AND date <  '2026-09-01'
    GROUP BY ticker, date
),
lagged AS
(
    SELECT
        ticker,
        date,
        c,
        lagInFrame(c, 1) OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS prev_c
    FROM daily
),
rets AS
(
    SELECT
        ticker,
        date,
        c / prev_c - 1 AS r
    FROM lagged
    WHERE prev_c > 0
      AND abs(c / prev_c - 1) < 0.75
      AND date >= '2022-01-01'
      AND (ticker, date) NOT IN
      (
          SELECT ticker, toDate(execution_date)
          FROM global_markets.stocks_splits
          WHERE ticker IN ('SOXX', 'SOXL', 'SOXS')
      )
),
monthly AS
(
    SELECT
        toStartOfMonth(date)                        AS m,
        exp(sumIf(log(1 + r), ticker = 'SOXX')) - 1 AS soxx,
        exp(sumIf(log(1 + r), ticker = 'SOXL')) - 1 AS soxl,
        exp(sumIf(log(1 + r), ticker = 'SOXS')) - 1 AS soxs
    FROM rets
    GROUP BY m
    HAVING countIf(ticker = 'SOXX') >= 15
       AND countIf(ticker = 'SOXL') >= 15
       AND countIf(ticker = 'SOXS') >= 15
),
picked AS
(
    SELECT argMin(m, soxl + soxs) AS pm
    FROM monthly
    WHERE abs(soxx) < 0.025
),
by_day AS
(
    SELECT
        date,
        anyIf(r, ticker = 'SOXX') AS r_index,
        anyIf(r, ticker = 'SOXL') AS r_soxl,
        anyIf(r, ticker = 'SOXS') AS r_soxs
    FROM rets
    WHERE toStartOfMonth(date) IN (SELECT pm FROM picked)
    GROUP BY date
)
SELECT
    toString(date) AS session_date,
    concat(toString(toYear(date)), '年', toString(toMonth(date)), '月', toString(toDayOfMonth(date)), '日') AS day_label,
    round(100 * exp(sum(log(1 + r_index)) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)), 1) AS index_rebased,
    round(100 * exp(sum(log(1 + r_soxl)) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)), 1)  AS soxl_rebased,
    round(100 * exp(sum(log(1 + r_soxs)) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)), 1)  AS soxs_rebased,
    round(100 * exp(sum(log(1 + r_soxl)) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW))
        + 100 * exp(sum(log(1 + r_soxs)) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)), 1)  AS pair_rebased
FROM by_day
ORDER BY date
自分で実行する

2025年4月1日 から 2025年4月30日 までの 21 営業日で、指数代役は月末に 97.7 と、出発点の100のほぼ隣に戻りました。同じ日のSOXLは 76.2、SOXSは 65.1、両建て合計は 141.3(出発点は200)です。折れ線の途中で指数が上下に振れるたび、3倍の線は行きは大きく動き、帰りは元の場所まで戻り切りません。月末の差は、この「戻り切らない」の積み重ねです。月の途中で出発点からどこまで落ち込んだかを測る考え方は 最大ドローダウンの解説 を参照してください。

指数の動きの大きさと両建て合計の関係

減価は「横ばいで荒れた月」にもっとも効き、片道で動いた月には逆向きに働くことがあります。それを一枚で見るために、2022年1月以降の全月を指数の月間騰落率の大きさ(絶対値)で4つに分け、両建て合計の平均・最悪・最良と、SOXLとSOXSが両方マイナスだった月の数を集計しました。

クエリ指数の月間変動幅ごとの両建て合計(SOXL+SOXS)の分布
labelsample_countboth_lost_countavg_index_abs_pctavg_pair_pctworst_pair_pctbest_pair_pct
1: 指数±2.5%以内1791.3-12.3-58.7-2.7
2: 指数±2.5〜5%404.2-9.1-16.6-4.4
3: 指数±5〜10%1407.1-4-16.53.2
4: 指数±10%超21016.210.5-29.998.4
各数値の背後にある正確なSQL
WITH
daily AS
(
    SELECT
        ticker,
        date,
        anyLast(toFloat64(close)) AS c
    FROM global_markets.stocks_daily_aggs
    WHERE ticker IN ('SOXX', 'SOXL', 'SOXS')
      AND date >= '2021-12-15'
      AND date <  '2026-09-01'
    GROUP BY ticker, date
),
lagged AS
(
    SELECT
        ticker,
        date,
        c,
        lagInFrame(c, 1) OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS prev_c
    FROM daily
),
rets AS
(
    SELECT
        ticker,
        date,
        c / prev_c - 1 AS r
    FROM lagged
    WHERE prev_c > 0
      AND abs(c / prev_c - 1) < 0.75
      AND date >= '2022-01-01'
      AND (ticker, date) NOT IN
      (
          SELECT ticker, toDate(execution_date)
          FROM global_markets.stocks_splits
          WHERE ticker IN ('SOXX', 'SOXL', 'SOXS')
      )
),
monthly AS
(
    SELECT
        toStartOfMonth(date)                        AS m,
        exp(sumIf(log(1 + r), ticker = 'SOXX')) - 1 AS soxx,
        exp(sumIf(log(1 + r), ticker = 'SOXL')) - 1 AS soxl,
        exp(sumIf(log(1 + r), ticker = 'SOXS')) - 1 AS soxs
    FROM rets
    GROUP BY m
    HAVING countIf(ticker = 'SOXX') >= 15
       AND countIf(ticker = 'SOXL') >= 15
       AND countIf(ticker = 'SOXS') >= 15
)
SELECT
    multiIf(abs(soxx) < 0.025, '1: 指数±2.5%以内',
            abs(soxx) < 0.05,  '2: 指数±2.5〜5%',
            abs(soxx) < 0.10,  '3: 指数±5〜10%',
                               '4: 指数±10%超') AS label,
    count()                                  AS sample_count,
    countIf(soxl < 0 AND soxs < 0)           AS both_lost_count,
    round(avg(abs(soxx)) * 100, 1)           AS avg_index_abs_pct,
    round(avg(soxl + soxs) * 100, 1)         AS avg_pair_pct,
    round(min(soxl + soxs) * 100, 1)         AS worst_pair_pct,
    round(max(soxl + soxs) * 100, 1)         AS best_pair_pct
FROM monthly
GROUP BY label
ORDER BY label
自分で実行する

指数がプラスマイナス2.5%以内だった 17 か月では、両建て合計の平均は -12.3% で、そのうち 9 か月はSOXLとSOXSが両方マイナスでした。最悪の月は -58.7%、最良の月でも -2.7% です。いちばん右、指数が10%超動いた月の平均は 10.5%、最良の月は 98.4% で、横ばいの列と符号を見比べると減価の正体がはっきりします。両建てが目減りするのは値動きが往復したときで、片道で大きく動いた月には3倍側の複利が両建て全体を押し上げる月も出てきます。減価は「持っているだけで一定率で減る手数料」ではなく、経路の形で決まる量です。

片道で動いた月:複利が味方するとき

同じ日次リセットが、トレンドが続く局面では逆向きに働きます。上昇が続けば、SOXLは前日までの利益を含めた大きな元本に3倍を掛け続けるので、月間では「指数の3倍」を上回り得ます。指数が月間で8%超上昇した月を抜き出し、SOXLの実績と単純3倍(指数の騰落率×3)との差を並べました。差が大きい順です。

クエリ指数が月間8%超上昇した月:SOXLの実績と単純3倍との差
labelindex_pctthree_x_pctsoxl_pctsoxl_gap_pct
2026年4月40.4121.216543.8
2026年5月23.37076.76.7
2025年6月16.549.455.35.9
2023年11月16.148.353.14.8
2025年9月10.531.633.82.2
2023年1月164850.22.1
2026年1月1545472
2022年7月16.549.551.41.8
2023年5月15.74748.61.6
2023年12月12.236.537.71.2
2024年2月11.333.833.5-0.3
2023年3月8.525.524.9-0.6
2024年5月9.428.127.3-0.8
2025年5月11.534.433-1.5
2022年11月18.956.654.9-1.6
2025年10月13.139.237.1-2.1
2026年6月12.637.818.9-18.9
各数値の背後にある正確なSQL
WITH
daily AS
(
    SELECT
        ticker,
        date,
        anyLast(toFloat64(close)) AS c
    FROM global_markets.stocks_daily_aggs
    WHERE ticker IN ('SOXX', 'SOXL', 'SOXS')
      AND date >= '2021-12-15'
      AND date <  '2026-09-01'
    GROUP BY ticker, date
),
lagged AS
(
    SELECT
        ticker,
        date,
        c,
        lagInFrame(c, 1) OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS prev_c
    FROM daily
),
rets AS
(
    SELECT
        ticker,
        date,
        c / prev_c - 1 AS r
    FROM lagged
    WHERE prev_c > 0
      AND abs(c / prev_c - 1) < 0.75
      AND date >= '2022-01-01'
      AND (ticker, date) NOT IN
      (
          SELECT ticker, toDate(execution_date)
          FROM global_markets.stocks_splits
          WHERE ticker IN ('SOXX', 'SOXL', 'SOXS')
      )
),
monthly AS
(
    SELECT
        toStartOfMonth(date)                        AS m,
        exp(sumIf(log(1 + r), ticker = 'SOXX')) - 1 AS soxx,
        exp(sumIf(log(1 + r), ticker = 'SOXL')) - 1 AS soxl,
        exp(sumIf(log(1 + r), ticker = 'SOXS')) - 1 AS soxs
    FROM rets
    GROUP BY m
    HAVING countIf(ticker = 'SOXX') >= 15
       AND countIf(ticker = 'SOXL') >= 15
       AND countIf(ticker = 'SOXS') >= 15
)
SELECT
    concat(toString(toYear(m)), '年', toString(toMonth(m)), '月') AS label,
    round(soxx * 100, 1)                                        AS index_pct,
    round(soxx * 300, 1)                                        AS three_x_pct,
    round(soxl * 100, 1)                                        AS soxl_pct,
    round((soxl - 3 * soxx) * 100, 1)                           AS soxl_gap_pct
FROM monthly
WHERE soxx > 0.08
ORDER BY soxl_gap_pct DESC
自分で実行する

差が最大だった 2026年4月 は、指数 40.4% の単純3倍なら 121.2% のところ、SOXLは 165% と、43.8 ポイント上回りました。一方、表の最下段 2026年6月 は指数が 12.6% 上がった月でも差は -18.9 ポイントで、上昇月ならいつでも3倍を超えるわけではありません。月の中に往復があれば、その分は同じ理屈で削られています。

2026年4〜6月:片道で走った四半期を日次で

2026年の春は、指数が3か月にわたりほぼ片道で上がった局面でした。3月末の終値を100として、4月から6月末までのSOXX、SOXL、SOXSの毎営業日の値を並べます。

クエリ2026年4〜6月の日次推移:SOXX・SOXL・SOXS(3月末=100)
62 rows (showing 20)
session_dateday_labelindex_rebasedsoxl_rebasedsoxs_rebasedpair_rebased
2026-04-012026年4月1日103109.191200
2026-04-022026年4月2日103.3110.190.1200.2
2026-04-062026年4月6日104.7114.486.7201.1
2026-04-072026年4月7日105.811883.9201.9
2026-04-082026年4月8日112.7140.967.6208.5
2026-04-092026年4月9日115.2150.263.2213.5
2026-04-102026年4月10日117.6159.459.4218.9
2026-04-132026年4月13日119.7168.156.2224.4
2026-04-142026年4月14日122.1178.152.8230.9
2026-04-152026年4月15日122.3179.452.5232
2026-04-162026年4月16日123.5184.550.9235.3
2026-04-172026年4月17日126.5197.647.3245
2026-04-202026年4月20日127200.346.7247
2026-04-212026年4月21日128204.745.7250.4
2026-04-222026年4月22日131.4220.542.1262.6
2026-04-232026年4月23日134.2235.439.4274.8
2026-04-242026年4月24日140.4267.833.9301.8
2026-04-272026年4月27日138.6257.535.2292.7
2026-04-282026年4月28日133.5228.739.1267.8
2026-04-292026年4月29日136.9246.236.1282.4
各数値の背後にある正確なSQL
WITH
daily AS
(
    SELECT
        ticker,
        date,
        anyLast(toFloat64(close)) AS c
    FROM global_markets.stocks_daily_aggs
    WHERE ticker IN ('SOXX', 'SOXL', 'SOXS')
      AND date >= '2026-03-20'
      AND date <  '2026-07-01'
    GROUP BY ticker, date
),
lagged AS
(
    SELECT
        ticker,
        date,
        c,
        lagInFrame(c, 1) OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS prev_c
    FROM daily
),
rets AS
(
    SELECT
        ticker,
        date,
        c / prev_c - 1 AS r
    FROM lagged
    WHERE prev_c > 0
      AND abs(c / prev_c - 1) < 0.75
      AND date >= '2026-04-01'
      AND (ticker, date) NOT IN
      (
          SELECT ticker, toDate(execution_date)
          FROM global_markets.stocks_splits
          WHERE ticker IN ('SOXX', 'SOXL', 'SOXS')
      )
),
by_day AS
(
    SELECT
        date,
        anyIf(r, ticker = 'SOXX') AS r_index,
        anyIf(r, ticker = 'SOXL') AS r_soxl,
        anyIf(r, ticker = 'SOXS') AS r_soxs
    FROM rets
    GROUP BY date
)
SELECT
    toString(date) AS session_date,
    concat(toString(toYear(date)), '年', toString(toMonth(date)), '月', toString(toDayOfMonth(date)), '日') AS day_label,
    round(100 * exp(sum(log(1 + r_index)) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)), 1) AS index_rebased,
    round(100 * exp(sum(log(1 + r_soxl)) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)), 1)  AS soxl_rebased,
    round(100 * exp(sum(log(1 + r_soxs)) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)), 1)  AS soxs_rebased,
    round(100 * exp(sum(log(1 + r_soxl)) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW))
        + 100 * exp(sum(log(1 + r_soxs)) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)), 1)  AS pair_rebased
FROM by_day
ORDER BY date
自分で実行する

2026年4月1日 から 2026年6月30日 までの 62 営業日で、指数代役は 195、SOXLは 556.7、SOXSは 8.1 になりました。両建て合計は 564.8 と、出発点の200を上回っています。横ばい月の折れ線と見比べると、日次リセットは同じ設計のまま、経路が違うだけで正反対の結果を出すことがわかります。SOXSの側も見てください。指数代役が 195 まで上がった局面で、単純計算のマイナス3倍なら残高はゼロを割りますが、日々のリセットが下げ幅を圧縮する形で、実際の値は 8.1 と残っています。これも同じ複利の一面です。

FAQ

SOXLとSOXSを両建てすれば減価を打ち消せますか

打ち消せません。両建て合計は、指数が横ばいで荒れた月にマイナスになりやすく、上のパネルの「両建て合計」列がその実測値です。片方の減価をもう片方が補うのではなく、両方が同時に減る局面があります。

SOXLの減価は年率でどのくらいですか

固定の数字はありません。減価は指数の日次リターンの分散(荒れ方)に比例し、静かな月にはほとんど出ず、荒れた月に集中します。目安の式は本文の「(L² - L) ÷ 2 × 分散」で、同じ荒れ方ならSOXSはSOXLの約2倍のペースで減ります。

SOXLとSOXSはどの指数に連動していますか

どちらもNYSE Semiconductor Index(旧称ICE Semiconductor Index)です。米国上場の半導体企業の時価総額上位30社で構成され、SOXLは1日の騰落率の300%、SOXSはマイナス300%を目標にしています。同じ指数を追う1倍ETFにiShares Semiconductor ETF(SOXX)があります。

減価はコンタンゴと同じものですか

別のものです。コンタンゴは先物を乗り換えるETFに生じるロールコストで、SOXLとSOXSはスワップなどで日次エクスポージャーを作ります。この記事の減価は日次リセットの複利効果だけを指しています。

長く持てば必ず減るのですか

必ずではありません。片道のトレンドが続いた期間には3倍を上回った月と四半期が実際にあり、横ばいで荒れた期間には両方が減っています。長期の結果は経路の形で決まり、事前には確定しません。

データ注記
  • 価格はSOXX、SOXL、SOXSの日次終値。月次騰落率は日次リターン(当日終値 ÷ 前営業日終値 - 1)を月内で連鎖させて求めており、前月末の終値が起点になります。
  • 分割・併合の実施日は連鎖から除外しています。加えて前日比が75%を超える日も除外し、データが分割調整済みでも未調整でも同じ結果になるようにしています。
  • 指数の代役はSOXX。指数値そのものではないため、信託報酬と追跡誤差の分だけわずかにずれます。
  • 「横ばい」の閾値はプラスマイナス2.5%、「上昇月」の閾値はプラス8%で、どちらもSQL内で変更できます。
  • 月次の集計期間は2022年1月から2026年8月まで。四半期の折れ線は2026年4月1日から6月30日までです。

各パネルの下には集計に使ったSQLをそのまま置いています。別の月、別の3倍ETF、別の閾値で同じ集計をしたいときは、Strasmoreのターミナルに日本語で質問すれば同じ形の表が返ってきます。

#soxl#soxs#leveraged etf#volatility decay#semiconductors#daily reset