Why usFeaturesTemplatesBlogGlossary

Multi-Factor Blend: Momentum + Quality + Low Vol

Three independent sleeves — momentum, quality and low volatility — each selecting and weighting its own 20 names, blended 40/35/25 into a single book. A name picked by two sleeves gets both weights, so conviction compounds where the factors agree.

Why this is expected to work

Every single-factor strategy in this catalog has multi-year stretches of underperformance, and those stretches do not line up. Momentum crashes hardest at market inflections (Daniel and Moskowitz, 2016, documented momentum crashes following bear-market bottoms), value underperformed globally for most of 2015-2020, and low volatility lags badly in a violent recovery. Because the drawdowns are imperfectly correlated, the blend has historically had a materially higher risk-adjusted return than any single leg, and — the part that actually matters — a shallower worst-case drawdown, which is what determines whether a real person is still holding the strategy when it recovers. This is the same argument behind NSE's multi-factor indices. If you only deploy one template from this catalog, the case for it being this one is behavioural, not statistical.

multi-factordiversificationallocatorcore
Universe
NSE Stocks XNSE
Rebalance
Quarterly Equal weighted

How the pipeline works

Filter

NIFTY200 constituent

Keeps rows where nifty200_member == 1

nifty200_member == 1
Filter

Liquid: traded > Rs 5 cr/day

Keeps rows where turnover > 50000000

turnover > 50000000
Calculate

Price 1 month ago

Computes price_1m_ago = @shift(close, 21)

@shift(close, 21)
Calculate

Price 12 months ago

Computes price_12m_ago = @shift(close, 252)

@shift(close, 252)
Calculate

12-1 momentum

Computes momentum_12_1 = price_1m_ago / price_12m_ago

price_1m_ago / price_12m_ago
Rank

Top 20 momentum

Selects the top 20 by momentum_12_1

Size

Momentum sleeve sizing

Sizes positions: Equal weighted

Filter

NIFTY200 constituent

Keeps rows where nifty200_member == 1

nifty200_member == 1
Filter

Liquid: traded > Rs 5 cr/day

Keeps rows where turnover > 50000000

turnover > 50000000
Calculate

Return on equity

Computes roe = net_profit_annual_consolidated / total_equity_annual_consolidated

net_profit_annual_consolidated / total_equity_annual_consolidated
Filter

Profitable

Keeps rows where roe > 0

roe > 0
Rank

Top 20 quality

Selects the top 20 by roe

Size

Quality sleeve sizing

Sizes positions: Equal weighted

Filter

NIFTY200 constituent

Keeps rows where nifty200_member == 1

nifty200_member == 1
Filter

Liquid: traded > Rs 5 cr/day

Keeps rows where turnover > 50000000

turnover > 50000000
Filter

Has a volatility reading

Keeps rows where annualised_volatility > 0

annualised_volatility > 0
Rank

20 calmest

Selects the bottom 20 by annualised_volatility

Size

Low-vol sleeve sizing

Sizes positions: Inverse volatility

What this template teaches

  • AllocatorNode — portfolio of strategies in one graph
  • Per-sleeve weighting before blending
  • Explicit allocation weights across sleeves
  • Overlapping selections summing their weights
Read the full write-up

Why Blending Factors Beats Picking One

Momentum, quality and low volatility all have multi-year droughts, and the droughts do not line up. Combining them produces a shallower worst drawdown — which is what determines whether you are still holding when it recovers.