{"slug":"backtest-vs-forward-test","qid":"spy_forward_curve","label":"spy_forward_curve","post_title":"backtest-vs-forward-test","post_url":"/blog/lang/th/backtest-vs-forward-test#q-spy_forward_curve","columns":["month","strategy_index","buy_hold_index"],"rows":[{"month":"2020-09","strategy_index":95.9,"buy_hold_index":95.9},{"month":"2020-10","strategy_index":93.5,"buy_hold_index":93.5},{"month":"2020-11","strategy_index":103.7,"buy_hold_index":103.7},{"month":"2020-12","strategy_index":107,"buy_hold_index":107},{"month":"2021-01","strategy_index":105.9,"buy_hold_index":105.9},{"month":"2021-02","strategy_index":108.9,"buy_hold_index":108.9},{"month":"2021-03","strategy_index":113.5,"buy_hold_index":113.5},{"month":"2021-04","strategy_index":119.5,"buy_hold_index":119.5},{"month":"2021-05","strategy_index":120.2,"buy_hold_index":120.2},{"month":"2021-06","strategy_index":122.5,"buy_hold_index":122.5},{"month":"2021-07","strategy_index":125.5,"buy_hold_index":125.5},{"month":"2021-08","strategy_index":129.3,"buy_hold_index":129.3},{"month":"2021-09","strategy_index":122.9,"buy_hold_index":122.9},{"month":"2021-10","strategy_index":131.5,"buy_hold_index":131.5},{"month":"2021-11","strategy_index":130.4,"buy_hold_index":130.4},{"month":"2021-12","strategy_index":136,"buy_hold_index":136},{"month":"2022-01","strategy_index":125.4,"buy_hold_index":128.8},{"month":"2022-02","strategy_index":120.3,"buy_hold_index":125},{"month":"2022-03","strategy_index":119,"buy_hold_index":129.3},{"month":"2022-04","strategy_index":117.4,"buy_hold_index":117.9},{"month":"2022-05","strategy_index":117.4,"buy_hold_index":118.2},{"month":"2022-06","strategy_index":117.4,"buy_hold_index":108},{"month":"2022-07","strategy_index":117.4,"buy_hold_index":117.9},{"month":"2022-08","strategy_index":117.4,"buy_hold_index":113.1},{"month":"2022-09","strategy_index":117.4,"buy_hold_index":102.3},{"month":"2022-10","strategy_index":117.4,"buy_hold_index":110.6},{"month":"2022-11","strategy_index":117.4,"buy_hold_index":116.7},{"month":"2022-12","strategy_index":115,"buy_hold_index":109.5},{"month":"2023-01","strategy_index":114.7,"buy_hold_index":116.4},{"month":"2023-02","strategy_index":111.8,"buy_hold_index":113.4},{"month":"2023-03","strategy_index":112.8,"buy_hold_index":117.2},{"month":"2023-04","strategy_index":114.6,"buy_hold_index":119.1},{"month":"2023-05","strategy_index":115.1,"buy_hold_index":119.6},{"month":"2023-06","strategy_index":122.1,"buy_hold_index":126.9},{"month":"2023-07","strategy_index":126.1,"buy_hold_index":131.1},{"month":"2023-08","strategy_index":124,"buy_hold_index":128.9},{"month":"2023-09","strategy_index":117.7,"buy_hold_index":122.4},{"month":"2023-10","strategy_index":114.3,"buy_hold_index":119.7},{"month":"2023-11","strategy_index":121.1,"buy_hold_index":130.7},{"month":"2023-12","strategy_index":126.2,"buy_hold_index":136.1},{"month":"2024-01","strategy_index":128.2,"buy_hold_index":138.2},{"month":"2024-02","strategy_index":134.9,"buy_hold_index":145.5},{"month":"2024-03","strategy_index":138.8,"buy_hold_index":149.7},{"month":"2024-04","strategy_index":133.2,"buy_hold_index":143.7},{"month":"2024-05","strategy_index":140,"buy_hold_index":151},{"month":"2024-06","strategy_index":144.5,"buy_hold_index":155.8},{"month":"2024-07","strategy_index":146.2,"buy_hold_index":157.7},{"month":"2024-08","strategy_index":149.6,"buy_hold_index":161.4},{"month":"2024-09","strategy_index":152.3,"buy_hold_index":164.3},{"month":"2024-10","strategy_index":150.9,"buy_hold_index":162.8},{"month":"2024-11","strategy_index":159.9,"buy_hold_index":172.5},{"month":"2024-12","strategy_index":155.6,"buy_hold_index":167.8},{"month":"2025-01","strategy_index":159.7,"buy_hold_index":172.3},{"month":"2025-02","strategy_index":157.7,"buy_hold_index":170.1},{"month":"2025-03","strategy_index":147.4,"buy_hold_index":160.1},{"month":"2025-04","strategy_index":147.4,"buy_hold_index":158.8},{"month":"2025-05","strategy_index":149,"buy_hold_index":168.7},{"month":"2025-06","strategy_index":156.2,"buy_hold_index":176.9},{"month":"2025-07","strategy_index":159.8,"buy_hold_index":181},{"month":"2025-08","strategy_index":163.1,"buy_hold_index":184.7},{"month":"2025-09","strategy_index":168.4,"buy_hold_index":190.7},{"month":"2025-10","strategy_index":172.4,"buy_hold_index":195.3},{"month":"2025-11","strategy_index":172.8,"buy_hold_index":195.6},{"month":"2025-12","strategy_index":172.4,"buy_hold_index":195.2},{"month":"2026-01","strategy_index":174.9,"buy_hold_index":198.1},{"month":"2026-02","strategy_index":173.4,"buy_hold_index":196.4},{"month":"2026-03","strategy_index":166.8,"buy_hold_index":186.2},{"month":"2026-04","strategy_index":177.3,"buy_hold_index":205.7},{"month":"2026-05","strategy_index":186.6,"buy_hold_index":216.6},{"month":"2026-06","strategy_index":184.3,"buy_hold_index":213.8},{"month":"2026-07","strategy_index":184.3,"buy_hold_index":213.9},{"month":"2026-08","strategy_index":189.3,"buy_hold_index":219.6},{"month":"2026-09","strategy_index":188.2,"buy_hold_index":218.3}],"shape":"series","sql":"WITH px AS (\n    SELECT\n        date,\n        toFloat64(close) AS c\n    FROM global_markets.stocks_daily_aggs\n    WHERE ticker = 'SPY'\n      AND date >= '2019-10-01'\n      AND date <  '2026-10-01'\n),\nma AS (\n    SELECT\n        date,\n        c,\n        avg(c) OVER (ORDER BY date ROWS BETWEEN 199 PRECEDING AND CURRENT ROW) AS ma_200\n    FROM px\n),\nsig AS (\n    SELECT\n        date,\n        c,\n        any(c)                    OVER (ORDER BY date ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prev_c,\n        any(if(c > ma_200, 1, 0)) OVER (ORDER BY date ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS held\n    FROM ma\n),\ndaily AS (\n    SELECT\n        date,\n        held * (c / prev_c - 1) AS r_rule,\n        c / prev_c - 1          AS r_hold\n    FROM sig\n    WHERE date >= '2020-09-01'\n      AND prev_c > 0\n),\ncum AS (\n    SELECT\n        date,\n        exp(sum(log(1 + r_rule)) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)) AS eq_rule,\n        exp(sum(log(1 + r_hold)) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)) AS eq_hold\n    FROM daily\n)\nSELECT\n    formatDateTime(toStartOfMonth(date), '%Y-%m') AS month,\n    round(argMax(eq_rule, date) * 100, 1)         AS strategy_index,\n    round(argMax(eq_hold, date) * 100, 1)         AS buy_hold_index\nFROM cum\nGROUP BY month\nORDER BY month","computed_at":"2026-10-01T16:05:19.632576+00:00","elapsed":0.004373229}