Vigilant Asset Allocation (VAA)1. Where VAA comes from
The basic observation behind VAA is not new. Jegadeesh and Titman showed in 1993 that stocks with strong recent returns keep outperforming for roughly three to twelve months. That finding was initially confined to equities, but Asness, Moskowitz and Pedersen (2013) later confirmed that the same pattern holds across bonds, currencies and commodities. Momentum, it turns out, is not just a stock-picking anomaly. It works at the asset-class level too.
Moskowitz, Ooi and Pedersen (2012) took this one step further. They looked at time-series momentum rather than cross-sectional momentum. The distinction matters: cross-sectional momentum asks "which asset is doing best?", while time-series momentum asks "is this asset going up at all?". VAA uses both questions, but the time-series version is what drives the breadth filter.
Faber (2007) probably deserves credit for bringing momentum into mainstream tactical allocation. His rule was simple: hold an asset when it trades above its ten-month average, sell when it drops below. Crude, but it cut drawdowns significantly. Antonacci (2014) refined this into dual momentum, combining trend direction with relative strength across two universes.
Keller and Keuning (2017) built on all of this but added something the earlier models lacked: a breadth dimension. Instead of looking at each asset independently, they count how many offensive assets carry positive momentum. If even one drops below zero (in the aggressive B=1 variant), the entire allocation goes defensive. The reasoning is straightforward. When breadth deteriorates, trouble is usually on the way. Waiting for every asset to turn negative is waiting too long.
In their original backtest (1970-2016, using Shiller extended data for the early period and ETF prices from inception), VAA-G4 produced roughly 17.7% annualised with a maximum drawdown of about 16.1% (Keller and Keuning, 2017, Table 2). These are in-sample numbers. They tell you what happened, not what will happen.
2. How the model works
2.1 Momentum scoring
Every asset gets a 13612W score, a weighted combination of four return lookbacks:
mom = 12 * r1 + 4 * r3 + 2 * r6 + r12
The r values are simple returns: r1 = close / close - 1, and so on for 63, 126 and 252 bars. The one-month return gets the heaviest weight (12), the twelve-month return the lightest (1). Recent momentum matters more, but the yearly anchor keeps the score from overreacting to short-term noise.
There is no normalisation. The raw score is used only for two things: ranking assets within each universe, and checking whether it is positive or negative for the breadth count.
2.2 The two universes
Keller and Keuning specified these defaults:
Offensive (growth):
- SPY (S&P 500)
- EFA (international developed)
- EEM (emerging markets)
- AGG (US aggregate bonds)
Defensive (preservation):
- LQD (investment-grade corporate bonds)
- IEF (7-10 year treasuries)
- SHY (1-3 year treasuries)
All seven are changeable in the settings. If you swap in other ETFs, make sure they have enough history.
2.3 The breadth rule
Each day the indicator counts how many offensive assets have positive momentum. Call the count of non-positive ones n_negative. The rule:
- n_negative >= B (default 1): go to the top defensive asset
- n_negative < B: go to the top offensive asset
With B=1, one single negative asset triggers the switch. That is aggressive in the sense of being quick to flee. Keller and Keuning argue this is the right trade-off. Breadth erosion tends to precede broader sell-offs, so early rotation is worth the occasional whipsaw.
2.4 Rebalancing
The paper prescribes monthly rebalancing. The indicator locks the allocation at the close of the last trading day of each month. Everything that happens between rebalances is monitoring only. The dashboard shows both the locked position ("held") and what the model would do today ("live").
Daily rebalancing is available as an option. It is not what the paper tested.
2.5 Ties
When two assets have the exact same momentum score, the one listed first wins. Sounds arbitrary because it is. But four overlapping return windows make exact ties rare in practice.
3. What you need
- TradingView, any plan (free works, Pro lifts the alert cap)
- A daily chart. The lookbacks assume daily bars. On weekly or intraday charts the periods are wrong and the dashboard flags it.
- 252 bars of history for every symbol. Until that is available, the model shows "warming up".
4. Setup and settings
4.1 Getting started
Add the indicator to any daily chart via the TradingView indicator search. It loads with the Keller/Keuning defaults. The status row at the bottom of the dashboard tells you when the model is ready.
4.2 Strategy
Breadth Threshold (B): 1 matches the paper. Raising it to 2 means two assets have to go negative before the model rotates. Fewer whipsaws, slower reaction.
Monthly Rebalancing: On by default. Off gives you daily updates, which is useful for experimentation but not what the literature tested.
4.3 Symbols
Offensive and defensive universes are fully configurable. If you replace an ETF, check that TradingView has daily data going back at least a year.
4.4 Visuals
Background Mode: "Position" tints the background green (offensive) or red (defensive). "Off" removes it.
Candle Colouring: Paints candles by breadth strength. Full green at 4/4 positive, full red at 0/4, faded tones in between. Transparency is adjustable.
Color Theme: Eight palettes. All of them work in both dark and light mode.
Glow Effect: Adds layered transparent lines behind the main plot. Useful if the signal gets lost in a busy chart. Off by default.
4.5 Dashboard
The table in the top right (moveable) shows:
- Regime: offensive or defensive, with the breadth count
- Allocate: which specific ETF to hold (100% always)
- Live: intra-month reading (only visible in monthly mode)
- Individual asset rows: 13612W scores and a trend arrow (up, down, or flat compared to 5 bars ago)
- Status: "active", "warming up", or "wrong timeframe"
4.6 Alerts
Five conditions, all behind a master switch:
- Regime switches to offensive at month-end
- Regime switches to defensive at month-end
- Held asset changed (same regime, different pick)
- Live breadth dropped between rebalances
- Live breadth recovered between rebalances
The live alerts are early warnings, not trade signals. They tell you the next rebalance might produce a change.
5. Reading the chart
The step line maps the breadth count to a 0-10 scale:
| Breadth | Value | What it means |
| 4/4 positive | 0.0 | Everything trending up |
| 3/4 positive | 2.5 | One weak link, still offensive with B=1 |
| 2/4 positive | 5.0 | Defensive if B is 2 or below |
| 1/4 positive | 7.5 | Broad weakness |
| 0/4 positive | 10.0 | Nothing working |
The threshold line sits at B * 2.5. Above it means defensive. The zone fill below the threshold marks the offensive region.
One thing to keep in mind: the distances between these steps do not mean anything quantitative. 5.0 is not "twice as bad" as 2.5. It is an ordinal display, not a risk score.
6. How to actually use it
The simplest workflow: check the dashboard on the last trading day of the month. Look at the "Allocate" row. Buy that ETF at the open of the next session. Done until next month.
If you want a heads-up, turn on the live alerts. A "breadth dropped" alert mid-month tells you the next rebalance might flip regimes. That gives you time to plan, not to act early. The month-end values are what count.
VAA does not know about your taxes, your broker fees, or your risk tolerance. Treat it as one input to your decision process, not the whole process.
7. What the model does not do
It does not model execution. There is no bid-ask spread, no slippage, no market impact.
It cannot protect you from whipsaws. Momentum systems by nature struggle in choppy, directionless markets. The breadth filter helps, but a month where sentiment flips back and forth will still produce unnecessary trades.
Monthly rebalancing is both a feature and a weakness. It keeps you from overtrading, but it also means a crash in the middle of a month does not trigger any action until month-end.
The backtests in the paper used extended data that goes back to 1970. The actual ETFs (EEM, AGG) only started trading in 2003. TradingView data will not replicate the full historical period.
The model is always invested. There is no cash option. You are either in the top offensive or the top defensive ETF.
Momentum can stop working. Correlations change. What the academic literature documents as a persistent anomaly can go through multi-year stretches of underperformance. The 2009 recovery, for instance, was fast enough to catch most trend-following systems off-guard.
8. Common questions
Why does it say "warming up"?
The model needs 252 daily bars per symbol. Loading the indicator on a chart without enough history means it cannot compute the twelve-month return component.
Can I run this on a 4-hour chart?
You can, but 21 bars on a 4-hour chart is not a month. The lookbacks will be wrong. The dashboard will flag this.
I changed the symbols and the readings look off.
Make sure the replacement ETFs actually have a year of daily data on TradingView. Some regional ETFs or newer funds do not.
The live reading disagrees with the held position.
That is expected in monthly mode. The held position only updates at month-end. The live reading shows what would happen if you rebalanced today. They diverge by design.
Should I trade every time the live reading changes?
No. Unless you deliberately turned off monthly rebalancing, the live reading is for awareness, not for execution.
References
Antonacci, G. (2014) Dual Momentum Investing: An Innovative Strategy for Higher Returns with Lower Risk. New York: McGraw-Hill.
Asness, C.S., Moskowitz, T.J. and Pedersen, L.H. (2013) 'Value and Momentum Everywhere', The Journal of Finance, 68(3), pp. 929-985. doi:10.1111/jofi.12021.
Faber, M.T. (2007) 'A Quantitative Approach to Tactical Asset Allocation', The Journal of Wealth Management, 9(4), pp. 69-79.
Jegadeesh, N. and Titman, S. (1993) 'Returns to Buying Winners and Selling Losers: Implications for Stock Market Efficiency', The Journal of Finance, 48(1), pp. 65-91. doi:10.1111/j.1540-6261.1993.tb04702.x.
Keller, W. and Keuning, J.W. (2017) 'Breadth Momentum and Vigilant Asset Allocation (VAA): Winning More by Losing Less', SSRN Electronic Journal. doi:10.2139/ssrn.3002624.
Moskowitz, T.J., Ooi, Y.H. and Pedersen, L.H. (2012) 'Time series momentum', Journal of Financial Economics, 104(2), pp. 228-250. doi:10.1016/j.jfineco.2011.11.003.
Indicador Pine Script®






















