spy_forward_curve
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-01, from backtest-vs-forward-test.
| month | strategy_index | buy_hold_index |
|---|---|---|
| 2020-09 | 95.9 | 95.9 |
| 2020-10 | 93.5 | 93.5 |
| 2020-11 | 103.7 | 103.7 |
| 2020-12 | 107 | 107 |
| 2021-01 | 105.9 | 105.9 |
| 2021-02 | 108.9 | 108.9 |
| 2021-03 | 113.5 | 113.5 |
| 2021-04 | 119.5 | 119.5 |
| 2021-05 | 120.2 | 120.2 |
| 2021-06 | 122.5 | 122.5 |
| 2021-07 | 125.5 | 125.5 |
| 2021-08 | 129.3 | 129.3 |
| 2021-09 | 122.9 | 122.9 |
| 2021-10 | 131.5 | 131.5 |
| 2021-11 | 130.4 | 130.4 |
| 2021-12 | 136 | 136 |
| 2022-01 | 125.4 | 128.8 |
| 2022-02 | 120.3 | 125 |
| 2022-03 | 119 | 129.3 |
| 2022-04 | 117.4 | 117.9 |
| 2022-05 | 117.4 | 118.2 |
| 2022-06 | 117.4 | 108 |
| 2022-07 | 117.4 | 117.9 |
| 2022-08 | 117.4 | 113.1 |
| 2022-09 | 117.4 | 102.3 |
| 2022-10 | 117.4 | 110.6 |
| 2022-11 | 117.4 | 116.7 |
| 2022-12 | 115 | 109.5 |
| 2023-01 | 114.7 | 116.4 |
| 2023-02 | 111.8 | 113.4 |
| 2023-03 | 112.8 | 117.2 |
| 2023-04 | 114.6 | 119.1 |
| 2023-05 | 115.1 | 119.6 |
| 2023-06 | 122.1 | 126.9 |
| 2023-07 | 126.1 | 131.1 |
| 2023-08 | 124 | 128.9 |
| 2023-09 | 117.7 | 122.4 |
| 2023-10 | 114.3 | 119.7 |
| 2023-11 | 121.1 | 130.7 |
| 2023-12 | 126.2 | 136.1 |
| 2024-01 | 128.2 | 138.2 |
| 2024-02 | 134.9 | 145.5 |
| 2024-03 | 138.8 | 149.7 |
| 2024-04 | 133.2 | 143.7 |
| 2024-05 | 140 | 151 |
| 2024-06 | 144.5 | 155.8 |
| 2024-07 | 146.2 | 157.7 |
| 2024-08 | 149.6 | 161.4 |
| 2024-09 | 152.3 | 164.3 |
| 2024-10 | 150.9 | 162.8 |
| 2024-11 | 159.9 | 172.5 |
| 2024-12 | 155.6 | 167.8 |
| 2025-01 | 159.7 | 172.3 |
| 2025-02 | 157.7 | 170.1 |
| 2025-03 | 147.4 | 160.1 |
| 2025-04 | 147.4 | 158.8 |
| 2025-05 | 149 | 168.7 |
| 2025-06 | 156.2 | 176.9 |
| 2025-07 | 159.8 | 181 |
| 2025-08 | 163.1 | 184.7 |
| 2025-09 | 168.4 | 190.7 |
| 2025-10 | 172.4 | 195.3 |
| 2025-11 | 172.8 | 195.6 |
| 2025-12 | 172.4 | 195.2 |
| 2026-01 | 174.9 | 198.1 |
| 2026-02 | 173.4 | 196.4 |
| 2026-03 | 166.8 | 186.2 |
| 2026-04 | 177.3 | 205.7 |
| 2026-05 | 186.6 | 216.6 |
| 2026-06 | 184.3 | 213.8 |
| 2026-07 | 184.3 | 213.9 |
| 2026-08 | 189.3 | 219.6 |
| 2026-09 | 188.2 | 218.3 |
- Rows × columns
- 73 × 3
- 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 |
|---|---|---|---|
month |
text | 73 distinct values (2020-09, 2020-10, 2020-11…) | |
strategy_index |
number | 93.5 to 189.3 | |
buy_hold_index |
number | 93.5 to 219.6 |
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 px AS (
SELECT
date,
toFloat64(close) AS c
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'SPY'
AND date >= '2019-10-01'
AND date < '2026-10-01'
),
ma AS (
SELECT
date,
c,
avg(c) OVER (ORDER BY date ROWS BETWEEN 199 PRECEDING AND CURRENT ROW) AS ma_200
FROM px
),
sig AS (
SELECT
date,
c,
any(c) OVER (ORDER BY date ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prev_c,
any(if(c > ma_200, 1, 0)) OVER (ORDER BY date ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS held
FROM ma
),
daily AS (
SELECT
date,
held * (c / prev_c - 1) AS r_rule,
c / prev_c - 1 AS r_hold
FROM sig
WHERE date >= '2020-09-01'
AND prev_c > 0
),
cum AS (
SELECT
date,
exp(sum(log(1 + r_rule)) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)) AS eq_rule,
exp(sum(log(1 + r_hold)) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)) AS eq_hold
FROM daily
)
SELECT
formatDateTime(toStartOfMonth(date), '%Y-%m') AS month,
round(argMax(eq_rule, date) * 100, 1) AS strategy_index,
round(argMax(eq_hold, date) * 100, 1) AS buy_hold_index
FROM cum
GROUP BY month
ORDER BY month
ใช้ข้อมูลนี้ในผู้ช่วย AI ของคุณ
เปิดพร้อมคิวรีได้ทันที พร้อมข้อมูลของหน้านี้ ฟรี ไม่ต้องมีบัญชี