VWAP on crypto: neither the trend nor the dip rule paid
Holding while the price was above the day's VWAP lost money on every bar length. Buying 2% below VWAP and selling back at it was the only rule that ever stayed above water after costs, and only by a few percent a year on a few short bar lengths.
How it works
VWAP, the volume-weighted average price, is the average price of every trade since the start of the session, weighted by size. Here a session is one Upbit day, which starts at 09:00 Korean time. Intraday traders read a price above VWAP as strength and a deep dip below it as a bargain.
What we tested
- Trend: hold while the close is above the day's VWAP: 1 setting.
- Dip: buy when the close is 0.3%, 0.5%, 1% or 2% below VWAP; sell when it closes back above VWAP: 4 settings.
Every setting was run on eight bar lengths, from 1 minute to 4 hours, on Upbit's Korean-won market: 12 large coins from January 2024 to October 2026 (from January 2025 on 5- and 10-minute bars; 8 coins from April 2026 on 1- and 3-minute bars). Signals are taken at a bar's close and filled at the next bar's open, spot buying only, with equal money in each coin. Every trade pays Upbit's 0.05% fee plus one price tick of slippage. That makes 5 single-indicator settings, and 2,979 more combinations where the best of them were given a filter or an exit rule. Full method.
Results by setting and bar length
Each cell is the yearly return after costs over the whole period. An outlined cell passed the two-period test: at least +10% a year in both the first and the second period, with the second keeping at least half of the first.
Return per year after costs, %
Sea level (0) is break-even after costs: blue is under water, green to brown is land.
Settings above water after costs: 1 of 5 on 30-minute bars, 1 of 5 on 3-minute bars, 1 of 5 on 1-minute bars, and none on 4-hour, 1-hour, 15-minute, 10-minute and 5-minute bars. None passed the two-period test.
| Setting | 1m | 3m | 5m | 10m | 15m | 30m | 1h | 4h |
|---|---|---|---|---|---|---|---|---|
| Close above the day's VWAP | −100.0 | −100.0 | −100.0 | −100.0 | −100.0 | −99.6 | −97.0 | −67.1 |
| Buy 0.3% below VWAP, sell back at VWAP | −100.0 | −100.0 | −100.0 | −99.8 | −98.1 | −93.4 | −84.2 | −65.7 |
| Buy 0.5% below VWAP, sell back at VWAP | −100.0 | −100.0 | −99.7 | −98.5 | −92.9 | −84.9 | −73.5 | −59.5 |
| Buy 1% below VWAP, sell back at VWAP | −83.6 | −73.3 | −85.2 | −80.3 | −63.7 | −53.1 | −44.9 | −44.8 |
| Buy 2% below VWAP, sell back at VWAP | +4.8 | +0.4 | −40.9 | −37.2 | −4.9 | +1.7 | −9.9 | −14.5 |
Adding filters and exit rules
On each bar length, the settings with the best first-period results were combined with up to two filters (trend on a longer chart, ADX, volume, RSI range, Bitcoin's trend) or one filter and an exit rule (stop-loss, trailing stop, take-profit, time limit). Combinations were only built where this indicator ranked among the leaders in the first period.
| Bars | Combinations that traded | Passed | Best that passed | Return a year | Worst fall | Second period |
|---|---|---|---|---|---|---|
| 1-minute | 84 | 0 | None passed. Best overall: −26.4% a year | |||
| 3-minute | 579 | 0 | None passed. Best overall: −1.3% a year | |||
| 5-minute | 579 | 0 | None passed. Best overall: −3.2% a year | |||
| 10-minute | 579 | 0 | None passed. Best overall: −2.5% a year | |||
| 15-minute | 579 | 0 | None passed. Best overall: +20.0% a year | |||
| 30-minute | 579 | 0 | None passed. Best overall: +32.1% a year | |||
What we learned
- The trend rule lost on every bar length; on 1-hour bars it lost −97.0% a year.
- Dip buying won often, a median of about 56% of trades on 1-hour bars, but the dips that kept going cost more than the bounces paid.
- Filters did not rescue it: on 30-minute bars the best combination made +32.1% a year, but +70.9% in the first period and −2.3% in the second, so it failed the two-period test.
Questions
Does VWAP work for crypto day trading?
Not as a stand-alone rule in our tests, on any bar length from 1 minute to 4 hours. Professional traders use VWAP mainly as a benchmark for execution prices, which is a different job.
Every setup with this indicator in the explorer: 4h 1h 30m 15m