VWAP Strategies

Notes

  1. The paper’s rule is replicated without look-ahead: each completed bar is compared with regular-session VWAP, then the position changes at the next bar’s open. A close above VWAP means long; below means short. No position survives the selected close.
  2. VWAP is reconstructed each session as cumulative ((high + low + close) / 3) × volume / cumulative volume. Premarket and postmarket bars are excluded. The no-trade band leaves the strategy flat while price is within the selected number of basis points of VWAP; zero reproduces the paper.
  3. Returns use 100% of current equity with fractional shares fixed from entry through exit. Costs are charged at both executions; a reversal closes one trade and opens another. Annualized statistics and trade counts use the observed session frequency over the displayed calendar span rather than assuming 252 sessions every year. Per-order minimums, caps, and exchange or regulatory fees are not modeled. The paper assumes $0.0005/share and no slippage—both unusually favorable, so the controls make the assumptions visible.
  4. Multiple-ticker portfolios use the intersection of observed sessions. Equal targets are restored every common session and do not use return history, so their rolling-window, warm-up, and rebalance controls are disabled. For dynamic methods, the selected rebalance interval controls when target weights are recomputed and traded; zero allocates once, then lets ticker weights drift. Inverse-volatility and long-only, fully invested Kelly targets use prior net daily ticker-strategy returns from the selected rolling window. Singular Kelly covariance estimates fall back to inverse volatility rather than receiving a hidden ridge penalty. The optional warm-up holds out one full rolling window; without it, allocation starts from whatever prior-only history exists. A zero-session window makes dynamic allocation fall back to equal weights. Allocation cost is charged to net returns from one-way turnover at each rebalance; initial deployment is excluded. Gross returns and the same-weight buy-and-hold comparison exclude allocation costs.
  5. Massive one-minute QQQ history in this database begins in April 2021, not January 2018; availability varies by ticker. Only the latest continuous history is used: a gap longer than 45 calendar days starts a new security era, preventing reused tickers from joining unrelated investments. The displayed period is therefore an out-of-sample-ish partial replication, not a reproduction of the paper’s 2018–2023 headline. Intraday calculations use raw historical prices; buy-and-hold is split-adjusted. Dividends and borrow fees are not included.
  6. A minute without a qualifying trade has no aggregate bar. It is treated as market inactivity: VWAP and the position remain unchanged until the next observed bar, whose open is the next possible execution price.
  7. The optional overtrading limit keeps no more than X accepted entries in any rolling 60-minute window; zero leaves entries unlimited. In multiple-ticker portfolios the limit applies independently to each ticker strategy. Returns, entry counts, the entry charts, and intraday markers all reflect the limit.
  8. The paired entry charts show one point per session. The first compares net return with entry-count-weighted average entry time, with point size showing entry count. The second compares net return directly with entry count. Select a point to load that session in the intraday chart.
  9. The sensitivity scan changes one assumption at a time and ranks net Sharpe. For the overtrading limit it tests at most three distinct, data-derived caps: the lower quartile, median, and upper quartile of the observed daily peak rolling-hour entry count; if the current run is capped, it also tests unlimited entries. This avoids an exhaustive parameter sweep. The scan is a sensitivity check, not evidence that the highest-ranked setting will persist.
  10. Paper: Volume Weighted Average Price (VWAP): The Holy Grail for Day Trading Systems, Carlo Zarattini and Andrew Aziz (2023).