Start with the measured event
Turnover measures a change in holdings, but its name does not identify its numerator. A calculation might add purchases and sales, divide that total by two, or use a reporting convention with a different denominator. Before comparing two outputs, identify the assets counted, the valuation instant, the treatment of cash and the observation period. A portfolio can have identical target weights on successive review dates and still require trading because asset prices moved between them. Conversely, its measured weights can change without a single order. Turnover should describe the specified trading event, not merely a difference between stored targets.
Gross trading and half-turnover
For this guide, gross trading is the sum of absolute changes from pretrade weights to target weights, using one common portfolio-value denominator and ignoring costs. Half-turnover is half that sum. Cvxportfolio documents the latter convention for its turnover constraint and explicitly excludes cash. In a fully invested, self-financing rebalance with unchanged cash, purchases equal sales, so half-turnover equals either side alone. Those conditions matter: the formula remains computable when purchases and sales differ, but its interpretation as the amount sold and replaced no longer follows. State the formula alongside the label instead of assuming that one-sided has an unambiguous meaning.
Reconcile a three-asset example
The hypothetical table starts with USD 100,000 and weights of 50%, 30% and 20% in assets A, B and C. The targets are 40%, 40% and 20%. Selling USD 10,000 of A finances buying USD 10,000 of B; C does not trade. Absolute traded notional is USD 20,000, so gross trading is 20% and half-turnover is 10%. A separate reconciliation adds the signed trades and obtains zero. This identity checks financing, while adding their absolute values checks activity. Neither calculation supplies an execution price, a fee estimate or evidence that the hypothetical orders could be filled.
Measure against drifted holdings
Consider a separate two-asset illustration that begins at equal weights. Asset A rises 10% while B is unchanged, without flows or distributions. Holdings initially worth 50 each become 55 and 50, giving pretrade weights of 52.380952% and 47.619048%. Restoring equal weights requires selling 2.5 currency units and buying 2.5, against a current total of 105. Gross trading is 4.761905% and half-turnover is 2.380952%. Comparing the old 50/50 target directly with the new 50/50 target would report zero. Retaining the intermediate holdings valuation makes the difference between passive drift and deliberate rebalancing visible.
Keep cash and flows explicit
Moving 10% of portfolio value from cash into one security creates 10% gross security trading. If cash is excluded, half of that sum is 5%; if the cash change is included, half of the combined absolute changes is 10%. Neither result is an arithmetic error, but they measure different objects. External subscriptions create another complication because they change the denominator and need not be financed by sales. Record flows separately, choose whether the denominator is before or after them, and reconcile holdings in currency before converting to weights. Do not hide cash purchases inside a zero-flow rebalance example.
Connect turnover to costs carefully
A proportional charge on every unit traded multiplies gross traded notional, not automatically half-turnover. In the table, a hypothetical six-basis-point charge on both purchases and sales costs USD 12 before fixed fees. Multiplying the 10% half-turnover by six basis points would omit half the charge. Cvxportfolio's cost documentation separates proportional trading charges from other terms; that separation is useful even for a small reference calculation. Different buy and sell rates require their own subtotals. Fixed ticket fees require order counts. A turnover percentage alone cannot recover either detail, so preserve the underlying trade vector when exporting an example.
Aggregate without changing the definition
For repeated rebalances, retain each event's numerator, denominator and time label before forming a summary. Summing ratios measures cumulative normalized activity, whereas dividing total currency traded by an average portfolio value produces another statistic. Multiplying one unusually busy month's turnover by twelve is an extrapolation, not an observed annual total. Useful reference tests include unchanged holdings, a complete two-asset switch, a cash-funded purchase and a relabeling that leaves economics unchanged. Publish the chosen annualization convention and avoid comparing monthly half-turnover with annual gross trading. Precision in the label is more informative than extra decimal places on an incomparable result.
| Asset | Pretrade weight | Target weight | Signed trade USD | Absolute trade USD |
|---|---|---|---|---|
| A | 50% | 40% | -10000 | 10000 |
| B | 30% | 40% | +10000 | 10000 |
| C | 20% | 20% | 0 | 0 |
| Total | 100% | 100% | 0 | 20000 |
Primary references
These sources support methods and conventions. The example values are original constructions, not observations extracted from these documents.
Related investigations
Allocation referencesTransaction cost units: from a quoted rate to portfolio drag
Reconcile basis points, trade notional, ticket fees and portfolio-level drag without confusing a cost assumption with observed execution.
Implementation contractsThe model card input contract: make valid inputs unambiguous
Specify shape, units, identity, numerical domains and rejection behavior before treating a mathematical example as reusable code.
Validation examplesChoosing a reference model: match the calculation to the question
Select an inspectable mathematical baseline by output, assumptions and input burden, not by treating a synthetic example as a performance ranking.