Help · Glossary

Glossary

From RangefinderInvest's built-in help · applies to version 0.49.3

CAGR (compound annual growth rate)

CAGR is the single yearly rate that, compounded over the whole period, turns the starting value into the ending value. It's the smooth annual return an allocation would have needed to produce the result it did.

It answers "how fast did this grow?" and nothing else. Two models can share a CAGR and feel completely different to live through. One may drift up steadily while the other doubles and halves. That is why the backtest reports CAGR beside risk measures rather than on its own.

Two things it is not. It isn't an average of the yearly returns (that average is always at least as high, and overstates what you actually compounded), and it isn't a forecast. It is arithmetic on one historical path, and a window that starts or ends at an unusual moment moves it a lot. Compare CAGRs only over the same window, which is why the backtest indexes every model from a common start date.

The backtest chart's %/yr mode draws this same number at every date rather than only at the end, so you can watch it settle: an early lead that decays toward the pack was one good stretch, not a durable edge. Because a partial year can't be annualized honestly, that curve starts a year into the window and its final point is the CAGR the table reports.

Calmar ratio

Calmar prices growth against the worst loss you'd have had to endure to get it: CAGR ÷ the absolute value of max drawdown. Higher is better. A Calmar of 1 means a year's growth equals the size of the deepest hole.

Where Sharpe divides by the average wobble, Calmar divides by the single worst episode. It speaks to the question people actually ask, "what's the most pain per unit of gain?" That makes it the useful cross-check on a mix that looks smooth on average but has one catastrophic stretch buried in it.

Because it rests on one historical event, it's the least stable of these ratios: a window that happens to exclude a crash flatters it enormously. Read it with the window length in mind, and prefer it over long spans.

Core cash

Core cash is an account's one logical uninvested balance, the settlement pocket trades clear through. It can be shown as a regular cash balance or under the current money-market cash vehicle.

If that vehicle changed, RangefinderInvest combines settlement cash with the signed balances of every confirmed vehicle in the dated lineage before showing one final cash position. Earlier tickers remain visible in transaction history, but never become duplicate holdings. The current vehicle supplies the label; the full lineage supplies the amount.

A confirmed old-to-new transfer is internal cash movement, so it contributes no deposit, withdrawal, purchase, sale, or performance cash flow. Later dividends or corrections from the former vehicle still change cash without making it current again.

The rebalancer counts the final core-cash pool as spendable when sizing buys. If a model holds a cash slice, that same pool fills it (how trades read it). TWR leaves the settlement-cash ledger out of its security-book return, though a money-market vehicle in the lineage is a priced holding and stays inside it; current account-value surfaces include the whole pool exactly once (why the two views differ).

Data shape: transactions vs. statements

The badge on every account says what its numbers are built from. It is a statement of basis and resolution, never a quality grade.

  • Tracked from transactions: the account has a full trade ledger (typed or imported). That yields holdings, cost basis, realized and unrealized gains, income, and a daily value curve.
  • Tracked from statements: the account is maintained from periodic month-end snapshots. That yields holdings and a genuine time-weighted return (Modified-Dietz between statements), but no cost basis. Value is still drawn daily. The stated share counts are held constant and priced at each day's close, so what is periodic here is the return, one measured factor per statement period. A statement reports that period's net deposit without the date it moved, so that money is credited for half the period. See time-weighted return.

Mixed selections stay honest about it: a pooled TWR across both shapes isn't combined yet, so the figure is labeled as covering the transaction-tracked accounts only, and a blended value chart notes that its statement members move only with prices between their statements.

Statement accounts can be upgraded later, and the upgrade is a handover, not a merge: the latest snapshot becomes the account's opening positions and the stored statement rows are cleared, so the ledger is the single source from then on. Cost basis and value history therefore begin at that snapshot's date rather than carrying the older statement curve forward.

Drift

Drift is the gap between what a target model says you should hold and what you actually hold. Per slice, it is the current percentage minus the target percentage.

