Volume & money flow · daily rule · Indexes & ETFs
Volume Flow Indicator on S&P 500 ETF
What the play says
Latest reading: VFI 12.73
SPY with the play, last two years
Shading shows the play's call from the close that triggered it.
Volume Flow Indicator (130)
Dashed line at 0.
Growth of $10,000 since 2005
Log scale. After trading costs, with T-bill interest while out.
The record
The play against buying and holding SPY over exactly the same dates, after costs.
| Play, since 2005 | Hold, since 2005 | Play, 5 yrs | Hold, 5 yrs | |
|---|---|---|---|---|
| Annual return | +6.5% | +11.1% | +9.4% | +13.9% |
| Total return | +292% | +883% | +56% | +91% |
| Worst drawdown | −39.4% | −55.2% | −10.0% | −24.5% |
| Volatility | 11.5% | 18.9% | 9.7% | 17.1% |
| Sharpe ratio | 0.45 | 0.56 | 0.59 | 0.62 |
| Time invested | 61% | 100% | ||
| Switches per year | 5.4 | 0 |
Every call, graded
Right on 37 of 118 closed calls (31%). In calls averaged +2.5%; out calls saw SPY move +1.9% on average.
| Called | Call | Price | Until | SPY moved | Result |
|---|---|---|---|---|---|
| Aug 13, 2026 | IN | $775.95 | now | +0.3% | open |
| Jun 8, 2026 | OUT | $735.49 | Aug 13, 2026 | +5.5% | ✕ wrong |
| Jun 1, 2026 | IN | $754.72 | Jun 8, 2026 | −2.5% | ✕ wrong |
| Mar 16, 2026 | OUT | $663.85 | Jun 1, 2026 | +13.7% | ✕ wrong |
| Jun 30, 2025 | IN | $609.57 | Mar 16, 2026 | +8.9% | ✓ right |
| Mar 21, 2025 | OUT | $554.78 | Jun 30, 2025 | +9.9% | ✕ wrong |
| Mar 14, 2025 | IN | $551.97 | Mar 21, 2025 | +0.5% | ✓ right |
| Mar 11, 2025 | OUT | $545.21 | Mar 14, 2025 | +1.2% | ✕ wrong |
| May 30, 2023 | IN | $402.30 | Mar 11, 2025 | +35.5% | ✓ right |
| May 24, 2023 | OUT | $393.60 | May 30, 2023 | +2.2% | ✕ wrong |
| May 11, 2023 | IN | $394.60 | May 24, 2023 | −0.3% | ✕ wrong |
| May 4, 2023 | OUT | $387.89 | May 11, 2023 | +1.7% | ✕ wrong |
An in call is right when the price rose before the next call; an out call is right when it fell. The latest 12 of 119 calls shown.
How the play works
- Each day's volume counts as buying if the typical price (the average of high, low and close) rose by more than a small cutoff, as selling if it fell by more than the cutoff, and as nothing otherwise. The cutoff is 0.2 times the stock's recent daily volatility.
- Volume is capped at 2.5 times its 130-day average. The VFI is the 130-day sum of the signed volume divided by average volume, smoothed over 3 days.
- In when the VFI is above zero.
- Out when it is below zero.
Settings are Katsanos' published daily defaults: 130 days, cutoff 0.2, volume cap 2.5, smoothing 3. The 30-day volatility window comes from the standard published code.
Average volume is the 130-day average up to the day before, as in the published code.
Katsanos also stresses divergences, which are not used.
Where the rules come from
The case against
Valeriy Zakamulin tested moving-average timing on up to 155 years of U.S. stock data and found no statistically significant edge in the second half of that record. The rules earned their keep in a few severe bear markets and lagged buy and hold for long stretches in between.