VWAP Strategies
Notes
- 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.
- 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. - 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Paper: Volume Weighted Average Price (VWAP): The Holy Grail for Day Trading Systems, Carlo Zarattini and Andrew Aziz (2023).