> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tilt.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Selection and weighting

> How the universe, filter, score, top-N limit, weights, overrides, and caps combine into a Tilt's constituents.

Tilt evaluates the construction rules in this order. Each step works on the output of the step before it.

1. Start from the eligible universe.
2. Compute derived fields.
3. Keep securities where the filter expression is true.
4. Rank the remaining securities by score, highest first. If you set a maximum, keep the top N.
5. Weight each selected security by the weight expression, or by score when the weight expression is blank. Scale the weights to sum to 100%.
6. Apply concentration caps, then rescale to 100%.

Ticker overrides adjust the result. Always-included tickers stay in the Tilt, and Tilt removes always-excluded tickers after the rules run.

## Universe

<Frame>
  <img src="https://mintcdn.com/tilt/CizYNoSLp0Sv3sdD/images/index-construction/rail-universe.png?fit=max&auto=format&n=CizYNoSLp0Sv3sdD&q=85&s=70133294d2e580adf0bb37ade3650a6e" alt="Universe section with eligible universe US Investable Equities and reference date 2026-08-01" width="1006" height="278" data-path="images/index-construction/rail-universe.png" />
</Frame>

The eligible universe is the set of securities the rules evaluate, such as US Investable Equities. To build from a named index's members, keep a broad universe and add `index("<name>") > 0` to the filter.

The reference date anchors size-segment eligibility to a point in time. Tilt then takes size segments from recorded history with buffer bands, so a company near a size boundary stays put through small price moves.

## Filter, score, and maximum constituents

The filter expression sets eligibility. A security that fails it drops out.

The score expression ranks eligible securities, highest first.

Maximum constituents keeps the top N ranked securities and requires a score expression. With no score expression, the Tilt holds every security that passes the filter.

## Position sizing

<Frame>
  <img src="https://mintcdn.com/tilt/CizYNoSLp0Sv3sdD/images/index-construction/rail-position-sizing.png?fit=max&auto=format&n=CizYNoSLp0Sv3sdD&q=85&s=7f14e700e13b53cb07998b8dff004dd1" alt="Position sizing section with weight expression size_basis" width="1006" height="194" data-path="images/index-construction/rail-position-sizing.png" />
</Frame>

The weight expression sets position sizes for the selected securities, separate from the score that ranked them. You can pick the top 20 by quality and hold them by market cap. Leave it blank to size by score.

| Goal                         | Score expression       | Weight expression       |
| ---------------------------- | ---------------------- | ----------------------- |
| Equal weight, no ranking     | blank                  | blank                   |
| Market-cap weight            | Your ranking, or blank | `market_cap`            |
| Free-float market-cap weight | Your ranking, or blank | `free_float_market_cap` |
| Weight by the ranking        | Your ranking           | blank                   |
| Weight by theme exposure     | `theme("<label>")`     | blank                   |

A constant weight such as `1` gives each listing of a multi-listing company its own full position. `theme()` selects companies, so size a thematic Tilt by score and leave the weight expression blank. Tilt rejects a weight expression on a company-level selection when a selected company has more than one listing.

## Ticker overrides

<Frame>
  <img src="https://mintcdn.com/tilt/CizYNoSLp0Sv3sdD/images/index-construction/rail-ticker-overrides.png?fit=max&auto=format&n=CizYNoSLp0Sv3sdD&q=85&s=dbb88bf80802dcaa681ae470b7870b37" alt="Ticker overrides section with NVDA always included and TSLA always excluded" width="1006" height="548" data-path="images/index-construction/rail-ticker-overrides.png" />
</Frame>

**Always include** keeps a ticker in the Tilt whether or not it passes the rules. **Always exclude** removes a ticker after the rules run.

Use overrides for named securities. Put group rules, such as a sector exclusion, in the filter expression.

When a symbol matches more than one security, such as one ticker on two exchanges, Tilt asks which listing you mean before it saves.

## Rebalance and concentration

<Frame>
  <img src="https://mintcdn.com/tilt/CizYNoSLp0Sv3sdD/images/index-construction/rail-rebalance-concentration.png?fit=max&auto=format&n=CizYNoSLp0Sv3sdD&q=85&s=cb9e80ce6a8688c714858969789339ce" alt="Rebalance and concentration section with quarterly cadence, next rebalance Dec 18, 2026, and threshold-based concentration limits" width="1006" height="638" data-path="images/index-construction/rail-rebalance-concentration.png" />
</Frame>

Index cadence sets how often Tilt re-evaluates constituents and weights: monthly, quarterly, semi-annually, or annually. Rebalances fall on the third Friday of the scheduled month, or the previous trading day when that Friday is a market holiday. A published index skips any rebalance in its first 45 days.

When the filter uses `index("<name>") > 0` and you set no cadence, Tilt adopts that index's published reconstitution schedule.

Concentration method caps position weights after selection and sizing:

| Method    | Effect                                               | Settings                           |
| --------- | ---------------------------------------------------- | ---------------------------------- |
| None      | Keeps the weights that sizing produced.              | None                               |
| Top N     | Limits the combined weight of the largest positions. | Top positions, combined maximum    |
| Threshold | Limits positions above a set portfolio weight.       | Weight threshold, combined maximum |

Top N and Threshold also accept a single-position maximum. Leave any limit blank to turn it off. After capping, Tilt rescales the weights to sum to 100%.
