trading2026-08-10Β·8 minΒ·46/68

Price Volume Trend Backtest on BTC/USDT: the Volume Family's Fifth Consecutive Failure

PVT on real hourly BTC/USDT 2023: +31.73% naive, -15.66% after fees and funding, -88.57% at 25bp across 399 trades. The volume trend family is now 0-for-5 β€” OBV, Force Index, CMF, A/D, and PVT all fail identically.

Price Volume Trend Backtest on BTC/USDT (2023, hourly, real fees)

The Price Volume Trend is OBV's smarter sibling: instead of adding the full bar's volume to the running total, it adds volume scaled by the percentage price move, so a 1% day contributes 1% of its volume and a 10% day contributes 10Γ— more. More information, more sensitivity β€” and, on hourly crypto, more trades. It failed exactly like the other four volume rules. The volume family is now 0-for-5. Strategy Lab #59.

The setup

PVT = cumulative sum of (close pct-change Γ— volume). Long when PVT is above its 20-bar EMA. Same engine, same costs.

Results

StrategyCategoryTotal returnCAGRMaxDDSharpeTrades
pvtvolume-15.66%-15.66%-45.99%-0.37399

PVT vs buy & hold (2023, hourly, BTC/USDT)

The fee bill

| Scenario | Cost/leg | Total return | MaxDD | Sharpe | Trades | |---|---:|---:|---:|---:|---:|---:| | naive (zero cost) | 0.00% | +31.73% | -29.55% | 1.02 | 399 | | taker fee 0.05%/leg | 0.05% | -11.62% | -44.67% | -0.23 | 399 | | + funding 0.01%/8h | 0.05% | -15.66% | -45.99% | -0.37 | 399 | | + slippage 10bp/leg | 0.15% | -62.06% | -67.86% | -2.85 | 399 | | + slippage 25bp/leg | 0.30% | -88.57% | -89.37% | -6.42 | 399 |

The pct-scaled PVT traded 399 times β€” fewer than OBV's 734, but the lab has now measured the whole spectrum and it doesn't matter whether the volume rule is primitive (OBV), range-weighted (A/D), sign-flipping (CMF/Force), or percentage-scaled (PVT): a volume accumulation line above its moving average flips its sign on hourly bars too often to survive costs. PVT's +31.73% gross β€” the smallest of the five β€” turned into -15.66% net and a drawdown twice as deep as holding's.

The volume family verdict, finalized

StrategyPostTradesNaiveFees+funding25bp
MFI reversion2936+18.87%+9.01%-8.98%
Force Index33507+43.34%-17.50%-93.47%
CMF36557+84.53%-0.00%-93.84%
PVT (this)β€”399+31.73%-15.66%-88.57%
A/D Line51694+59.88%-24.35%-97.65%
OBV16734+63.78%-24.95%-98.10%

Five trend-following volume rules, five failures, every net result between -0.00% and -24.95%. The family conclusion from post 36 is now closed: on hourly crypto, volume-weighted trend signals have no net edge after costs. The single exception in the family remains the one that barely trades (MFI reversion, 36 trades, +9.01%).

What this does NOT prove

  • PVT's divergence use (price new high, PVT not) is a different and legitimate application, untested here.
  • On daily bars, trade count would roughly halve and β€” following the lab's consistent pattern β€” likely flip the result. Nothing here proves it for PVT specifically.
  • One pair, one year, one regime.

Code

from backtest_base import fetch, backtest_signal, metrics
from strategy import sig_pvt

df = fetch("BTCUSDT", "binance", "2023-01-01", "2023-12-31", "1h")
signal = sig_pvt(df, span=20)

res = backtest_signal(df, signal, cost_per_leg=0.0005, funding_per_bar=0.0000125)
print(metrics(res, 8760))

Reproduce it

cd blog-drafts/scripts
python gen_post_assets.py --ids 59

Data: Binance public API, hourly OHLCV, 8,735 bars. Tables above reproduce exactly from this command.

This is a backtest on historical data, not investment advice. Past performance does not predict future results.