Markets create drift on their own: the winners outgrow their share. The Rebalancing page turns dollar-weighted drift into suggested trades, applying your drift threshold (small drifts are "Hold" because they are not worth the trade) and minimum trade size. An account chip like "1.8% drift" summarizes how much of the account is out of place: the app adds the drifting rows' dollars, halves the result because every dollar sold is a dollar bought, then expresses it as a percent of the account's value. On model is that same figure under a fixed 0.5% cut-off, not your configured threshold; your threshold has already had its say in deciding which rows count as drifting at all.

Expense ratio

A fund's expense ratio is its annual cost, skimmed continuously from the fund's assets. You never see the bill, only slightly lower returns. Stored here in percent units: 0.45 means 0.45% per year (why units matter).

The Classic score applies the stored ER as an explicit fee drag in its legacy whole-universe formula. Peer score does not add a fee term: its adjusted-close return is already net of fund expenses, and charging the ER again would double-count it. The optimizer likewise evaluates adjusted- close performance without a separate expense-ratio scoring pillar.

Fund

A fund is a concrete ticker saved as filling a slice. A slice can list several, each taking a share of it; those within-slice shares must total 100% for the model version to be valid.

A slice names each fund once. Two lines for one ticker would ask rebalancing to measure your whole position against each of them and trade the difference twice, so the editor refuses the second line; an imported model that names a fund in two sleeves landing in the same slice keeps one line holding the combined share.

Despite the internal term "brokerage implementation," there is no per-account broker rule on this record. Every target account assigned to the saved model uses the same fund list. To express the same slice with different broker funds, duplicate the model, change the copy's fund list and assign that variant to the appropriate accounts.

Rebalancing trades are generated in funds, never in abstract slices. The exceptions are cash, self-directed and held fixed-income-ladder slices, which are filled from account holdings rather than an ordinary trade-ticker list (see slice).

Lens

A lens is one way of generating the future market paths your plan is tested against. The projection looks through three of them at once: Forward · Baseline (your assumptions, normal shocks), Forward · Fat tails (the same assumptions with a fat-tailed Student-t shock), and the Historical replay (the 1928–2025 record, sampled per your preset).

Same plan, same spending, same taxes; only the market generator changes. When the lenses agree, the result is robust; when they split, your plan is sensitive to which market story turns out true.

Live balances vs. assumptions

Projection inputs come in two kinds, and the page marks which is which:

  • Live balances are read from your real portfolio: account values by tax treatment, as imported and priced. Change them by changing the portfolio, not the plan.
  • Assumptions are scenario-local what-ifs: returns, spending, ages, conversion plans. They travel with the saved scenario and never write back to your data.

Some assumptions are seeded from your Profile (birth year, filing status) and show a provenance tag: quiet "Profile" while the value still matches its source, and "Custom" once you've overridden it for this plan, with a one-click reset back.

Lots and cost basis

A lot is one purchase of a security, identified by its shares, price, and date. Cost basis is what you paid; a sale's gain or loss is proceeds minus the basis of the lots it consumes.

The app uses both resolutions on purpose: average cost powers the Holdings display (simple, matches most fund statements), while the Rebalancing tax columns rebuild individual lots from your transaction ledger and consume them by your chosen method: HIFO (highest cost first, the tax-minimizing default) or FIFO. The lot walk also splits gains into short- vs. long-term by the one-year holding period, flags loss-harvest candidates, and checks the ±30-day wash-sale window across all accounts (same ticker = "substantially identical," a deliberate simplification).

Both resolutions ignore the same rows: a confirmed core-cash fund migration stays in Account History as a record, but buys nothing, so it opens no lot, realizes no gain, and never counts as a wash-sale purchase.

Maximum drawdown

Maximum drawdown is the worst peak-to-trough fall over the period: how far the allocation dropped from a high before making a new one. A shallower (less negative) figure is better.

Of all the risk numbers this is the one people actually feel, because it's the size of the loss you'd have had to sit through without selling. It's also the most honest test of whether you'd have stayed invested. A mix whose worst stretch is −45% is a different decision from one at −20%, even if their CAGRs match.

