When the Inflation Adjusted toggle is enabled, every monthly return shown is converted from a nominal return to a real return - what you actually gained in purchasing power after consumer prices rose that month.
The conversion uses the standard formula:
real return = (1 + nominal return) / (1 + monthly CPI change) - 1
Inflation data comes from the BLS CPI-U (Consumer Price Index for All Urban Consumers, not seasonally adjusted), measured month over month.
How recent and missing months are handled
The CPI is published with roughly a one-month lag, so the newest month in the data usually has no official print yet. Rather than treating those months as having no inflation at all, DMS carries the last known CPI value forward. This is conservative - month-over-month CPI is small and slow-moving - and it keeps the inflation-adjusted view from visibly diverging from nominal returns at the right edge of every chart. When the official figure is published, it replaces the carried-forward value automatically.
The same carry-forward fills any gap in the historical record, though those are rare. The one case where returns are left nominal is a month that precedes the earliest CPI value on file, since there is nothing to carry forward from.
The current month
Mid-month, there is no CPI figure for a month still in progress, so the month-to-date return is deflated using the most recent CPI available as a stand-in. The day-over-day figure is left nominal - a single trading day is too short a horizon for an inflation adjustment to mean anything.
A few other things to know
Why use it?
Long backtests can flatter a strategy. A 10% nominal year during 8% inflation only grew your purchasing power about 2%. Real returns are the honest yardstick for long-horizon planning, especially for withdrawal-rate analysis.
Strategy results which ignore trading costs overstate what you would have actually earned. The Trading Friction toggle (on by default) deducts an estimated cost from each month's return based on how much the strategy actually traded that month.
The model is turnover-weighted. Each month, the strategy's new target ETF weights are compared against what it was already holding as the month opened. The sum of the absolute weight changes is the turnover, and each traded slice is charged a one-way cost based on the ETF's leverage:
| ETF type | One-way cost |
|---|---|
| Non-leveraged (1×) | 10 bps (0.10%) |
| 2× leveraged | 15 bps (0.15%) |
| 3× leveraged | 20 bps (0.20%) |
So a month that rotates 50% of the portfolio out of one 1× ETF and into another costs roughly 0.10% (10 bps on the 50% sold + 10 bps on the 50% bought). Leveraged ETFs are charged more because their wider spreads and higher trading impact make them costlier to trade in practice.
Holdings that are left alone still move. This is the subtle part, and it is why the comparison is against what the strategy was holding rather than against last month's published percentages. If you hold 50% stocks and 50% bonds and stocks gain 10% while bonds are flat, you are holding roughly 52.4% / 47.6% a month later without having placed a single trade. Those percentages changed, but nothing was bought or sold and nothing was owed to a broker.
Two consequences follow:
Other points
Where the estimate is approximate
If you want to see the "frictionless" academic version of a backtest, switch the toggle off - just remember nobody earns those returns in a real account.
Monthly rotation strategies generate realized capital gains, and in a taxable account those gains get taxed. The Taxable Account toggle estimates after-tax returns so you can see how a strategy holds up once the IRS takes its share.
When you enable it, a settings dialog collects:
From your filing status and income the model looks up your marginal ordinary-income rate and your long-term capital-gains rate using the 2026 federal brackets (IRS Revenue Procedure 2025-32), then adds the 3.8% Net Investment Income Tax if your income exceeds the NIIT threshold ($200K single or head of household, $250K married filing jointly). Those NIIT thresholds are fixed by statute and have never been indexed for inflation.
If you use the manual override, the rates you enter are used exactly as typed. No NIIT is added on top of them. If you are over the threshold and entering your own rates to capture state tax, include the 3.8% yourself.
How the tax is applied
The model charges each calendar year the tax it would actually have owed, built from what the strategy realized rather than what it earned on paper.
Gains you have not sold are not taxed. A position held across a year boundary is not a taxable event, so its gain carries forward untaxed and keeps compounding on the full balance. This is the entire tax argument for low turnover, and it is why a buy-and-hold allocation can show almost no tax drag while a monthly rotator shows a great deal.
The flip side: after-tax figures carry an embedded liability for anything still held. The Tax Profile panel reports that as Deferred (unsold). It is not charged, because you do not owe it until you sell, and under current law a step-up in basis at death may mean it is never owed at all.
Yields and distributions are taxed too
Interest and dividends arrive in cash whether or not you sell anything, and they get no holding-period benefit. Each ticker carries a published income character:
This matters most for defensive sleeves. A strategy parked in BIL or TLT during Risk Off is earning interest, not capital appreciation, and is taxed accordingly. Rate-sensitive holdings track the prevailing short rate through history rather than a fixed yield, so cash sleeves are correctly shown earning almost nothing in the ZIRP years.
Gold is taxed differently
Physical bullion trusts such as GLD and SGOL are collectibles under IRC 408(m). Their long-term gains are taxed at the lesser of 28% and your ordinary rate, not at the 15% or 20% long-term rates. Short-term gains on them are unaffected.
This is not a flat 28%. At a $150K married-filing-jointly income it works out to 22%; only at higher incomes does the 28% cap actually bind. Where it does bind it is a meaningful penalty: 31.8% including NIIT against 23.8% for ordinary long-term gains.
SHNY is not treated this way. It is an exchange-traded note, so its holder owns an obligation of the issuer rather than an interest in bullion, and it blends at the ordinary long-term rates.
Why one month each year looks unusually bad
The tax for an entire year is applied to that year's last month, not spread across it. December absorbs the full annual bill in one figure.
This is worth knowing before you scan a monthly returns table with the toggle enabled. A December showing a steep loss after a strong year is not a data error, and it is not what that month actually returned. Annual and longer-period figures are unaffected by where the charge lands, so CAGR, drawdown, and every multi-year statistic remain correct.
Comparing against a benchmark
Only benchmarks with a known composition can be taxed. The 60/40 benchmark is modeled as 60% SPY and 40% BND, rebalanced each January, and is taxed accordingly - including ordinary-income tax on BND's interest. Index benchmarks such as the S&P 500 and QQQ have no underlying allocation to derive trades from, so they are left untaxed.
That means a strategy compared against one of those benchmarks with the toggle on is being shown after tax against a benchmark shown before tax. The gap is understated. Use the 60/40 benchmark when you want a like-for-like after-tax comparison.
A few other caveats worth knowing
Use the ⚙ button next to the toggle to revisit your settings at any time.
The Tax Profile (Est.) panel in the Strategy View's Return Statistics shows how tax-friendly a strategy's trading actually is - how much of what it earns gets turned into taxable gain, how much of that qualifies for the favorable long-term rate, and how much is simply left to compound untaxed.
Rather than guessing from turnover, we run a realization-based simulation of what a real account would have done, using FIFO tax lots:
What the panel reports
For the date range you have selected:
A higher LT Gains % means more of the strategy's gains get the favorable long-term rate. Lower ST gains / yr means less is being handed to the IRS each year in the first place.
Reading the numbers
How this relates to the Taxable Account toggle
The toggle uses the same simulation, but it runs over the strategy's entire history, not the date range selected here.
The panel is window-scoped; the toggle is not. So the LT Gains % displayed here is often not the exact split being applied to your after-tax returns, and narrowing the date range will change this panel without changing the tax being charged.
Limitations to be aware of