{"slug":"do-volume-indicators-predict-anything","qid":"obv_trace","label":"obv_trace","post_title":"do-volume-indicators-predict-anything","post_url":"/blog/do-volume-indicators-predict-anything#q-obv_trace","columns":["date","price_change_pct","obv_ratio","vpt_ratio"],"rows":[{"date":"2026-04-01","price_change_pct":0,"obv_ratio":0,"vpt_ratio":0},{"date":"2026-04-02","price_change_pct":0.11,"obv_ratio":0.59,"vpt_ratio":0.07},{"date":"2026-04-06","price_change_pct":1.26,"obv_ratio":1.14,"vpt_ratio":0.7},{"date":"2026-04-07","price_change_pct":-0.83,"obv_ratio":-0.03,"vpt_ratio":-1.72},{"date":"2026-04-08","price_change_pct":1.28,"obv_ratio":0.74,"vpt_ratio":-0.08},{"date":"2026-04-09","price_change_pct":1.9,"obv_ratio":1.27,"vpt_ratio":0.25},{"date":"2026-04-10","price_change_pct":1.9,"obv_ratio":0.68,"vpt_ratio":0.25},{"date":"2026-04-13","price_change_pct":1.4,"obv_ratio":0,"vpt_ratio":-0.09},{"date":"2026-04-14","price_change_pct":1.25,"obv_ratio":-0.91,"vpt_ratio":-0.22},{"date":"2026-04-15","price_change_pct":4.22,"obv_ratio":0.03,"vpt_ratio":2.54},{"date":"2026-04-16","price_change_pct":3.04,"obv_ratio":-0.79,"vpt_ratio":1.61},{"date":"2026-04-17","price_change_pct":5.71,"obv_ratio":0.37,"vpt_ratio":4.62},{"date":"2026-04-20","price_change_pct":6.81,"obv_ratio":1.06,"vpt_ratio":5.33},{"date":"2026-04-21","price_change_pct":4.12,"obv_ratio":0.12,"vpt_ratio":2.95},{"date":"2026-04-22","price_change_pct":6.86,"obv_ratio":0.93,"vpt_ratio":5.09},{"date":"2026-04-23","price_change_pct":6.96,"obv_ratio":1.56,"vpt_ratio":5.15},{"date":"2026-04-24","price_change_pct":6.04,"obv_ratio":0.84,"vpt_ratio":4.53},{"date":"2026-04-27","price_change_pct":4.69,"obv_ratio":0.06,"vpt_ratio":3.54},{"date":"2026-04-28","price_change_pct":5.9,"obv_ratio":0.82,"vpt_ratio":4.42},{"date":"2026-04-29","price_change_pct":5.69,"obv_ratio":0.26,"vpt_ratio":4.3},{"date":"2026-04-30","price_change_pct":6.15,"obv_ratio":1.99,"vpt_ratio":5.06},{"date":"2026-05-01","price_change_pct":9.59,"obv_ratio":3.49,"vpt_ratio":9.94},{"date":"2026-05-04","price_change_pct":8.29,"obv_ratio":2.61,"vpt_ratio":8.9},{"date":"2026-05-05","price_change_pct":11.17,"obv_ratio":3.54,"vpt_ratio":11.36},{"date":"2026-05-06","price_change_pct":12.47,"obv_ratio":4.64,"vpt_ratio":12.65},{"date":"2026-05-07","price_change_pct":12.44,"obv_ratio":3.79,"vpt_ratio":12.63},{"date":"2026-05-08","price_change_pct":14.74,"obv_ratio":4.78,"vpt_ratio":14.66},{"date":"2026-05-11","price_change_pct":14.49,"obv_ratio":3.98,"vpt_ratio":14.49},{"date":"2026-05-12","price_change_pct":15.32,"obv_ratio":4.85,"vpt_ratio":15.11},{"date":"2026-05-13","price_change_pct":16.92,"obv_ratio":5.84,"vpt_ratio":16.48},{"date":"2026-05-14","price_change_pct":16.66,"obv_ratio":5.17,"vpt_ratio":16.34},{"date":"2026-05-15","price_change_pct":17.45,"obv_ratio":6.21,"vpt_ratio":17.04},{"date":"2026-05-18","price_change_pct":16.51,"obv_ratio":5.56,"vpt_ratio":16.52},{"date":"2026-05-19","price_change_pct":16.95,"obv_ratio":6.35,"vpt_ratio":16.82},{"date":"2026-05-20","price_change_pct":18.24,"obv_ratio":7.07,"vpt_ratio":17.61},{"date":"2026-05-21","price_change_pct":19.31,"obv_ratio":7.88,"vpt_ratio":18.34},{"date":"2026-05-22","price_change_pct":20.81,"obv_ratio":8.71,"vpt_ratio":19.38},{"date":"2026-05-26","price_change_pct":20.62,"obv_ratio":7.8,"vpt_ratio":19.23},{"date":"2026-05-27","price_change_pct":21.6,"obv_ratio":8.76,"vpt_ratio":20.02},{"date":"2026-05-28","price_change_pct":22.25,"obv_ratio":9.68,"vpt_ratio":20.51},{"date":"2026-05-29","price_change_pct":22.07,"obv_ratio":8.36,"vpt_ratio":20.32},{"date":"2026-06-01","price_change_pct":19.83,"obv_ratio":7.44,"vpt_ratio":18.62},{"date":"2026-06-02","price_change_pct":23.3,"obv_ratio":8.29,"vpt_ratio":21.07},{"date":"2026-06-03","price_change_pct":21.37,"obv_ratio":7.33,"vpt_ratio":19.57},{"date":"2026-06-04","price_change_pct":21.75,"obv_ratio":8.17,"vpt_ratio":19.83},{"date":"2026-06-05","price_change_pct":20.23,"obv_ratio":6.94,"vpt_ratio":18.29},{"date":"2026-06-08","price_change_pct":17.96,"obv_ratio":5.47,"vpt_ratio":15.52},{"date":"2026-06-09","price_change_pct":13.66,"obv_ratio":4.15,"vpt_ratio":10.71},{"date":"2026-06-10","price_change_pct":14.06,"obv_ratio":5.15,"vpt_ratio":11.06},{"date":"2026-06-11","price_change_pct":15.65,"obv_ratio":5.95,"vpt_ratio":12.17},{"date":"2026-06-12","price_change_pct":13.89,"obv_ratio":5.22,"vpt_ratio":11.06},{"date":"2026-06-15","price_change_pct":15.96,"obv_ratio":6.08,"vpt_ratio":12.63},{"date":"2026-06-16","price_change_pct":17.06,"obv_ratio":6.83,"vpt_ratio":13.34},{"date":"2026-06-17","price_change_pct":15.77,"obv_ratio":6.03,"vpt_ratio":12.46},{"date":"2026-06-18","price_change_pct":16.58,"obv_ratio":7.65,"vpt_ratio":13.58},{"date":"2026-06-22","price_change_pct":16.19,"obv_ratio":6.8,"vpt_ratio":13.3},{"date":"2026-06-23","price_change_pct":15.13,"obv_ratio":5.82,"vpt_ratio":12.41},{"date":"2026-06-24","price_change_pct":14.65,"obv_ratio":4.82,"vpt_ratio":11.99},{"date":"2026-06-25","price_change_pct":7.64,"obv_ratio":2.8,"vpt_ratio":-0.37},{"date":"2026-06-26","price_change_pct":11.01,"obv_ratio":7.73,"vpt_ratio":15.1},{"date":"2026-06-29","price_change_pct":10.21,"obv_ratio":6.48,"vpt_ratio":14.2},{"date":"2026-06-30","price_change_pct":13.19,"obv_ratio":7.71,"vpt_ratio":17.51}],"shape":"series","sql":"WITH\n    bars AS\n    (\n        SELECT\n            date,\n            max(toFloat64(close))  AS close,\n            max(toFloat64(volume)) AS volume\n        FROM global_markets.stocks_daily_aggs\n        WHERE ticker = 'AAPL'\n          AND date >= '2026-04-01'\n          AND date <= '2026-06-30'\n        GROUP BY date\n    ),\n    stepped AS\n    (\n        SELECT\n            date,\n            close,\n            volume,\n            lagInFrame(close, 1) OVER (ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close\n        FROM bars\n    ),\n    running AS\n    (\n        SELECT\n            date,\n            close,\n            first_value(close) OVER (ORDER BY date ASC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS first_close,\n            avg(volume)        OVER (ORDER BY date ASC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS avg_volume,\n            sum(if(prev_close = 0, 0, if(close > prev_close, volume, if(close < prev_close, -volume, 0))))\n                OVER (ORDER BY date ASC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS obv_shares,\n            sum(if(prev_close = 0, 0, 100 * volume * (close / prev_close - 1)))\n                OVER (ORDER BY date ASC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS vpt_shares\n        FROM stepped\n    )\nSELECT\n    toString(date)                            AS date,\n    round(100 * (close / first_close - 1), 2) AS price_change_pct,\n    round(obv_shares / avg_volume, 2)         AS obv_ratio,\n    round(vpt_shares / avg_volume, 2)         AS vpt_ratio\nFROM running\nORDER BY date ASC","computed_at":"2026-10-01T16:15:05.807982+00:00","elapsed":0.005001798}