It says nothing about how long the fall lasted, though: a one-month plunge that recovers and a three-year grind can share a max drawdown. The Ulcer Index and the Longest Recovery column cover duration, and Calmar prices growth against this figure.

Real vs. nominal dollars

Real dollars are inflation-adjusted and expressed in today's purchasing power, so $60k of spending means the same groceries at 65 and at 90. Nominal dollars are the literal checks written in a future year, larger because inflation has inflated them.

The projection runs in real dollars throughout. The main exception worth knowing: RMDs are also reported nominal, because the forced distribution is a literal, nominal check the IRS sizes. Seeing both tells you what it is and what it's worth.

Sharpe ratio

Sharpe is return per unit of wobble: the growth an allocation earned above cash, divided by its volatility. Higher is better, and it's the standard way to ask whether a model earned its returns or merely took more risk to get them.

This app computes it as (CAGR − 4%) ÷ volatility, using a fixed 4% risk-free rate. Rough bearings: under 1 is unremarkable, around 1 is solid, above 2 is excellent. Those are conventions, not laws, and a short or lucky window inflates the number.

Its known flaw is symmetry: because volatility counts upside and downside swings alike, a model punished for rallying hard scores the same as one punished for falling hard. Sortino is the same idea with only the downside in the denominator, which is why the two often disagree about which model is best.

Slice

A slice is one part of a target model: an asset class (like "US Large Growth" or "Short-Term Reserves") with a target percentage of the portfolio.

The slice is the allocation concept; its saved funds are the exact tickers that fill it in that model version. The editor does not dynamically switch a slice's ticker list from an account's broker. If two brokerages need different fund lists, duplicate the model, edit the copy's funds and assign the appropriate model to each account. A model is valid on two counts: its slice percentages sum to 100%, and the funds inside each filled slice sum to 100% of that slice. The second one is easy to miss, because a model can show a clean 100% total while one slice's funds don't quite fill it. When a model reads Review rather than Valid, or a wizard won't let you continue, open the slice's funds and check their split.

Rebalancing reads a slice through its funds: each fund carries its share of the slice's target, and the drift between that share and what you actually hold of it is what generates a suggested trade on the Rebalancing page. The slice's own gap is never split up after the fact; it is measured a fund at a time.

A cash slice is filled by your account's core cash rather than by a fund. Many published models carry one (a 4% cash overlay, say). There is nothing to buy for it: the balance you already hold is the slice, and rebalancing only tells you how far above or below its target you are.

A self-directed slice ("My picks") is the exception: it has a target size but no fixed contents. You fill it with your own holdings, and rebalancing tracks only how big the slice is, not which names are inside it. That's what lets a stock picker's own positions be a slice instead of a liquidation list: when you derive a model from an account that holds individual stocks, those stocks become a self-directed slice, so the engine won't trim your winners to top up your laggards.

Deriving a model from your holdings turns the flag on for you, and the account wizard's model step can set or clear it. A self-directed slice names no funds. Its target is typed directly, and everything in the account that no other slice claims counts toward it. The difference the flag makes is one line reading "Reduce My picks by $12,000" versus a line per name telling you which to trim.

Every slice is exactly one of three kinds: fund-based, T-bill/CD ladder or self-directed. The Target Models builder sets it in a slice's Details… drawer, under Slice type. The list shows the two special kinds as a chip and says what currently fills them. Switching a slice to self-directed drops the funds saved on it when you save, because nothing in it is traded by name; the builder says so before you commit.

Sortino ratio

Sortino is Sharpe with the upside forgiven: the same excess return, divided by downside deviation, meaning the scatter of the losing days only. Higher is better.

This app computes it as (CAGR − 4%) ÷ downside deviation. The denominator ignores good days, so it is the smaller of the two. That flatters a model whose excess return is positive and punishes one whose CAGR fell short of that 4%, where the same negative numerator over a smaller denominator lands further below zero than Sharpe does. Either way the two are not on one scale: never compare a Sortino against a Sharpe, only against other Sortinos in the same table.

