The honest pitch for tactical allocation goes like this: pick a strategy with a 25 year track record, follow it monthly, accept that it will spend roughly a third of its life under water versus its own high water mark. That last sentence is the part most people skip when they pitch you on a single strategy.
The question we kept getting from Pro users was: do I really have to pick one? What if you ran five sensible strategies side by side, and let the data tell you, every month, which two or three deserve more weight right now?
That is what the Walk-Forward portfolio tool in BestFolio does. This post walks through how it works, builds two real example portfolios using only strategies we have publicly disclosed (one conservative, one aggressive), and shows the honest before-and-after numbers on a 26 to 30 year out-of-sample window.
What "walk-forward" actually means
Walk-forward is the closest thing finance has to a fairness test. The recipe:
- Pick a basket of N candidate strategies.
- Stand at any historical month t. Look back at the last 36 months of monthly returns for each strategy.
- Solve for the weights that would have maximized the chosen objective over those 36 months, subject to: weights sum to 1, no shorts, and no single strategy gets more than 40%.
- Hold those weights for exactly the next month.
- Step forward one month. Repeat steps 2 to 4. Forever.
The crucial detail is step 4: every weight you ever hold was computed using only data available at the time. Nothing peeks at the future. The result is a synthetic NAV series for the portfolio that nobody could have curve-fit, because the curve was being redrawn every single month using only the past.
This is different from "blending" a portfolio with fixed weights and rebalancing back to those weights. A fixed blend is a static answer. Walk-forward is an adaptive answer: each month it re-asks "given what each sleeve has done over the last three years, what mix should I hold next month?"
The knobs we used (no tuning, on purpose)
For both portfolios in this post we used the BestFolio defaults, with no parameter shopping to make the numbers look better:
- Lookback window: 36 months. Three years is the most common choice in academic walk-forward studies. Long enough to span a full market cycle on average, short enough to react to regime shifts.
- Max weight per strategy: 40%. Forces real diversification. Stops the optimizer from collapsing onto whichever single strategy looked best in the last 36 months.
- Rebalance: monthly.
- Optimization criterion: max Sharpe for the Conservative Sleeve. Max CAGR for the Aggressive Sleeve. Picked once, up front, to match each portfolio's stated goal. We did not run all seven criteria and pick the prettiest, that would be exactly the kind of overfitting walk-forward is supposed to avoid.
If we had let ourselves search over 12, 24, 36, 48, 60, and 72 month lookbacks and picked whichever gave the best ex-post Sharpe, we would have overfit our way into prettier numbers and a less honest story. Three years is the textbook default. We stuck with it.
Why this is genuinely hard to do in Excel
The reason almost no individual investor runs this style of portfolio is that the manual workflow is brutal. Walking through it for one of our example portfolios:
- Source 25+ years of monthly NAV data for five strategies. Each strategy has a different rule set. You need to either download monthly NAV from a data vendor (most do not publish strategy NAVs at all) or backtest each strategy yourself by downloading every constituent ETF, applying the rules, and computing the resulting NAV. For ETFs that did not exist for the full history, you need a fallback chain (mutual fund proxy, then index proxy). That is a few hundred hours of work alone.
- Align five NAV series on the same monthly grid. Different start dates, different month-end conventions, missing observations.
- Build a 36 by 5 returns matrix that rolls forward each month. Three hundred plus monthly rebalance points means three hundred plus rolling matrices.
- Solve a constrained quadratic optimization that many times. Excel's Solver add-in can do it, but you will be writing VBA to script it across every window. Each solve takes a few seconds. Each one needs equality constraint (weights sum to 1), inequality constraint (max 40% per sleeve), and non-negativity bounds.
- Apply the solved weights to the next month's returns. Out-of-sample step.
- Roll the window forward and repeat.
- Compute portfolio metrics on the resulting OOS NAV. CAGR, Sharpe, Sortino, max drawdown, Calmar, win rate, monthly turnover.
An experienced quant in Python with the right libraries can build this in a long afternoon. In Excel with VBA and Solver it is a multi-week project, and the final spreadsheet is fragile. Change one strategy and you re-do half of it.
In BestFolio Pro it is five fields and a button.
Portfolio 1: Conservative Sleeve
The first portfolio is built for investors who want the steadiest possible equity curve. We picked five tactical strategies with the lowest historical drawdowns from five different schools, and let walk-forward decide the weights.
Members:
- HAA without QQQ (Keller): hybrid asset allocation, no NASDAQ tilt
- BAA-G12 Balanced (Keller): bold asset allocation rotating between offensive and defensive baskets
- PAA Dynamic Protection (Keller): protective asset allocation with dynamic cash rotation
- Defense First (Carlson): downside-aware tactical allocation
- Tactical Permanent (Faber): trend-filtered version of the Permanent Portfolio
Out-of-sample window: 2000-04 through 2026-04 (26 years, 312 monthly rebalances).
Average weights the optimizer assigned (across all 312 months):
- Tactical Permanent: 27.9%
- BAA-G12 Balanced: 23.5%
- PAA Dynamic Protection: 20.3%
- HAA without QQQ: 15.1%
- Defense First: 13.2%
Average monthly turnover at the portfolio level was 14.5%, low for a TAA blend. The optimizer leaned on the lowest-volatility members (Tactical Permanent, BAA-G12, PAA) which makes sense for a max-Sharpe objective.
Conservative Sleeve results vs each strategy alone
| Strategy | CAGR | Sharpe | Sortino | Max DD | Calmar |
|---|---|---|---|---|---|
| WF Conservative Sleeve | 9.3% | 1.37 | 2.33 | -6.3% | 1.48 |
| HAA without QQQ (solo) | 11.7% | 1.25 | 1.92 | -9.0% | 1.30 |
| BAA-G12 Balanced (solo) | 10.8% | 1.22 | 2.04 | -11.2% | 0.96 |
| Defense First (solo) | 10.4% | 1.11 | 2.02 | -14.7% | 0.71 |
| PAA Dynamic Protection (solo) | 8.9% | 1.19 | 2.08 | -10.6% | 0.84 |
| Tactical Permanent (solo) | 6.5% | 1.21 | 2.03 | -7.0% | 0.94 |
The Conservative Sleeve beats every individual member on every risk-adjusted metric we track. Sharpe of 1.37 versus a best-in-class member of 1.25. Sortino of 2.33 versus 2.08. Calmar of 1.48 versus 1.30. Max drawdown of -6.3%, which is lower than the lowest single-strategy drawdown in the basket (Tactical Permanent at -7.0%). And it manages all of that while still beating the worst two solos on raw CAGR.
The reading: when you start from a basket of strategies that are individually conservative but use different mechanisms (Keller's hybrid signals, BAA's offensive/defensive rotation, PAA's protective cash, Carlson's downside filter, Faber's trend-filtered permanent), the optimizer finds genuinely complementary combinations. The portfolio bend is shallower than any of its parts.
Portfolio 2: Aggressive Sleeve
The second portfolio is for investors with longer horizons and higher risk tolerance, who want the maximum compounding rate the library can support. We picked four leveraged or return-stacked variants of well-known TAA strategies, plus one risk-parity-momentum sleeve as an anchor, and ran walk-forward with the max-CAGR criterion to match the aggressive intent.
Members:
- HAA Leveraged 2x (Keller): the HAA signal applied to 2x leveraged ETFs on offensive months
- Composite Momentum SmartStack (BestFolio Original): multi-asset momentum return-stacked with managed futures
- ADM SmartStack (Engineered Portfolio + BF stack): accelerating dual momentum with a gold and managed futures overlay
- VAA-G4 SmartStack (Keller + BF stack): vigilant asset allocation with the same overlay
- Risk Parity Momentum (Schwoerer): risk parity over QQQ, GLD, TLT with a momentum filter, the lowest-drawdown member of the basket
Out-of-sample window: 1995-11 through 2026-04 (30 years, 365 monthly rebalances).
Average weights:
- HAA Leveraged 2x: 31.5%
- ADM SmartStack: 18.9%
- Composite Momentum SmartStack: 18.0%
- VAA SmartStack: 17.4%
- Schwoerer RP+Momentum: 14.1%
Average monthly turnover: 13.4%. The optimizer leaned heavily on HAA Leveraged 2x (right at the 40% cap in many months, ~31% on average) because of its compelling CAGR over most rolling windows. The risk parity sleeve was the de facto defensive ballast, picking up weight in the months when the leveraged sleeves had been struggling.
Aggressive Sleeve results vs each strategy alone
| Strategy | CAGR | Sharpe | Sortino | Max DD | Calmar |
|---|---|---|---|---|---|
| WF Aggressive Sleeve | 19.8% | 1.27 | 2.25 | -16.2% | 1.22 |
| HAA Leveraged 2x (solo) | 23.4% | 1.10 | 1.75 | -26.3% | 0.89 |
| ADM SmartStack (solo) | 17.4% | 1.12 | 2.04 | -19.3% | 0.90 |
| Composite Momentum SmartStack (solo) | 17.2% | 1.20 | 2.05 | -28.5% | 0.60 |
| VAA SmartStack (solo) | 16.7% | 1.08 | 1.94 | -17.3% | 0.96 |
| Schwoerer RP+Momentum (solo) | 15.0% | 1.18 | 2.45 | -14.9% | 1.01 |
The Aggressive Sleeve compounds at 19.8% per year for 30 years with a worst drawdown of -16.2%. To put that in perspective: a $10,000 stake at the start of the OOS window grew to roughly $2.4 million by the end. The S&P 500 over the same period compounded around 8% annually.
It also beats every individual member on Sharpe (1.27 versus a best-in-class 1.20) and on Calmar (1.22 versus a best-in-class 1.01). On CAGR it loses only to HAA Leveraged 2x solo at 23.4%, but the price tag for that solo CAGR was a -26.3% drawdown versus the WF portfolio's -16.2%. Calmar tells the story: 0.89 for HAA alone, 1.22 for the WF portfolio. You compounded almost as fast with much less pain to get there.
The one metric where a single strategy wins on a risk-adjusted basis is Sortino, where Schwoerer RP+Momentum solo posts 2.45 versus the WF portfolio's 2.25. But Schwoerer RP+Momentum alone compounded at 15.0% versus 19.8% for the portfolio, and the WF portfolio is the version of this question that does not require you to have known in 1995 which sleeve would prove most efficient.
Underperformers get benched, automatically
The average weights table flattens the most interesting part of how walk-forward behaves. The optimizer does not just nudge weights up and down. When a strategy is genuinely underperforming over the trailing 36 months, it can effectively zero out that sleeve for years at a time, and let the others carry the portfolio.
A few real examples from the OOS history of the two portfolios above:
- In the Aggressive Sleeve, VAA SmartStack got assigned less than 5% weight for 88 consecutive months, from January 2011 through April 2018. The post-2010 risk-on regime made the "vigilant" defensive rotation a drag. The optimizer noticed and pulled the weight from VAA into HAA Leveraged 2x and the other stacked sleeves. The investor running this portfolio in 2014 was effectively running a 4-strategy basket, not a 5-strategy one, even though VAA was technically still in the candidate set.
- In the same portfolio, Schwoerer RP+Momentum was below 5% for 87 consecutive months from 2003 through 2010, then rotated back in when its risk-parity profile started looking better in the post-GFC environment.
- In the Conservative Sleeve, even the eventual long-run favorite Tactical Permanent was below 5% weight for 49 months, from late 2015 through late 2019, while the BAA and PAA sleeves carried the portfolio. When the COVID drawdown arrived, Tactical Permanent's weight had already snapped back to the 40% cap.
This is the property that makes walk-forward different from a fixed-weight blend. A fixed blend forces you to keep paying attention to a strategy that is actively losing you money for half a decade. Walk-forward demotes it without you having to make a decision, and reinstates it when the data justifies it. You never have to be the human who emotionally fires a strategy at the bottom of its drawdown.
This works best when your strategies are actually different
Any kind of blending, walk-forward included, only adds value when the underlying components are genuinely diversified. If you blend five trend-following strategies that all derisk into bonds at the same time, you get a slightly smoother version of one trend-follower. You do not get a meaningfully better Sharpe, because there is no diversification benefit to extract.
This is why we picked five strategies from five different schools for each portfolio above. The Conservative Sleeve mixes a Keller hybrid (HAA), a Keller bold rotation (BAA), a Keller protective with cash (PAA), a Carlson downside filter (Defense First), and a Faber trend-filtered permanent (Tactical Permanent). They use different signals, different universes, and different defensive triggers. The Aggressive Sleeve does the same on the offensive side: leveraged TAA, return-stacked momentum, return-stacked dual momentum, return-stacked vigilant, and a risk-parity-momentum sleeve. Different mechanisms throughout.
Before you commit to a basket, run it through the BestFolio Correlations page. The pairwise correlations and rolling correlation chart will tell you whether you are actually diversifying or just paying for redundant signals. The general rule: if any two sleeves are above 0.85 correlation on monthly returns over the last decade, you are probably double-counting one of them. Either drop one or pick a more distinct alternative from the library.
Why we say almost nobody else does this
Walk-forward as a concept is decades old. What is rare is having it pre-built across a published library of TAA strategies, with verified backtests, ready to run.
- Portfolio Visualizer does static portfolio backtests with fixed weights or rule-based rebalancing. It does not let you walk-forward optimize across strategies.
- AllocateSmartly tracks live signals for a large library of TAA strategies, lets you blend them with fixed weights, and ships pre-built "Meta Portfolios" that do something in the same neighborhood as walk-forward. The difference is control: their meta portfolios pick which strategies are in the basket, how many, and the rebalance logic. You take the recipe as given. The walk-forward tool here lets you choose your own five strategies, set the lookback, set the weight cap, and pick the criterion. Same idea, different end of the build-vs-buy spectrum.
- Composer.trade lets you build symphony-style decision trees and backtest them, but there is no walk-forward portfolio composition across user-defined strategies.
- skfolio, PyPortfolioOpt, riskfolio-lib all do this kind of optimization at the asset level, but none of them ship a backtested library of TAA strategies to optimize over.
The combination is what is unusual: a published library of 38 backtested TAA strategies (and counting), with their full monthly NAV histories, all queryable in one place, with a one-click walk-forward portfolio engine on top. We have not seen another platform that does this end to end.
The recipe, fully open
If you have a Pro account you can reproduce both portfolios in this post in under a minute. Open the Walk-Forward page, then for each portfolio:
- Pick the five strategy variants from the dropdown.
- Set lookback to 36 months.
- Set max weight per strategy to 40%.
- Set criterion: max Sharpe for the Conservative Sleeve, max CAGR for the Aggressive Sleeve.
- Set rebalance to monthly.
- Click Run.
You will get the same numbers shown above. We did not run anything you cannot. We did not use any unpublished strategies. Both portfolios use only strategies that are documented and backtested on the public Strategies page.
What we are not claiming
A few honest caveats, because we would rather lose your business than lose your trust:
- Walk-forward is not magic. If your candidate basket is full of strategies that all derisk into bonds at the same time, you will get drawdown insurance and not much alpha over equal-weight. Diversity of mechanism matters more than number of strategies.
- The OOS window is one history. 26 to 30 years includes the dot-com crash, GFC, 2018 Q4, COVID, the 2022 60/40 disaster, and the 2023 to 2025 rally. It is a good test, but it is still one realization of the world.
- Past performance is not predictive. The walk-forward design specifically protects against curve-fitting, but it cannot protect against the future being structurally different from the past.
- The Aggressive Sleeve uses leverage and return-stacking. 19.8% compounded over 30 years also means -16% drawdowns. If you cannot stomach that, the Conservative Sleeve is the better starting point.
- Implementation friction matters. Monthly rebalancing across five strategies means 12 trade days a year. Use tax-advantaged accounts where possible. We have a separate post on the minimum portfolio size to make TAA worth the friction.
Try your own combination
The library has 38 published strategies right now. There are about 75,000 unique 5-strategy combinations to try. Some will dominate the two we showed here. The point of building the tool was that nobody, including us, had a clean way to find them before.
If you build a combination you like, send it in. We are collecting reader-submitted walk-forward portfolios and will publish the most interesting ones.