Research: Vol-Target Momentum

What It Tries To Do

vol_target_momentum keeps the same signal engine as vol_adjusted_momentum — buy stocks with strong, smooth momentum — but changes the point of the strategy from stock selection to risk control. It sizes the whole portfolio toward a constant volatility target and steps down equity exposure when the market is below its own long-term trend.

How It Decides

Signals reuse the vol-scaled momentum shape: a stock must be in an uptrend, with positive 6-month and 12-month returns, each divided by its own realized volatility. The composite rank is a z-scored blend of those two ratios, exactly as in vol_adjusted_momentum.

The difference is downstream. Sizing uses vol_target — each position is weighted inversely to its own realized volatility, then the whole book is scaled so the portfolio's expected annual volatility lands on RESEARCH_VOL_TARGET_ANNUAL, capped at 100 percent so it never uses leverage. Separately, when the benchmark closes below its own 200-day average, the strategy scales target equity weight down to RESEARCH_VOLTGT_BEAR_EQUITY_WEIGHT (default 0.5) and parks the rest in the liquid fund.

When To Use It

Use it when you want momentum exposure with an explicit risk budget and a mechanical "get smaller in bear markets" rule. Monthly rebalance is a good first test.

What Can Go Wrong

De-risking on a simple benchmark SMA200 can exit too early in sharp V-shaped recoveries, leaving the portfolio under-invested when momentum returns. The vol-target also assumes realized volatility predicts near-term volatility, which breaks in sudden regime changes.

How To Read Results

Compare it with vol_adjusted_momentum over the same window. The bar is lower drawdown and materially lower turnover at comparable or better net-of-cost return. Higher raw return with higher turnover does not pass — the whole point is that this variant controls risk and churn, not that it maximizes return.

Config

  • RESEARCH_VOL_TARGET_ANNUAL (0.12) — the portfolio vol target.
  • RESEARCH_VOLTGT_BEAR_EQUITY_WEIGHT (0.5) — equity weight when the benchmark is below its SMA200.
  • RESEARCH_VOLTGT_EXIT_SMA (100) — per-stock exit when close falls below this SMA.
  • Sizing modes are shared with equal_risk; see RESEARCH_VOL_LOOKBACK for the realized-vol window.
  • The signal filters reuse the RESEARCH_VOLADJ_* block (TREND_SMA, TREND_FILTER, LOOKBACK_SHORT, LOOKBACK_LONG) so the signal shape stays identical to vol_adjusted_momentum — tuning one tunes the other.