It's the more useful number when a model's swings are lopsided. A mix that jumps hard in good years and holds up in bad ones is penalized by Sharpe and rewarded by Sortino, and that gap between the two is itself the finding: it tells you the volatility was mostly the kind you'd want.

Spending vs. withdrawal

The app keeps these two words strictly apart, because they answer different questions:

  • Spending is the lifestyle number: what the plan pays for each year (recurring costs, health premiums, one-times), set in today's dollars in the Projection's expense panels.
  • Withdrawal is the funding mechanic: the dollars that actually leave a portfolio bucket to cover whatever spending, taxes, and forced RMDs require, in the draw order you set.

They differ routinely: Social Security reduces withdrawals without touching spending, RMDs can force withdrawals beyond spending, and the guardrail trims spending precisely so withdrawals shrink.

Which one leads is a choice. Under Fixed plan or Guardrail you set the spending and the withdrawal follows. Under a balance-driven strategy it runs the other way: the portfolio sets the withdrawal, and your spending follows it.

Target model

A target model is the portfolio you mean to hold: a named set of slices, each with a target percentage, summing to 100%.

Accounts are assigned to a target model, and everything comparative flows from that assignment: drift measures how far the account has wandered from the model, and the Rebalancing page proposes the trades that close the gap. One model can serve several accounts; all use the same saved funds. If brokerages need different ticker lists, save and assign separate model variants.

It claims the whole account

The part that surprises people: a target model is a statement about everything in the account, not just the funds it names. Anything the account holds that the model doesn't name has a target of zero, so it shows up in Rebalancing as a position to close. That is the model doing its job because you said this is what you mean to hold. It is also why attaching one to an account full of individual picks proposes selling them.

Three ways out, all supported. Name those holdings in the model. Give them a self-directed slice, sized as a whole with contents never named, so rebalancing leaves the picks alone (slice covers how). Or attach the mix as a reference instead of a target, which compares without ever proposing a trade. The setup wizard asks which of these you want before it attaches anything, and shows the count and dollars a target would close. See target, reference, or neither.

Time-weighted return (TWR)

Time-weighted return measures how your investments performed, stripping out the effect of your deposits and withdrawals.

For an account tracked from transactions, each day's return is computed net of that day's external cash flow, and the daily factors are chained into the period return. The ledger dates every deposit, sale and purchase to the day it happened, so nothing has to be assumed about timing.

For an account tracked from statements, one factor is computed per statement period using the Modified-Dietz formula over that period's opening value, closing value and net deposit. A statement gives the period's total flow but not the day it moved, so the money is credited for half the period. That is the unbiased assumption when the date is unknown: a deposit made early in the period is under-credited and one made late is over-credited, by roughly half that period's return on the money that moved. Entering statements more often narrows the window the assumption has to cover.

It's the fair number to compare against a benchmark. A big deposit doesn't inflate it, a withdrawal doesn't sink it. It is not what your balance did (that's the raw change, shown separately), and it can differ from a broker's money-weighted "personal return"; see why the numbers differ.

Ulcer Index

Ulcer Index measures how much time you spend underwater and how deep it gets, in one number: the root-mean-square of the running drawdown across the period. Lower is better, and it's expressed in percent.

It exists because max drawdown only reports the single worst moment. A model that falls 30% and recovers in two months and one that drifts 15% below its peak for four years can post a similar max drawdown and wildly different Ulcer figures. The second is the one that wears people down. Squaring the drawdowns before averaging is what makes deep and long stretches count more than shallow blips.

Read it as the "how uncomfortable was holding this?" number, and pair it with the Longest Recovery column, which reports the same idea as a plain count of days.

Volatility

Volatility is the annualized scatter of daily returns around their average, the standard deviation of the ride. Lower means a smoother path; higher means bigger swings in both directions.

It's the denominator of the Sharpe ratio, so it's the usual stand-in for "risk". Its blind spot is that it treats a sharp gain and a sharp loss as equally bad, which is not how anyone experiences a portfolio. That's what Sortino (downside only) and max drawdown (worst actual loss) are for. Read volatility alongside them, not instead of them.