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; seeRESEARCH_VOL_LOOKBACKfor 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 tovol_adjusted_momentum— tuning one tunes the other.