I often get asked how to marry two intuitively appealing ideas — momentum signals and volatility targeting — into a practical, rules-based plan for sizing tactical equity tilts. Momentum gives you a directional signal: which equity markets or sectors are showing strength. Volatility targeting gives you a risk control mechanism: how much exposure you should take given the current volatility regime. Combine them thoughtfully, and you get a tilting framework that is responsive, defensible, and easy to implement. Below I share a step-by-step approach I use when designing and managing these strategies for portfolios, including concrete sizing formulas, rebalancing rules, and implementation tips.
Why combine momentum and volatility targeting?
Momentum alone tells you where to be overweight or underweight. But momentum signals vary in reliability and are often concentrated in high-volatility regimes. If you simply allocate by signal strength, you may end up with oversized exposures when markets are choppy. Volatility targeting complements momentum by normalizing exposure to current risk: in high-volatility environments it reduces position size, in low-volatility environments it allows larger tilts for the same risk budget.
I like to think of it as splitting the problem into two parts: "what" and "how much." Momentum answers the "what." Volatility targeting answers the "how much" while respecting a pre-defined risk budget.
Core components of the rules-based plan
- Signals: Choose momentum measures (price returns, moving average crossovers, or trend-following indicators) and a lookback period.
- Volatility estimates: Use realized volatility or an EWMA (exponentially-weighted moving average) of returns to estimate current volatility.
- Target risk budget: Define the portfolio-level risk you are willing to allocate to tactical equity tilts (e.g., annualized 3% or 5% tracking error).
- Sizing formula: Combine normalized momentum strength with volatility scaling to convert signals into position sizes.
- Rebalancing rules: Decide cadence (monthly, quarterly) and thresholds to trade only when changes are meaningful.
- Risk controls: Caps on single-position weights, drawdown stop rules, and maximum turnover limits.
Step-by-step sizing recipe I use
Below is a pragmatic sizing recipe I’ve implemented in client strategies and in backtests on Wealthstatista. The goal is to be explicit so you can reproduce it in Excel, Python, or portfolio tools.
Inputs:
- Momentum signal S_i for asset i: typically 12-month return excluding the most recent month (a common momentum variant), or a z-score of returns across assets.
- Volatility estimate σ_i: annualized realized volatility over the last 60 trading days (or EWMA with a 60-day half-life).
- Portfolio target volatility for the tilts, V_target (e.g., 3% annualized).
- Maximum gross tilt weight per asset, W_max (e.g., 20% of portfolio).
Normalization:
- Convert momentum into a bounded weight driver M_i: M_i = (S_i - mean(S)) / std(S). Then apply a squashing function like tanh(k*M_i) to keep extremes manageable. Example: M_i' = tanh(0.5 * M_i).
- Convert M_i' to a raw signal weight W_raw_i = (M_i' / sum(|M_i'|)) * W_gross_target, where W_gross_target is the total gross tilt allocation you want to distribute across assets (e.g., 50% of the tactical sleeve).
Volatility scaling:
This is the core: scale W_raw_i by the ratio of target volatility to estimated volatility so that each asset contributes a controlled amount of risk.
W_scaled_i = W_raw_i * (σ_ref / σ_i), where σ_ref is an arbitrary reference volatility (I prefer V_target for consistency). Then enforce caps: W_final_i = sign(W_scaled_i) * min(|W_scaled_i|, W_max).
Position-level risk check (optional): compute expected contribution to portfolio volatility using W_final_i and the asset covariance matrix; adjust scalar globally if the total tilt volatility exceeds V_target.
Practical formula summary
| Momentum normalization | M_i' = tanh(0.5 * ((S_i - mean(S))/std(S))) |
| Raw weights | W_raw_i = (M_i' / sum(|M_i'|)) * W_gross_target |
| Volatility scaling | W_scaled_i = W_raw_i * (V_target / σ_i) |
| Capping | W_final_i = sign(W_scaled_i) * min(|W_scaled_i|, W_max) |
Rebalancing plan and trading rules
Rules-based systems only work if you define how and when to act. Here’s a rebalancing plan that balances responsiveness with turnover control — one I’ve tested in live portfolios.
- Cadence: Monthly signal calculation with quarterly implementation is a sensible default. Monthly allows you to monitor signals; quarterly reduces turnover. If you’re implementing via ETFs, monthly rebalancing is acceptable.
- Thresholds: Only trade if a position change is greater than X basis points (I typically use 100 bps) or if the sign of the weight flips.
- Turnover cap: Limit portfolio turnover to a maximum (e.g., 20% per quarter). If your model suggests more, scale changes proportionally.
- Transaction costs: Factor in explicit and implicit costs. For ETFs, assume 10–25 bps round-trip; for single-name equities, increase accordingly.
- Execution strategy: Use VWAP/limit orders and spread trades over several days if the size is material to avoid market impact.
Risk controls I never skip
- Max drawdown stop: If the tactical sleeve suffers a drawdown greater than a threshold (e.g., 20% from local peak), reduce gross tilt allocation by half until it recovers.
- Volatility regime filter: If aggregate market volatility (e.g., VIX or realized volatility of the equity benchmark) exceeds a hard cap, pause new increases in gross tilt weight.
- Diversification caps: Limit exposure to any single sector or country to avoid concentrated risk.
- Stress tests: Run scenario analyses on 2008-like and 2020-like selloffs to understand how the tilts behave when correlations spike.
Implementation notes and tools
For backtesting and live implementation I use Python (pandas + numpy + empyrical) for speed and reproducibility. If you prefer lower-tech, you can implement the same logic in Excel using rolling returns and STDEV. Platforms like QuantConnect or Backtrader make it easy to prototype execution logic if you want intraday or more complex rules.
I also recommend using liquid, low-cost ETFs for tactical tilts when possible. For example, using sector ETFs, broad-market factor ETFs, or country ETFs reduces implementation friction vs. baskets of single stocks. If you have access to futures or total return swaps, volatility scaling is even cleaner because you can size notional exposure directly.
Common questions I hear
- How sensitive are results to the volatility lookback? Short lookbacks (20–30 days) react faster but can be noisy; 60-day realized volatility or an EWMA with a 60–120 day half-life tends to balance noise and responsiveness.
- Should I use realized or implied volatility? Realized volatility is simpler and ties directly to historical movement. Implied volatility (VIX or options-implied vols) can provide forward-looking information but may overreact during spikes. I sometimes blend both: 70% realized + 30% implied for a smoother forward-looking measure.
- What about correlations? Volatility scaling assumes roughly stable correlation structure. If correlations spike (risk-on/risk-off events), portfolio-level volatility can still overshoot. That’s why I always run a portfolio-level volatility check and apply a global scaler to ensure V_target is respected.
- How to set V_target? Think in terms of the portfolio's role: a conservative overlay might target 1–2% annualized tilt volatility; an active sleeve can target 3–6%. Choose something you can tolerate psychologically and operationally.
Implementing momentum with volatility targeting isn’t magic; it’s about disciplined sizing, clear rules, and robust risk management. When done right, it provides a tactical sleeve that is adaptive to market trends while preventing oversized risk during turbulence — exactly the attributes I aim for in the portfolios and analyses I publish on Wealthstatista.