Frequently Asked Questions

All Adjustments & Taxes Data & Methodology Performance & Statistics Practical Use Strategy Concepts Strategy Mechanics General

Adjustments & Taxes

What does the Inflation Adjusted toggle do?

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

  • The toggle is global: equity curves, CAGR, drawdowns, detailed metrics, savings and withdrawal projections - everything recomputes in real terms. A hint appears under the controls ("Showing real (inflation-adjusted) returns") so you always know which mode you're in.
  • The risk-free rate used inside Sharpe, Sortino, and the Ulcer Performance Index is deflated along with everything else, so risk-adjusted figures stay internally consistent rather than mixing a real return against a nominal benchmark.
  • The setting is preserved in the page URL, so a shared link reproduces exactly what you were looking at.

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.

Permalink to this answer → Last updated July 30, 2026
How does the Trading Friction toggle work?

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 typeOne-way cost
Non-leveraged (1×)10 bps (0.10%)
2× leveraged15 bps (0.15%)
3× leveraged20 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:

  • A month spent holding costs nothing, even though the published allocation percentages moved. Strategies that deliberately let positions run - buy-and-hold portfolios, and the drift-band strategies that only trade once a position wanders outside its band - are charged only in the months they genuinely trade.
  • Rebalancing back to an unchanged target is not free. Returning that 52.4% / 47.6% portfolio to a 50/50 target means actually selling stocks and buying bonds. The target looks identical to last month's, but real money moved, and friction is charged accordingly.

Other points

  • The toggle is global - it flows through every view, chart, metric, and calculator, including benchmarks.
  • Benchmarks with a known, fixed composition (currently the 60/40) are modeled as annually rebalanced: weights start at the target mix each January (and at inception), then drift with the underlying ETFs' actual returns the rest of the year. Only the January reset generates turnover, so these benchmarks see a small, once-a-year friction cost rather than a monthly one. Single-asset benchmarks like the S&P 500 have no allocation to drift or rebalance, so they see none.
  • Imported strategies supply monthly returns only, never allocations, so there is no honest way to estimate their trading costs. In Strategy View, whenever an imported strategy is the selected strategy or the comparison pick, the toggle is disabled outright, keeping both sides on the same footing. Elsewhere on the site an imported strategy simply carries no friction charge, so treat a side-by-side against fully charged strategies with that in mind.
  • The setting is preserved in the page URL, so shared links reproduce your configuration.

Where the estimate is approximate

  • The cost is a flat basis-point charge on turnover, not a live spread. Real execution costs vary with market conditions, order size, and time of day. Wide-spread or thinly traded months could cost more than the model assumes; a patient trader in calm markets could pay less.
  • If a materially weighted holding is missing a return for the month, the drift calculation can't be completed honestly. Rather than skip the charge, the model falls back to comparing raw published weights, which can charge for drift that was never traded. This is rare and confined to months with data gaps.
  • An ETF with no leverage data on file is charged the 1× rate.

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.

Permalink to this answer → Last updated July 30, 2026
What does the Taxable Account toggle do?

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:

  • Filing status - Single, Married Filing Jointly, or Head of Household
  • Taxable income, after your standard or itemized deduction and including the gains you expect from this strategy. Capital gains stack on top of ordinary income when your brackets are determined, so leaving them out understates your rate.
  • An optional manual override if you would rather enter your own short-term and long-term rates directly (useful for adding state tax)

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.

  1. The FIFO lot simulation (see the Tax Efficiency FAQ) records what was sold each year and at what character.
  2. Short-term realizations are charged your ordinary rate, long-term realizations your capital-gains rate.
  3. Distribution income is charged separately every year.
  4. Capital losses are pooled and carried forward indefinitely, offsetting the highest-rated gains first.
  5. The resulting bill for the year is applied to that year's returns.

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:

  • Ordinary - Treasury and corporate interest, CLO and bank-loan income, REIT and managed-futures distributions. Taxed at your ordinary rate every year, with no long-term treatment ever.
  • Qualified - ordinary equity dividends, taxed at your long-term rate.
  • None - bullion trusts, box-spread funds, and non-payers, whose entire return arrives as price change.

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

  • This is an estimate, not tax advice. Real-world results depend on your full tax picture, loss harvesting, and timing.
  • The tax character is computed over the strategy's entire history, not the date range you have selected. Changing the range does not change the rate applied. The Tax Profile panel is window-scoped, so the two can show different figures for the same strategy.
  • Strategies with less than 12 months of history cannot establish a tax character and are left untaxed.
  • Federal only. No state tax is modeled. Use the manual override if you want to fold it in.
  • The $3,000 annual capital-loss offset against ordinary income is not modeled. It is a fixed dollar amount and nothing here is denominated in dollars, so leaving it out is the conservative choice.
  • Wash sales are not modeled, nor are the lot-selection choices a real investor or broker might make. FIFO is assumed throughout.
  • Like the other toggles, it is global across all views and preserved in the page URL.

Use the ⚙ button next to the toggle to revisit your settings at any time.

Permalink to this answer → Last updated August 6, 2026
How is Tax Efficiency calculated (the Tax Profile panel)?

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:

  1. Each month's target weight changes are converted into purchases and sales. Every purchase opens a lot carrying its own share count, cost basis, and acquisition date.
  2. Sales consume lots oldest first, so a single sale can produce both a long-term and a short-term piece, exactly as it would on a 1099-B.
  3. Each piece is classified by that lot's own age. Long-term requires holding for more than one year, so a position sold on its twelve-month anniversary is short-term. This matters more than it sounds: strategies built on 12-month momentum signals frequently hold for exactly twelve months.
  4. Distributions are separated out before any of this. Interest and dividends are income, not capital gain, so they never enter the lot accounting (see the Taxable Account FAQ).
  5. At the end of the selected window, any position still held is marked as if liquidated that day and reported separately as deferred. It is not treated as a sale.

What the panel reports

For the date range you have selected:

  • ST lots (≤12 mo) / LT lots (>12 mo) - how many individual tax lots were realized in each bucket
  • ST / LT avg hold - average holding period in months for each bucket
  • ST / LT gains / yr - the average share of portfolio value turned into taxable gain each year, measured against the balance at the time of each sale. A strategy showing 7% ST gains / yr converts about 7% of its value into short-term gain annually.
  • Deferred (unsold) - the embedded gain sitting in positions you still hold. Nothing is owed on it until you sell.
  • Gold at 28% cap - appears only when a strategy holds bullion trusts such as GLD or SGOL. Shown two ways: as a share of long-term gains, which is what the collectibles rate actually applies to, and as a share of all gains, which is usually much smaller.
  • LT Gains % - the share of gross gains that were long-term

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

  • Gains / yr figures are rates, not totals. They answer "how much of my balance becomes taxable each year", which stays readable over a forty-year history. A cumulative total would not.
  • Lot counts can exceed the number of trades made. FIFO splits one sale across however many lots it touches, and the end-of-window mark adds an entry for each position still open.
  • Tiny weight changes are ignored. Movements below 0.1% of portfolio value are treated as accounting noise between the strategy return series and the underlying ETF returns rather than as trades. Their gain is still counted; they just do not inflate the lot counts.
  • A dash instead of a percentage means the strategy booked no gross gains at all in the window. That is different from having too little data, which shows an explicit "Not enough data" message.
  • The gold percentages will differ sharply from each other. A strategy can show "67% of LT" and "0% of all" when its long-term bucket is nearly empty. The long-term figure is the one that drives the tax; the other exists to stop the first being misread.

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

  • The panel needs at least 12 months of allocation data in the selected range; with less it shows "Not enough data" rather than a misleading number.
  • Blended (custom) portfolios are analyzed from their net ETF weights. When two sleeves trade the same ticker in opposite directions, those offsetting trades net out and may be under-counted, so blended results are a slight approximation.
  • Distribution yields are estimates. Each ticker carries a published income character and yield, and rate-sensitive holdings track the prevailing short rate rather than a fixed figure. These are good approximations, not a record of what any particular fund actually paid.
  • This is an estimate of a strategy's tax character, not a projection of your actual tax bill. It models no wash sales and no lot-selection choices a real investor or broker might make.
Permalink to this answer → Last updated August 6, 2026

Data & Methodology

Where does DMS get its data?

Every number on this site traces back to a small set of outside sources. There is no proprietary data feed and nothing is hand-entered. Knowing what feeds what makes it easier to judge how much weight any given figure deserves.

Monthly returns: Tiingo

The monthly return series behind every strategy comes from Tiingo's end-of-day data. This is the authoritative source. When a strategy's performance is computed, recomputed, or published, it is Tiingo's month-end closing prices doing the work.

Returns are total return, adjusted for dividends and distributions. This matters more than it sounds. For bond and commodity positions the income component is most of the return, and a price-only series would understate those assets badly rather than slightly.

Inflation: the Bureau of Labor Statistics, via FRED

The CPI series used by the Inflation Adjusted toggle is CPI-U, All Urban Consumers, not seasonally adjusted. It is pulled from the St. Louis Fed's FRED service, which redistributes the BLS figures. FRED also supplies several market indicators shown elsewhere on the site, including the high-yield credit spread.

The CPI is published with about a one-month lag, so the newest month usually has no official print yet. See the Inflation Adjusted FAQ for how that gap is handled.

Live quotes: Twelve Data and Yahoo Finance

Intraday numbers come from a different place than the historical record. The market strip above the navigation and the month-to-date figures during an open month are built from live quotes, refreshed through the trading day. Historical performance never depends on them.

This is a deliberate separation. Live quote feeds are fast and occasionally wrong. End-of-day data is slower and much more reliable. The site uses each for what it is good at, and nothing in a strategy's published track record is ever sourced from an intraday quote.

History before an ETF existed

Where a fund is younger than the track record shown, the earlier history is reconstructed from other sources. That reconstruction has its own rules and its own limitations, covered in full in the extended-returns FAQ.

What this means for the numbers you see

A few consequences worth carrying around:

  • Monthly is the unit of account. Strategies are evaluated on month-end closes. Daily data exists for specific purposes, but a strategy's return, drawdown, and every statistic derived from them are monthly measurements.
  • Dividends are already in there. You do not need to add a yield estimate on top of a published return. It is already counted.
  • Nothing here is survivorship-screened after the fact. The ETF universe a strategy trades is fixed by its rules, not chosen in hindsight from funds that happened to do well.
  • The data can be revised. Providers correct their own history occasionally. When they do, the corrected figures flow through on the next recompute, which can move an old number very slightly.

Where errors would come from

Being honest about the failure modes: the most likely source of a wrong number on this site is not the price data itself, which is well-tested and widely used. It is the reconstruction layer for pre-ETF history, and it is the transformation code that turns raw prices into strategy results. Both get audited, and both have had real defects found and fixed. The price feeds themselves have not been a meaningful source of trouble.

Permalink to this answer → Last updated July 30, 2026
Where does return history from before an ETF existed come from?

Most of the ETFs a DMS strategy trades are younger than the track record shown for that strategy. A broad commodity ETF may have launched in 2014, an international equity ETF in 2011, a Nasdaq-100 fund in 1999. If a backtest could only use the period where every holding actually existed, the entire test would be truncated to the youngest fund in the lineup - and a strategy tested only on the post-2014 era has never been shown a rate-shock, a commodity boom, or a 1970s-style inflation regime.

To avoid that, DMS uses extended return series: each asset class is reconstructed backwards to January 1979 from the best available source for each stretch of history. The strategy is then tested against that longer record.

The waterfall

Every asset class is built from a prioritized chain of sources. The engine walks the chain from best to worst and takes each date's return from the highest-ranked source that actually has data for that date. In order of preference:

  1. The real ETF itself. Wherever the fund exists and has traded, its own total-return history is used. No modeling, no substitution.
  2. An older share class of the same fund. Many ETFs are the newer wrapper on a mutual fund that has been running for decades. When that's the case, the older share class is a near-exact extension of the same portfolio, differing only in fee structure.
  3. A comparable fund tracking the same universe. Where no earlier share class exists, an older mutual fund with the same mandate and credit/duration/geographic profile fills the gap.
  4. A total return index. When no traded fund reaches far enough back, an index is used. It must be a total return index, not a price or excess-return index - otherwise the yield or dividend component is silently dropped and the whole series understates the asset.
  5. A modeled reconstruction. Bond-pricing math from published yield curves, or a regression-based estimate. Last resort, used only where nothing above is available.

The chain is a splice, not a blend. Two adjacent tiers are never averaged together; each date is sourced from exactly one place.

Substitutions are held to a standard

A fund only earns a place in a chain if it is genuinely tracking the same thing. This is where most of the judgment sits, and it cuts both ways: a corporate-bond fund is not a proxy for a broad aggregate bond index even though both are "bonds," and a high-yield fund is a different asset class entirely rather than a longer-history version of investment grade. Tiers get removed when they fail that test, even when removing them shortens the history.

Everything is total return

Price history alone is not usable. Every source in every chain is dividend- and distribution-adjusted, so the series represents what an investor would actually have earned holding the position. For bond and commodity series in particular, the income component is most of the return, and a price-only source would be badly wrong rather than slightly wrong.

Expenses are handled tier by tier

Each source in a chain carries its own expense ratio, and the reconstruction accounts for that source's actual fee for the dates it supplies - not a single blanket fee applied across the whole history. A 1990s mutual fund charging 0.90% and a modern ETF charging 0.05% are not interchangeable on cost, and using one fee across both eras would leave a small permanent drag or boost baked into the older half of the record.

Leveraged series are rebuilt, not borrowed

For 2x and 3x series, no leveraged fund existed before roughly 2006-2010, so those histories are constructed rather than sourced. Each day's unlevered return is multiplied by the leverage factor, then charged a financing cost derived from the prevailing overnight rate plus a spread, then charged the real leveraged fund's own published expense ratio. This is daily-reset leverage, matching how the actual products work - which means the reconstruction reproduces volatility decay in choppy markets rather than papering over it.

Monthly history often reaches further back than daily history

Daily price history and monthly return history come from different places and stop at different points. A fund may have thirty years of published monthly returns but only twenty years of usable daily prices. Where that's true, the monthly series is extended using the monthly data while the daily series stops at the last date with trustworthy daily prices.

The practical consequence: for some asset classes, monthly-resolution results start earlier than daily-resolution results. A strategy rebalancing monthly may therefore show a longer track record than the same strategy tested at daily granularity.

Regression-based tiers

Where an asset class has no fund and no clean index reaching far enough back, one remaining option is to estimate its returns from the assets it is statistically related to - regressing the target series on factors or on other markets with longer histories, then using that relationship to project the missing period.

This produces a plausible series, not a real one, and it is treated with more suspicion than every tier above it. A regression fit on one era's correlations can behave badly in an era where those correlations broke down, which is precisely the period a long backtest is meant to stress. Regression tiers are used sparingly, sit at the bottom of the chain, and are retired when a better source appears or when the reconstruction fails review.

Real data always wins

Where the actual ETF has traded, its own returns are used - always. Synthetic history exists only to fill the space before that, and the moment real data begins it takes over completely. The two are stitched at the fund's inception, not blended across it.

What synthetic history is and isn't

It is a careful reconstruction of what an asset class returned. It is not a record of what an investor experienced.

Specifically, it excludes: bid-ask spreads and market impact, tracking error against the index, securities-lending revenue, borrow availability, and the practical reality that many of these strategies would have been difficult or impossible to run in 1979. Reconstructed leveraged series in particular assume idealized daily rebalancing at zero cost, which real leveraged funds do not achieve.

It is also worth remembering that the deepest tiers of any chain are the least reliable, and they sit in the oldest and most unusual part of the record - the stretch doing the most work in a long backtest. Treat the earliest years as directionally informative about how a strategy behaves in an unfamiliar regime, not as a precise measurement.

How to read results that use it

Results built on extended history are best used to answer "does this approach survive conditions the last fifteen years never produced?" rather than "what exactly would I have made?" Where a strategy's edge depends heavily on the pre-ETF era, that is worth knowing and worth discounting.

Permalink to this answer → Last updated July 30, 2026
When does the site update, and what does FINAL mean?

DMS recomputes every strategy once a day, in the evening, after the US market has closed and the day's closing prices have settled. Nothing changes during the trading day except live quotes.

The daily cycle

All times below are US Eastern. Phoenix runs three hours behind Eastern in summer.

Closing price data is fetched in several passes through the evening, starting shortly before 6 PM and continuing into the late evening. Multiple passes exist because data providers do not publish everything at once, and a ticker that is not ready on the first attempt gets picked up on a later one.

Strategy results are then computed twice:

  1. Around 8:15 PM, a first pass runs against whatever data has arrived by then.
  2. Around 12:15 AM, a second pass runs after every fetch attempt has had its chance.

The after-midnight pass is the authoritative one. The 8:15 PM run is a useful early look, but it can be working from an incomplete picture.

The practical consequence: a figure you check at 9 PM Eastern can differ from the same figure the next morning. That is not an error being corrected. It is the early pass being superseded by the complete one. If a number matters, read it after midnight Eastern, or simply read it the following day.

FINAL versus "through" on the allocation table

The most recent row of a strategy's allocation table carries a small tag telling you how settled it is:

  • A green FINAL tag means every input for that month has been confirmed complete. The row will not change again.
  • An amber "through" tag with a date means the figures reflect closing prices only up to that date. The month is not finished, or the data for it is not fully confirmed. It can still move.

The tag reports the actual state of the underlying data rather than the calendar. A month that has ended on the calendar is not automatically final; it becomes final when the data confirming it has arrived and been verified.

The current month

While a month is in progress, two different things are shown, and they behave differently.

The allocation is published daily. You can see what a strategy is holding right now. This updates as the month goes on.

The return is not published until the month closes. Instead, during the month you see a month-to-date figure, labeled MTD rather than Month Return. MTD is built from live quotes and moves during the trading day. It is a running estimate of an unfinished month, not a result.

When the month closes, the MTD figure is replaced by a settled monthly return computed from month-end closing prices, and it becomes a permanent part of the record.

"Provisional" means something different

There is also a row labeled Provisional, and it is easy to confuse with the freshness tag above. They are unrelated.

The Provisional row is a projection of next month's allocation, showing what the strategy would hold if the current month ended today. It is a forward look, not a status label, and it is a Premium feature.

It also moves. A projection made on the 8th of the month is built on eight days of incomplete data, and the signals driving it can reverse before month-end. Treat it as a preview of where things are heading, not as an instruction.

A note for free accounts

Current-month allocations for Premium strategies unlock for free users on the 11th of each month. Everything else on the daily cycle above applies the same way regardless of account type.

What to do with all this

  • For anything that matters, read the figure the day after, not the same evening.
  • Trust the FINAL tag rather than the calendar.
  • Do not act on a Provisional projection before the month has closed.
  • If a number changed overnight, that is the system working as designed.
Permalink to this answer → Last updated July 30, 2026

Performance & Statistics

What is CAGR, and how is the current month handled?

CAGR stands for Compound Annual Growth Rate. It answers a simple question: if a strategy grew at a perfectly steady rate every year, what would that annual rate be? It is the standard way to compare returns across strategies with different track record lengths, because raw cumulative return is misleading - a strategy with 20 years of history and a strategy with 3 years of history need a common yardstick.

The formula compounds the total return over the full period and then scales it to one year:

CAGR = (Ending Value / Starting Value) ^ (1 / Years) - 1

A strategy that turned $10,000 into $18,000 over 5 years has a CAGR of about 12.5%, regardless of how bumpy or smooth the ride was along the way.

How the current month is handled

The most recent month shown on the site is usually still in progress. Its allocation is published daily, but its return is not final until the month closes, and you will see it labeled accordingly.

When a date range ends in an in-progress month, DMS counts that month as a fraction of a month rather than a whole one, based on how many days have elapsed. This matters more than it might sound. On the third day of a month, only a sliver of that month's return exists. Annualizing it as though it represented a full month would badly distort the result - a small partial gain would be scaled up as if it had taken a month to earn, inflating CAGR, and a small partial loss would do the reverse.

The practical effect:

  • Early in the month, the in-progress month contributes almost nothing to the CAGR figure.
  • As the month fills in, it counts for progressively more.
  • Once the month closes and its return is final, it counts as a full month like any other.

A consequence worth knowing: a CAGR quoted for a range ending in the current month is a moving number. It will shift day to day as the month accumulates, and it will settle once the month closes. That is the calculation working correctly, not a data problem.

The same fractional logic applies at the other end of the track record. If a strategy went live partway through a month, its first month is scaled to the portion of the month it was actually invested, so it is never credited with a full month of return it did not earn.

Why the number on your screen may differ from one you noted earlier

Three global toggles change the CAGR displayed:

  • Inflation Adjusted Returns shows the real rate rather than the nominal one.
  • Include Trading Friction accounts for the cost of executing the strategy's trades.
  • Taxable Account applies tax drag to the return stream.

If a figure does not match what you recorded previously, check these first - the underlying data has not changed, only the lens.

What CAGR doesn't tell you

CAGR is a two-point measurement. It sees only where the strategy started and where it ended, and it is blind to everything in between. Two strategies can post an identical CAGR while one lost half its value and clawed back while the other barely dipped. The ride is invisible to this number.

For a fuller picture, pair it with Max Drawdown, Ulcer Index, and the Sortino ratio.

Permalink to this answer → Last updated July 30, 2026
What is Maximum Drawdown, and what does it tell me?

Maximum Drawdown (Max DD) is the largest peak-to-trough decline a strategy has experienced, measured from a peak (high-water mark) down to the lowest point that followed it. It is expressed as a negative percentage. A Max DD of -15% means the strategy fell 15% from its peak before recovering.

It answers a pointed question: what is the worst loss an investor in this strategy would have had to endure, and how bad did it get before things turned around?

How it is calculated

DMS computes Max DD on a month-end basis. Walking forward through the equity curve, it tracks the highest value reached so far and measures how far below that high-water mark each subsequent month falls. The deepest of those declines is the Max DD.

Because DMS strategies are evaluated monthly, the figure reflects month-end to month-end moves. Intra-month, a strategy will have dipped lower than any month-end close shows, so a daily-measured drawdown would be deeper. Every strategy and benchmark on the site is measured the same way, so comparisons between them remain fair even though all of them understate the intra-month extreme.

The global toggles feed into it. Turning on Inflation Adjusted Returns, Include Trading Friction, or Taxable Account changes the return stream the curve is built from, and the Max DD moves with it.

What it is useful for

Max DD is one of the most honest stress-tests available for a strategy. It tells you: this is the real-world pain that an investor would have experienced at the worst moment in the strategy's recorded history. Paired with the Max DD Recovery metric, which shows how long it took to get back to the prior peak, it gives a sense of both depth and duration of the worst episode.

For comparison, the S&P 500 has experienced drawdowns exceeding 50%, and a traditional 60/40 portfolio has seen drawdowns around 32%. DMS strategies are designed with low drawdowns as a central goal, not an afterthought.

What it does not tell you

This is the most important thing to understand about Max DD: it is a historical figure, not a guarantee of maximum future drawdowns.

The Max DD shown is the worst drawdown the strategy has experienced to date, based on the specific market environments in the backtest and live history. It is not a promise, a guarantee, or a prediction of the worst that could ever happen. As Meb Faber so aptly has said: your largest drawdown is still to come.

Max DD and the date range selector

The Max DD shown reflects the currently selected date range, not the full history. Narrow the range to the last five years and you will see the worst drawdown within those five years, which may be far smaller than the all-time figure if the worst episode fell outside the window. For the all-time number, use the maximum available range for the strategy.

There is a subtlety here worth knowing. The high-water mark resets at the start of your selected range. The calculation has no memory of anything before it, so the opening month is treated as the first peak.

If your range begins partway into a decline, the real peak that preceded it is invisible, and the drawdown gets measured from an already-depressed starting value. A range beginning at a market bottom will make almost any strategy look serene. When you want to understand risk rather than study a specific episode, start from the full range.

Pairing Max DD with other risk metrics

Max DD captures the single worst episode but says nothing about how often or how persistently a strategy draws down. Two strategies can share the same Max DD while feeling very different to hold - one might recover quickly, another might grind sideways for years. For a fuller picture of drawdown behavior, pair Max DD with:

  • Ulcer Index - captures both the depth and duration of all drawdowns, not just the worst one
  • Max DD Recovery - shows how long the worst drawdown took to fully heal. If the strategy had not regained its prior peak by the end of the selected range, this shows a dash rather than a number, since the episode has no recovery date yet.
  • Sortino Ratio - measures return per unit of downside risk
Permalink to this answer → Last updated July 30, 2026
What are the Safe and Perpetual Withdrawal Rate metrics?

Two of the detailed metrics answer a retirement question rather than an investment one: given this strategy's actual history, how much could you have pulled out every year without running out of money?

Both follow the method William Bengen introduced in 1994, which is stricter than it first sounds. The number you see is not what one retirement would have supported. It is the worst outcome across every 30-year retirement the strategy's history contains.

How the cohorts work

Take a strategy with 46 years of monthly returns. A retirement beginning in January 1985 and running 30 years is one cohort. February 1985 is another. March 1985 is another. Roll that window forward one month at a time and a 46-year record yields roughly 200 distinct 30-year retirements, each with its own sequence of good and bad years.

Every one of them is tested. The published figure is the worst of them.

That distinction matters more than it might appear. A single run starting at the beginning of a strategy's record tests exactly one entry point, and an early-1980s start happens to be close to the most favourable moment in the modern record. Reporting that number would describe a lucky retirement rather than a safe rate. The minimum across all cohorts is what the word "safe" is doing.

Because a 30-year cohort needs 30 years of data, and because a minimum is only meaningful if there are enough cohorts to take a minimum of, both metrics require at least 35 years of history. Strategies with less show N/A rather than a number built from too few retirements.

Safe Withdrawal Rate (SWR)

SWR is the largest annual withdrawal, as a percentage of your starting balance, that would have carried a full 30-year retirement through to the end without the account reaching zero, beginning in any month on record.

The withdrawal is held constant in real terms. A withdrawal fixed in dollars shrinks every year in what it actually buys, so holding it constant in purchasing power is what makes the figure describe a standard of living rather than a dollar amount.

Perpetual Withdrawal Rate (PWR)

PWR asks a stricter question over the same cohorts: what could you have withdrawn while leaving the account, in real terms, at least as large at the end of 30 years as it was at the start? SWR permits you to spend the balance down toward zero. PWR does not touch the principal.

PWR is therefore always at or below SWR. The gap is usually small, often a few tenths of a percentage point, and it is smaller for strategies that compound faster. That is not a rounding artefact: when a portfolio grows a great deal over 30 years, the extra draw that spending down the principal would buy you is small next to what the growth itself already supports.

They ignore the date range

This is the one behaviour that surprises people, and it is deliberate.

Every other figure in Detailed Metrics answers "over the period you selected." These two do not. They always use the strategy's full history, whatever range is on screen. A sustainable withdrawal rate is a property of the strategy, not of the window you happen to be looking at, and tying it to the range would mean the number vanished on any view shorter than 35 years. The row labels carry "(full history)" so the exception is visible rather than silent.

What the toggles do

  • Inflation Adjusted does not move these numbers at all. They are real-terms figures by definition, so the calculation converts to real returns internally regardless of the toggle's position.
  • Include Trading Friction does apply. Costs come out of the return stream the cohorts are built on, so leaving friction off produces a rate that is optimistic for reasons unrelated to withdrawal math.
  • Taxable Account does not feed these metrics. They are computed pre-tax. Real withdrawals are taxed, so treat the published figure as an upper bound on what you could actually spend.

Where they appear

  • Detailed Metrics, under Withdrawal Rates, for every strategy on screen
  • Below the Rolling Returns chart on the Strategy View, with dotted reference lines on the chart itself. When the Inflation Adjusted toggle is off, the chart plots nominal returns, so the lines are drawn at a nominal equivalent and the real rate is shown beneath. The two figures always appear together.
  • Snapshots Leaderboard, ranked by either rate, with the other shown alongside
  • Withdrawal Calculator, where PWR mode anchors the projection on the strategy's own sustainable rate instead of a generic figure

How to read them

  • These are historical figures, not probabilities. They report what would have survived sequences that actually occurred. There is no confidence interval attached. For a distribution rather than a single answer, the Range of Outcomes view on the equity chart resamples the same returns thousands of times.
  • The cohorts overlap heavily. Two hundred rolling windows drawn from 46 years of data share most of their months, so the number of genuinely independent retirements in the test is far smaller than 200. The figure is more robust than a single path and much less robust than the cohort count suggests.
  • Sequence matters more than average return. A crash early in retirement, while the balance is large and withdrawals are eating into a falling account, does far more damage than the same crash later. Two periods with identical average returns can produce very different SWRs. That is why this is worth looking at separately from CAGR.
  • These come from backtested strategy returns, not an index. The familiar 4% figure was derived from a traditional stock and bond portfolio using actual index history. A strategy's SWR inherits whatever optimism its backtest carries, including the fact that strategies which backtested well are the ones that end up published. Comparing against 4% is reasonable; treating a much higher figure as equivalently established is not.
  • Early cohorts may rest on reconstructed data. For strategies whose holdings did not exist as tradable funds in the 1980s and 1990s, those years are built from index and proxy series. The cohorts that set the minimum are often the early ones, so the figure can depend on data that is modelled rather than observed.

What these numbers are not

They are not a retirement plan and not a recommendation. They describe a strategy's historical capacity to support withdrawals across the retirements its own record contains.

A real retirement introduces everything the model leaves out: a specific horizon rather than a fixed 30 years, taxes on the withdrawals themselves, Social Security and other income, spending that is lumpy rather than smooth, and the near certainty that you would change your behaviour after a bad year rather than mechanically withdrawing the same amount into a falling account.

Permalink to this answer → Last updated August 5, 2026
What is the Range of Outcomes view?

An equity curve shows one path: the particular sequence of months that happened. It cannot tell you how much of the result came from the strategy and how much came from the order those months arrived in.

Range of Outcomes answers that. Switch the equity chart to it using the toggle above the chart, and instead of one line you get a spread of paths the same strategy could plausibly have produced, with the actual result drawn over the top.

How it is built

The strategy's own monthly returns are resampled 2,000 times to produce 2,000 alternative 46-year histories, each using the same pool of months in a different arrangement. The percentile bands show where those 2,000 paths sit at each point in time.

The resampling is done in blocks of consecutive months, not one month at a time, and that detail is the difference between a useful chart and a misleading one.

Real market declines are made of bad months arriving in a row. Draw months independently and those runs get scattered apart, so simulated portfolios recover between shocks and never experience a proper crash. The effect is not subtle. On a test series containing one sustained decline, independent-month resampling reported a typical worst drawdown of 34% where block resampling on the identical data reported 88%. Independent draws would have understated the risk by a factor of more than two.

Block resampling keeps those runs intact. Block lengths are random, averaging up to 24 months on a full history and scaling down on shorter ranges so there are always enough distinct blocks for genuine variety. The applied block length is shown beneath the chart.

Reading the chart

  • The solid line is the actual historical result, identical to the one on the ordinary equity chart.
  • The dashed line is the median simulated path: half the 2,000 finished above it, half below.
  • The darker band covers the 25th to 75th percentiles, the middle half of outcomes.
  • The lighter band covers the 5th to 95th, taking in all but the most extreme tenth.

The bands start narrow and fan out. That is the point of the picture. Early on, sequence has had little chance to matter; over decades it compounds into an enormous spread.

The four figures below the chart

Median Outcome is the ending value of a $10,000 starting balance at the 50th percentile, with the 5th and 95th beneath it. The gap between those two is usually startling, and it is worth sitting with. Every path used the same returns.

Median CAGR is the same idea in annualised terms.

Median Max Drawdown is the deepest peak-to-trough fall at the 50th percentile, with the 95th shown as the unlucky case. Expect this to be worse than the strategy's actual historical drawdown. The realised figure is one draw; the simulation asks what the same months could have done in a crueller order, and the answer is usually "quite a bit worse."

Actual vs Range is where the real backtest landed among the 2,000. This one is routinely misread, so it is worth being explicit: a middling number here is the correct and expected result. The simulation is built from the strategy's own returns, so it is centred on them by construction. A figure near the 50th percentile means the machinery is working. It is not a measure of skill, and a high number would not be good news, it would be a sign something was wrong upstream.

What responds to what

Range of Outcomes uses the selected date range, so narrowing the range changes both the bands and the figures. In this it differs from the Safe and Perpetual Withdrawal Rates, which always use full history.

The Inflation Adjusted, Trading Friction and Taxable Account toggles all feed the return series being resampled, so the bands respond to them as the ordinary equity chart does.

The view needs at least 60 months in the selected range.

The bands do not move between visits. The simulation uses a fixed starting point for its random number generator, so the same strategy over the same range always produces the same picture. Without that, the bands would shift slightly every time you touched a toggle and the chart would look untrustworthy for no reason.

What this tells you

That the strategy's historical result was, or was not, heavily dependent on the order in which its months arrived. If the actual path sits comfortably inside the bands and the median lands near it, sequence luck is not what produced the backtest.

It also gives you a realistic sense of dispersion. A strategy with a 15% historical CAGR whose 5th-to-95th band spans 8% to 22% is telling you something a single number cannot.

What it does not tell you

It is not a forecast. The distribution is centred on returns the strategy has already earned. It assumes those returns keep coming from the same process. If markets change, nothing in this simulation would know.

Two thousand paths are not two thousand pieces of evidence. They are one dataset rearranged 2,000 times. The apparent precision is real in the sense that the arithmetic is exact, and misleading in the sense that it all rests on one historical record. If that record is optimistic, every percentile shown is optimistic by the same amount, and nothing inside the method can detect it.

It cannot validate the strategy. Resampling takes the edge as given and only reshuffles it. It answers "was this sequence luck," which is a different and easier question than "does this strategy work." Establishing the second requires a test where the strategy is allowed to fail, which resampling is not.

It does not correct for having chosen this strategy. DMS publishes many strategies. Looking at a strong one in isolation, however rigorously, does not account for the fact that it stands out partly because it performed well.

Why it is not called "Monte Carlo"

It is a Monte Carlo simulation, and the tooltip says so. But the label invites a particular misreading, that thousands of simulations amount to thousands of independent observations, when they are one dataset restated many times. "Range of Outcomes" describes what is actually on screen: the spread of results consistent with this strategy's historical behaviour, including the unfavourable ones.

Permalink to this answer → Last updated August 5, 2026
What are the Ulcer Index and the Ulcer Performance Index?

Maximum Drawdown tells you how bad the single worst moment was. It says nothing about whether a strategy spent one month underwater or eleven years. The Ulcer Index closes that gap.

Ulcer Index

The Ulcer Index measures the depth and the duration of every drawdown across a period, not just the deepest one.

It is computed by walking the equity curve month by month, recording how far below the previous high-water mark each month sits, squaring that figure, and taking the square root of the average across all months. Months at a new high contribute zero. Months deep underwater contribute a great deal, because squaring them punishes depth disproportionately.

The name is literal. It is meant to approximate how much stress holding the strategy would have caused. Lower is better, and unlike most statistics on this site there is no theoretical maximum, only comparisons between strategies over the same window.

Two things follow from the construction:

  • Time underwater is penalized directly. A strategy that drops 20% and recovers in four months scores far better than one that drops 20% and takes six years to get back, even though their Max DD figures are identical.
  • A strategy that spends most of its life at new highs scores very well, because most months contribute nothing at all.

Ulcer Performance Index (UPI)

UPI turns the Ulcer Index into a risk-adjusted return measure:

UPI = (CAGR - risk-free rate) / Ulcer Index

The numerator is what the strategy earned above cash. The denominator is how much discomfort it caused getting there. Higher is better.

The structure is the same idea as the Sharpe ratio, with one substitution that matters. Sharpe divides excess return by standard deviation, which treats upside volatility as risk. UPI divides by drawdown pain, which counts only the downside and counts prolonged recoveries as worse than quick ones. For a strategy designed around limiting drawdowns rather than limiting volatility, UPI is usually the more informative of the two.

Why UPI is our headline risk-adjusted number

Standard deviation punishes a strategy for a strong upside month exactly as hard as for a weak one. Nobody experiences those two months the same way. Drawdown-based measures line up much more closely with what actually causes an investor to abandon a strategy, which is the failure mode that destroys more returns than any market decline does.

An important caveat: UPI is not leverage-invariant

It is sometimes assumed that a risk-adjusted ratio like UPI stays roughly constant when you scale a position up or down, so that a 3x version of an asset would show similar UPI to the unlevered version. Our own measurement says otherwise, decisively.

Measured against daily data for an unlevered S&P 500 fund and its 2x and 3x counterparts, buy-and-hold UPI at 3x falls to roughly 27% of the unlevered figure. The Ulcer Index does not scale linearly with leverage; across seven leveraged asset-class families it scales at approximately the leverage factor raised to the power 1.3, and that exponent was stable across sub-periods.

The practical consequence: do not compare the UPI of a leveraged strategy against an unleveraged one and conclude the leverage was free. Leverage degrades UPI structurally, before any question of skill or timing enters. A leveraged strategy that holds its UPI near its unleveraged parent's has done something genuinely difficult, and the comparison to make is against the same strategy at the same leverage, not across leverage levels.

How to read these numbers

  • Both are window-scoped. Change the date range and both change, because both are computed over the months you have selected.
  • Both respond to the toggles. Inflation Adjusted, Trading Friction, and Taxable Account all change the return stream underneath.
  • Neither has a natural scale. An Ulcer Index of 4 means nothing in isolation. It means something next to another strategy's 9 over the same period.
  • UPI depends on the risk-free rate, which changes what the number means across eras. Cash yielding 8% in the 1980s sets a much higher bar than cash yielding almost nothing in the 2010s.

What they do not tell you

Neither statistic knows anything about why a strategy drew down, whether the conditions that caused it are likely to repeat, or what a drawdown outside the historical record might look like. A strategy with an excellent Ulcer Index has been comfortable to hold across the period tested. That is a real and useful thing to know, and it is not a forecast.

Permalink to this answer → Last updated July 30, 2026
What are the Sharpe and Sortino ratios?

Both answer the same question in slightly different ways: how much return did this strategy earn for the risk it took? Raw return alone cannot distinguish a strategy that earned 12% smoothly from one that earned 12% through violent swings.

Sharpe ratio

Sharpe = (average monthly return above cash / standard deviation of those excess returns) x the square root of 12

The numerator strips out what you could have earned sitting in cash. The denominator measures how much the monthly returns scattered around their own average. The square root of 12 annualizes a figure computed from monthly data.

Higher is better. As a rough guide, above 1.0 is good and above 2.0 is unusual over a long period, though these rules of thumb depend heavily on the era and the asset class.

DMS uses the arithmetic mean of monthly returns here, not the compound annual growth rate. This is the standard construction and it is what makes the figure comparable to Sharpe ratios published elsewhere. A version built on CAGR runs systematically lower, by roughly half the annualized variance, purely as an artifact of the formula rather than anything about the strategy.

Sortino ratio

Sortino keeps the same shape and changes what counts as risk. Instead of the standard deviation of all returns, it uses the deviation of only the losing months.

Sortino = (average monthly return / deviation of months below zero) x the square root of 12

The reasoning is straightforward. Standard deviation treats a surprise gain as risk, identical to a surprise loss of the same size. Nobody experiences it that way. Sortino counts only the outcomes that actually hurt.

The threshold here is zero, not the risk-free rate, and it is zero on both sides of the calculation. The minimum acceptable return is "do not lose money," and the numerator is measured against that same standard. Using one threshold in the numerator and a different one in the denominator produces a figure that is not comparable to anything, which is worth knowing if you are checking our numbers against another source.

Sortino is essentially always higher than Sharpe for the same strategy, since the denominator is built from a subset of the same months and the numerator is not reduced by the cash rate. The two are not comparable to each other in absolute terms. Compare Sharpe against Sharpe and Sortino against Sortino.

The gap between them is informative in itself. A strategy whose Sortino greatly exceeds its Sharpe has volatility concentrated on the upside, which is exactly what you want. A strategy where the two sit close together has volatility distributed evenly in both directions.

The risk-free rate

Sharpe needs a risk-free rate. DMS uses the actual return on cash over the period you have selected, taken from the cash series in the return data rather than from a fixed assumption. When cash data is unavailable it falls back to 4% per year.

This is the honest approach, and it has a consequence worth understanding: the bar moves across eras. In the early 1980s cash yielded close to 10%, so a strategy needed to earn well into double digits before its excess return was even positive. Through the 2010s cash yielded nearly nothing and almost any positive return counted as excess. A Sharpe ratio from the 1980s and one from the 2010s are not measuring against the same standard.

Sortino, using a zero threshold, is unaffected by this. That is one of its advantages when comparing across long periods with very different interest rate regimes.

When the Inflation Adjusted toggle is on, the risk-free rate is deflated along with the strategy returns, so the Sharpe comparison stays internally consistent rather than measuring a real return against a nominal benchmark.

Comparing our figures against other sites

If a ratio here differs from one you have seen elsewhere for a similar strategy, the cause is usually one of these rather than a disagreement about the underlying returns:

  • Trading friction. The Include Trading Friction toggle is on by default here, which lowers returns and therefore both ratios. Not every source deducts trading costs.
  • The risk-free rate. A source using zero, or a fixed assumption, will report a higher Sharpe than one using the realized cash return.
  • The Sortino threshold. Some sources measure downside against the risk-free rate rather than against zero, which produces a lower figure than ours.
  • Arithmetic versus geometric. A source using CAGR in the numerator reports a lower Sharpe than one using the arithmetic mean.
  • The period. These are window-scoped statistics. Two sources covering different date ranges are not measuring the same thing.

Which one to use

For DMS strategies specifically, we lead with the Ulcer Performance Index rather than either of these. UPI divides excess return by drawdown pain instead of by volatility, and for strategies designed to limit drawdowns rather than to limit volatility, it captures the design goal more directly.

Sharpe and Sortino are here because they are the standard vocabulary of the field, and because a strategy that looks good on one measure and poor on another is telling you something worth investigating.

Limitations shared by both

  • They assume returns behave normally. Financial returns have fatter tails than the bell curve implies. Both ratios systematically understate the likelihood of the extreme month.
  • Neither knows anything about sequence. Shuffle a strategy's monthly returns into a random order and both ratios come out identical, even though the shuffled path might have depleted a retirement account and the real one did not.
  • Neither penalizes a long recovery. A strategy that stays underwater for eight years can post a perfectly respectable Sharpe. This is precisely the blind spot the Ulcer Index was invented to cover.
  • Both are window-scoped and respond to the toggles, like every other statistic on the site.
Permalink to this answer → Last updated July 30, 2026
Why do the numbers change when I change the date range?

Almost every statistic on this site is computed over the date range you have selected, not over the strategy's full history. Move the range and the numbers move with it. This is intended, but a few of the behaviors surprise people, and one of them can be genuinely misleading if you do not know about it.

The general rule

CAGR, Max Drawdown, Ulcer Index, UPI, Sharpe, Sortino, standard deviation, alpha, beta, and the withdrawal rates are all window-scoped. Each is recomputed from the months inside your selection and nothing outside it.

So a strategy showing a 14% CAGR over its full history and 9% over the last five years is not contradicting itself. Those are two different measurements of two different periods.

The drawdown clock restarts

This one deserves particular attention.

Max Drawdown measures the decline from a running high-water mark. That high-water mark resets to the first month of your selected range. The calculation has no memory of anything before your window opens.

If your range begins partway into a decline, the true peak that preceded it is invisible, and the drawdown is measured from an already-depressed value. A range that starts at a market bottom will make nearly any strategy look serene, because the calculation never sees the fall that created the bottom.

The practical consequence: when you are trying to understand risk rather than study a particular episode, use the full available range. Narrow windows are for examining a specific period, not for judging how much pain a strategy can inflict.

The risk-free rate changes with the window

Sharpe, Sortino, and UPI all measure return above cash, and DMS uses the actual cash return over your selected period rather than a fixed assumption.

Cash yielded close to 10% in the early 1980s and nearly nothing through the 2010s. A window covering the first is holding the strategy to a far higher standard than a window covering the second. Risk-adjusted figures from very different eras are not directly comparable, even for the same strategy.

Some things do not change with the window

A few figures are computed over the strategy's entire history regardless of your selection:

  • The LT Gains percentage applied by the Taxable Account toggle is always full-history. The Tax Profile panel showing you an LT Gains percentage is window-scoped, so the two can display different numbers. Narrowing the range changes the panel but not the tax actually being charged.
  • Strategy inception dates and coverage are properties of the data, not of your selection.

Short windows are noisy

A statistic computed over 24 months is a much weaker claim than the same statistic over 300 months, and the site does not visually distinguish between them.

Some measures refuse to compute below a minimum. The withdrawal rates require ten years. The Tax Profile requires twelve months of allocation data. Most others will happily return a number from a very short window, and that number deserves proportionally less trust.

Comparing strategies fairly

When comparing two strategies, make sure the window covers a period both actually lived through. A strategy that launched in 2015 compared against one going back to 1979 over the maximum range is not a comparison of strategies. It is a comparison of eras.

The comparison views handle the common cases by aligning the period, but it is worth checking the start dates yourself when a result looks surprising.

Quick checklist when a number looks wrong

  1. What date range is selected?
  2. Does that range start in the middle of a decline?
  3. Are the Inflation Adjusted, Trading Friction, or Taxable Account toggles on?
  4. Does the window cover a period both strategies existed for?
  5. Is the window long enough for the statistic to mean anything?

Most surprises resolve at one of those five.

Permalink to this answer → Last updated July 30, 2026

Practical Use

How do I actually trade these signals?

The published track record assumes a specific and quite simple execution: you hold each month's target allocation for the whole month, and you move to the next month's targets at the month-end close. Everything on this site is built on that assumption.

Nobody trades exactly that way. Understanding where your execution differs from the model is most of what determines whether your account tracks the published curve.

The monthly rhythm

  1. Signals are computed from month-end closing prices. Nothing partial, nothing intraday.
  2. The resulting allocation is for the month ahead. It appears on the site the evening the month closes, once the day's data has settled.
  3. You trade into those targets. In practice this means at or near the open of the first trading day of the new month.
  4. You hold. Unless the strategy uses drift bands, no action is needed until the next month-end.

The gap between step 1 and step 3 is where reality enters. The model buys at the previous close; you buy the next morning at whatever the market opens at. Sometimes that helps you, sometimes it hurts, and over many months it mostly washes out. It does not disappear, though, and it is the main reason two people running the same strategy get slightly different results.

Wait for the month to close

The Provisional row projects what next month's allocation would be if the current month ended today. It is genuinely useful for anticipating a change and getting mentally prepared for it.

It is not a trade instruction. Signals computed on a partial month can and do reverse in the final days. Trading a projection early means occasionally taking a position the strategy never actually called for, and then paying again to undo it.

Wait for the month to close and the allocation to settle.

Not every month requires a trade

Some months the targets are unchanged and your holdings have drifted only slightly. Some strategies deliberately let positions run and only trade when a holding wanders outside a set band.

Do not manufacture activity. The published results already account for holding without trading, and adding trades the strategy did not call for only adds cost. See the Trading Friction FAQ for how the model distinguishes drift from an actual trade.

Costs the model assumes

Trading Friction charges 10 basis points one way for a non-leveraged ETF, 15 for a 2x fund, and 20 for a 3x fund. That covers spread and market impact under normal conditions in liquid funds.

You can do better or worse. Limit orders in calm conditions cost less. Market orders at the open, when spreads are at their widest, cost more. Small accounts trading illiquid leveraged funds can cost considerably more. If your execution is habitually worse than the model assumes, your results will drift below the published curve for reasons that have nothing to do with the strategy.

Account type matters

These strategies rotate, and rotation realizes gains. In a tax-deferred account that is irrelevant. In a taxable account it is a real and recurring cost.

The Taxable Account toggle and the Tax Profile panel exist to let you see the size of that difference for a given strategy before you commit to running it somewhere it will be taxed.

AutoPilot

Some strategies are available through AutoPilot, which handles execution rather than leaving it to you. The strategy page indicates whether a given strategy is supported. It removes the timing and discipline problems described above, which for many people are the largest source of tracking difference.

Where real accounts diverge from the published curve

Ranked roughly by how much damage each one does:

  1. Skipping signals. Deciding not to take a defensive move because it feels wrong, or not to re-enter because it feels early. This is by far the biggest one, and it is the reason a rules-based strategy exists at all.
  2. Trading late. A signal acted on a week into the month is a different position than the one the model held.
  3. Partial implementation. Running the strategy with part of the account and something else with the rest produces neither result.
  4. Execution costs above what the friction model assumes.
  5. Fractional share and rounding differences. Small and unavoidable.

Note that the first three are behavioral, not mechanical. The published record assumes a level of discipline that is genuinely hard to sustain through a stretch where the strategy is behind.

One caution

None of this is personal financial advice. It describes how the published signals are constructed and how they were assumed to be executed. Whether any strategy is appropriate for you, and how much of your money belongs in it, are questions this site cannot answer.

Permalink to this answer → Last updated July 30, 2026
How do I set up DMS → AI Agent → Brokerage?

DMS → AI Agent → Brokerage is a Premium feature. Your own AI agent reads a DMS portfolio's target weights, reads one of your brokerage accounts, works out the difference, and trades.

Most members set it to run automatically. You create a daily scheduled task in your own AI app (Step 6). On most days it checks and does nothing. After each month-end, it trades the new allocation, with no action from you.

You can run more than one account. Each account gets its own connection on the DMS side and its own scheduled task in your AI app. A connection is just a DMS portfolio with a name you choose.

Your AI app needs two connections, not one. One to your brokerage, which you set up with your broker, and one to DMS. For example, Claude Cowork connected to both. DMS provides only the second. If your broker does not offer an MCP connector for AI agents, this feature cannot work with that account.

Free Claude or a paid AI plan?

There are two ways to run this. Choose which one at the top of the panel in My Account; your connections are the same either way, so you can switch at any time.

Free Claude account: run it by hand. A free Claude account allows one custom connector, and your broker needs it. So DMS is not connected as a connector. Instead, each of your connections has a private link, and your agent reads your targets from it. After each month-end you open a new chat, paste the free-account instructions, and send. Your agent shows its plan and waits for your OK. Nothing happens unless you run it.

Keep private links private. Each one can read that connection's targets, though never trade. Paste it only into your own AI chat, and select Reset link on the card if you think one has leaked; the old one stops working at once.

Paid AI plan: let it run itself. With a paid plan, DMS connects as its own connector alongside your broker's, and a scheduled task can check every day and trade after month-end with no action from you. Claude Pro and above is the tested setup; ChatGPT and Grok may work but are untested with DMS.

The rest of this guide covers both. Where they differ, it says so.

What DMS does and does not do

DMS never places trades. Your agent does, on the schedule you set in your AI app. If you do not set a schedule and do not run it yourself, nothing happens, and your account keeps last month's allocation.

DMS is not connected to your broker. There is no link between the two. DMS publishes your target weights at a private address, and your agent reads them. DMS cannot see your account or your balance, cannot tell whether your agent ran, and cannot place, cancel or reverse a trade. Your agent is the only thing that sees both sides.

DMS cannot check that you paired things correctly. You tell your agent which DMS connection to read. If you name the wrong one, DMS has no way to know, and your agent will trade the wrong allocation without anything looking broken. Step 4 is about getting that right.

DMS is not affiliated with any broker.

Which brokers work

Any broker whose own MCP connector your AI app can use. As of this writing that includes Robinhood, Interactive Brokers and Webull, and the list changes as brokers ship connectors.

Brokers differ in what they let an agent do. Some let it submit orders directly. Others stage the orders for you to confirm in the broker's own app. Both work with DMS; the agent instructions handle either, and your report says which happened.

Check your broker's own rules before you start, including which account types they allow an agent to act in. That is the broker's decision, not ours, and it changes.

Who can use it

  • You must be 18 or older with a legal US residential address.
  • The account must be your own, for your own self-directed investing. You may not use this to trade or manage money for anyone else, or share or redistribute your credentials.
  • Whether a retirement account can be used is up to your broker and your AI provider. DMS does not restrict it. If they permit agentic trading in an IRA, so do we, and the tax consequences of trading inside it are yours to understand.
  • Up to five connections per member.

What you need

  • A DMS Premium subscription, and access to the email address on your DMS account (we send confirmation codes there)
  • A brokerage account at a broker with an MCP connector, opened and funded
  • An AI app. A free Claude account works for running it by hand. For automatic runs you need a paid plan with custom connectors and scheduled tasks; Claude Pro or higher is the tested setup.
  • A desktop computer for the broker setup

If you do not already pay for an AI plan, adding one costs more per year than AutoPilot, which handles scheduled execution for you with none of this setup. AutoPilot is the better choice for most people.

Step 1 - Decide what each account should follow

Every published DMS strategy can be used except Profit Farmer and Profit Farmer w/Gold, which have their own page.

You can pick a single strategy at 100%, blend several, or start from a portfolio you already saved in the Custom Portfolio Builder. You build the blend inside the MCP panel itself, using the same builder you already know, so nothing has to be saved first.

About 300-tier strategies. Catalyst 300, Global Navigator 300 and LT Gain 300 can hold up to 300% notional exposure through 3x leveraged funds. As noted on their strategy pages, they are designed to be used as a sleeve within a portfolio rather than as a whole portfolio. Leveraged funds also drift quickly, so expect your agent to rebalance a 300-tier sleeve more often than the rest of your portfolio. Whether and how much to use them is your decision.

Step 2 - Accept the terms

Open My Account, then DMS → AI Agent → Brokerage.

  1. Read the terms. The checkbox unlocks when you scroll to the end. Tick it, then select Accept and continue.
  2. We email you a 6-digit code. Enter it to confirm it is you.

A token also appears, shown once. You only need it if your agent uses the direct feed instead of the DMS connector (see Step 4). If you might, copy it somewhere safe.

Step 3 - Add a connection for each account

Select Add a connection. Then:

  1. Name it after the brokerage account it is for. "Roth at Webull", "IBKR taxable". The name is how your agent asks for it, and it is the only thing tying a portfolio to an account, so make it unmistakable.
  2. Optionally use Start from to copy in a DMS strategy at 100% or one of your saved portfolios, then adjust the weights.
  3. Make the weights total 100% and select Use for this connection.

Repeat for each account you want to run, up to five.

Each connection keeps its own copy of the weights. Starting from a saved portfolio copies it once. Editing or deleting that saved portfolio afterwards does not change what any agent trades. To change what an agent trades, edit the connection.

One connection is the default. It is what the direct feed serves when an agent asks without naming a connection. If you only use the DMS connector, the default does not matter.

Confirmation emails. Adding, changing, renaming or removing a connection, changing the default, resetting a private link, generating or rotating a token, connecting an app, and revoking each send you an email naming the connection involved. If you receive one for a change you did not make, change your DMS password and select Revoke and disconnect all. Revoking and removing never need a code.

Step 4 - Connect your AI app to your broker and to DMS

Your AI app needs two connectors. Do the broker first: it is usually the bigger job, and without it nothing else here can run.

First, your broker. DMS cannot do this part for you and never sees it. Follow your broker's own instructions for AI or agentic trading. Typically that means:

  • Enabling agentic or AI trading in your broker account settings. Some brokers require you to open and fund a separate account for this.
  • Getting the connector address your broker publishes for AI apps.
  • Adding it in your AI app, the same way you will add DMS below, and completing your broker's own sign-in.

When it works, your AI app can list your brokerage accounts. If it cannot, stop here and sort that out with your broker; DMS cannot help from this side.

On a free Claude account, stop here. Your broker is using your one custom connector, so you do not add DMS. Instead, with Free Claude account selected at the top of the panel, fill in each connection card's broker and account and select Copy agent instructions. That gives you the free-account instructions already filled in for that connection. Skip to Step 5.

On a paid plan, then connect DMS. Add a custom connector with this address:

https://dualmomentumsystems.com/mcp

In Claude, open Customize, then Connectors, select +, and paste the address. When your app asks, sign in with your DMS account, enter the 6-digit code we email you, and select Approve. The app then appears under Connected apps in My Account, where you can disconnect it at any time.

Use the address exactly, without www.

Then give your agent the DMS Agent Instructions. Paste them into your agent or scheduled task. Do not tell your agent to fetch them from our site each time.

Copy them from the connection card. Each card has a small form: your broker (Robinhood, Interactive Brokers, Webull, or type another), the account, and whether to show you the plan first or trade without asking. Then Copy agent instructions gives you the full instructions with the header filled in for that connection. Your broker and account details are saved in your browser only; DMS never receives them. Describe the account by nickname or last 4 digits, never the full number.

Using Claude Code, Codex or another agent that runs code? Instead of the connector, it can call the direct feed at https://dualmomentumsystems.com/agent-feed.php?portfolio=YOURCONNECTIONNAME with your token in an Authorization: Bearer header. Paste your token into the instructions where they say YOURTOKENHERE, and allow dualmomentumsystems.com in the app's network settings. Your token works like a password to your target weights: it cannot trade, but keep it private.

Step 5 - Test before you automate

The instructions start with Run mode: AUTOMATIC, which means your agent places trades without asking. For your first run, tell it to hold off:

  1. Ask your agent to fetch your DMS targets and report them without trading. Check it names the connection you expected, then compare the targets with this month's allocation on the DMS site, not the Provisional row, which is a projection of next month.
  2. Ask it to show the order plan first. Check the plan looks sensible for the right account, then tell it to go ahead. This places your first allocation.

Do this separately for each account. Getting two tasks crossed is the mistake worth spending five minutes to rule out.

Step 6 - Set it to run automatically (paid plans)

On a free Claude account this step does not apply. Instead, after each month-end, open a new chat, paste your saved instructions, and send.

  1. Create a scheduled task in your AI app, one per account. In Claude, open Cowork and choose Scheduled in the sidebar. Scheduled tasks run in the cloud, so your computer does not need to be on.
  2. Set it to run daily. DMS allocations change monthly, but most apps have no monthly option. Daily is safe: when the account already matches its targets, the agent does nothing.
  3. Paste the instructions copied from the connection card into the task. Start with I want to approve trades. Once a run looks right, switch the card to Trade without asking, copy again, and replace the task's instructions. With approval on, a scheduled run reports its plan and waits for you.
  4. Let the task act without stopping. Set your AI app to use the DMS and broker connectors without asking each time; in Claude, choose to always allow them when prompted. On Claude Team or Enterprise plans, an admin may need to allow custom connectors. If your broker asks you to approve each trade, a scheduled run cannot answer, so either turn that off or expect staged orders you confirm yourself.
  5. Check the first scheduled run. Open its results and confirm it reached both DMS and your broker, and that it names the connection you expected. A run that cannot reach the broker has checked nothing, and the instructions make it say so. If the report says there is no broker connection, go back to Step 4: the broker connector is missing from your AI app.

What happens each day: most days the report says no trades are needed. After the last trading day of each month, DMS publishes the new allocation overnight, and your next scheduled run sells what is no longer held, then buys the new targets. If a run fails, the next day's run catches up.

What to check, and how often

  • Monthly, when your DMS digest email arrives. The allocation month has turned over. Check each account reflects the new allocation within a few days.
  • "Last used" in My Account, shown for each connected app (and for your token if you use the direct feed). This is the only sign DMS has that anything is running. With a daily schedule it should update every day. If it stops, your scheduled task has stopped.
  • Your AI app's scheduled task history. Each run's report starts with a one-line summary and names the connection and account it used.
  • Your broker's activity. The trades appear there like any others.

When something goes wrong

Your agent says the private link is not valid (free accounts). The link was reset, the connection was removed, or you turned the feature off and on again, which replaces every link. Copy the instructions from the connection card again.

Your agent says it may have been given a cached copy (free accounts). The response it got was more than a day old. Start a new chat and try again.

Your agent says there is no broker connection. Your AI app has DMS connected but not your broker. DMS cannot fix this; add your broker's connector in your AI app as in Step 4.

Nothing traded after month-end. Check the task's latest report. If it says it showed a plan and stopped, the first line reads Run mode: ASK FIRST (or is missing); change it to Run mode: AUTOMATIC. If it staged orders, confirm them in your broker's app. If it waited for an approval, see Step 6, item 4. If it could not reach DMS or your broker, reconnect that connector (for DMS, check it still appears under Connected apps in My Account). If there is no report at all, the task did not run.

Your agent says it must name a portfolio. You have more than one connection and the task's Portfolio: line is missing. The error lists your connection names. Copy the right line from My Account.

Your agent says there is no portfolio by that name. The name in the task does not match a connection, usually because it was renamed or typed by hand. Copy the instructions from the connection card again rather than editing the name by hand.

Your agent traded the wrong allocation. Check the Portfolio: line in that task. Two tasks pointing at the same connection is the usual cause. DMS cannot detect this, which is why the instructions make your agent report the portfolio label it used.

Your agent says the portfolio cannot be traded. It will name the reason, usually a strategy from the list in Step 1.

Your agent says it must sign in to DMS again. The app was disconnected, the connection went unused for 90 days, your Premium membership lapsed, or our terms changed and you have not re-accepted them. Check My Account first, then reconnect the DMS connector in your app.

Your agent says the token is invalid (direct feed only). You may have rotated or revoked it. Generate a new one and update your tasks.

Your agent says the data is stale. If the allocation data has not updated in four days, the feed refuses to serve rather than let your agent trade on old numbers. Contact us if it persists.

Your results do not match the site. Expect some difference. Published figures are backtested and do not include your trading costs, timing or partial fills. A large gap is worth reporting.

The confirmation code did not arrive. Check your spam folder, then select Send a new code. You can request one a minute.

Honest limitations

  • We cannot see whether your agent ran, what it traded, in which account, or whether it traded correctly.
  • We cannot check that you paired a connection with the right brokerage account. That is yours to get right.
  • AI agents make mistakes. They can misread instructions, invent tickers, size positions wrongly, or act on stale data.
  • This is documented but not supported. We cannot help debug your AI platform or your broker connection.
  • No broker supervises, audits or endorses any agent or strategy.
  • Performance shown on this site is hypothetical and backtested. Your results will differ.

If any of that is uncomfortable, AutoPilot does this for you, and we would rather you used it.

Permalink to this answer → Last updated September 20, 2026
What instructions do I give my agent?

Select Copy on the box below and paste the instructions into your AI agent or scheduled task. See the setup guide first.

One task per brokerage account. If you run more than one account, each gets its own scheduled task with its own copy of these instructions, and each names a different DMS connection.

The easy way: in My Account, on each connection card, choose your broker and account and how it should run, then select Copy agent instructions. You get these instructions with the header already filled in for that connection, ready to paste. Your broker and account details stay in your browser; DMS never receives them.

Copying from this page instead? Fill in the four lines at the top before you run anything:

  • Run mode AUTOMATIC places trades without waiting for you; ASK FIRST shows you the plan and waits for your OK. For your very first run, use ASK FIRST whichever you settle on.
  • Portfolio must exactly match one of your connections in My Account. Copy it from the card rather than typing it.
  • Broker and Account are how the agent knows which account to work in. Describe the account by nickname or last 4 digits, never the full number.

If you connected the DMS connector, nothing else is needed. If your agent uses the direct feed instead, replace YOURTOKENHERE with your token.

Right after you generate a token, the card's Copy agent instructions fills your token in too.

Paste the instructions rather than telling your agent to fetch this page. A copy you have read cannot change without you knowing.

Run mode: AUTOMATIC
Portfolio: YOUR_PORTFOLIO_NAME
Broker: YOUR_BROKER
Account: YOUR_ACCOUNT

You rebalance one brokerage account to match one portfolio published by Dual Momentum Systems (DMS).

## Absolute rules

1. **Never compute a strategy.** Do not calculate momentum, rank assets, apply moving averages, or decide what to hold. The DMS endpoint gives you the target weights. Your job is arithmetic and order entry, nothing else.
2. **One portfolio, one account.** The Portfolio line names a DMS connection. The Broker and Account lines name one brokerage account. Every balance, position and order in these instructions refers to that account only. Your broker connection can probably see other accounts; never use totals across accounts, and never place an order in any other account.
3. **Never invent a ticker.** Trade only tickers returned by the DMS endpoint, spelled exactly as given. If one will not trade, stop and report it.
4. **Never guess past an error.** If anything is missing, stale, refused or unclear, stop and report. Doing nothing is always safe. Doing something approximate is not.
5. **Never choose a portfolio yourself.** If the Portfolio line is missing, or DMS does not recognise the name, stop and ask the member. Do not pick one from the list because it looks right.

## Run mode

The first line of these instructions is the run mode, set by the member.

- **AUTOMATIC:** the member has approved placing the orders in your plan without asking. Place them. Every rule in "Stop and report" still applies.
- **ASK FIRST:** after Step 5, show the order plan and wait for the member to approve it before placing any order. If no one is there to approve, for example in a scheduled run, report the plan and stop.

If the member asks you directly in the conversation to report only, or to show the plan first, do that for this run whatever the run mode says. If the run mode line is missing or unclear, treat it as ASK FIRST.

Some brokers do not let an agent submit orders at all, and instead stage them for the member to confirm in the broker's own app. If yours works that way, prepare the orders, stage them, and say clearly in your report that they are staged and waiting. Do not treat staged orders as placed.

## Step 1 - Confirm both connections

Before anything else, confirm you can reach **both**:

- DMS: either the DMS connector (its get_target_allocation tool is available) or the direct DMS feed (Step 2)
- Your broker connection (you can list the member's accounts)

Then identify the account named on the Account line. If you cannot find it, or more than one matches, or you cannot tell which it is, stop and report. Do not guess.

If either connection fails, **stop and report the failure explicitly.** Do not report success. Do not conclude the account already matches its targets. A run that cannot see both sides has checked nothing.

## Step 2 - Fetch the target portfolio

**If the DMS connector is available, use it.** Call its `get_target_allocation` tool, passing the name on the Portfolio line as the `portfolio` argument. If the tool returns an error, report the `error` and `detail` exactly as given and stop.

If you are unsure the name is right, call `list_portfolios` to see the member's connections, report what you found, and ask. Do not choose one.

**Otherwise, use the direct feed:**

    GET https://dualmomentumsystems.com/agent-feed.php?portfolio=YOUR_PORTFOLIO_NAME
    Authorization: Bearer YOUR_TOKEN_HERE

URL-encode the portfolio name. Use this address exactly, and do not add www: that form redirects and the Authorization header is lost. If you get a redirect to a different address, do not follow it and retry; report it.

If neither the connector nor the feed works, stop and report it.

A successful result (from either) contains `portfolio`, `allocation_month`, `data_is_final`, `feed_stale_hours`, `notional_leverage_pct`, `targets` (a list of `ticker` and `weight_pct`, summing to 100) and `notes`. Read the notes.

## Step 3 - Check you were given the right portfolio

**Compare `portfolio.label` in the response with the Portfolio line at the top of these instructions.** If they do not match, stop and report both values. Do not trade.

This is the one check that catches the worst failure available to you: trading one account's allocation into a different account. It costs nothing and it is not optional.

The `targets` are the settled allocation for `allocation_month`. `data_is_final` describes whether that month's performance data is complete. It is normally false until the month ends. It does not affect whether to trade, so do not stop or ask because of it.

From the direct feed, on any status other than 200, stop and report the `error` and `detail` values exactly as given. Common cases: 401 token invalid, rotated or revoked; 403 Premium lapsed; 404 no connection by that name; 409 the request must name a connection; 422 portfolio cannot be traded this way; 429 too many requests; 503 data too stale. Do not retry a 404, 409 or 422.

## Step 4 - Read the account

From your broker connection, for the **named account only**, get:

- **Total equity, including cash.** Not only the market value of positions. Every target percentage is a percentage of this number.
- Every current position, with ticker and market value.

## Step 5 - Decide whether to act

For each target ticker: target dollars = total equity x weight_pct / 100.

For each position: current weight = market value / total equity x 100.

**If every target ticker's current weight is within 2.5 percentage points of its target, and the account holds nothing outside the target list, do nothing.** Report that the account already matches and stop.

You may be run daily while DMS publishes monthly. On most days there is nothing to do, and doing nothing is the correct result. Do not trade to correct small drift.

If any ticker is outside the band, or any position is held that is not in the target list, rebalance the **whole** account to target.

## Step 6 - Place or stage orders

**Sell first, then buy.** Buying first can use up buying power and leave the account half rebalanced.

1. Sell in full any position not in the target list.
2. Sell down any position above its target.
3. Wait until buying power covers the purchases.
4. Buy up any position below its target.

Use fractional shares where available. Targets rarely come to whole numbers of shares.

In ASK FIRST mode, show the full order plan before placing anything (see Run mode). If your broker stages orders rather than placing them, say so plainly.

## Step 7 - Report

Start with a one-line summary, such as "No trades needed" or "Rebalanced: 4 sells, 5 buys", so a scheduled run is easy to check. Then state plainly:

- The DMS portfolio label you used, and the account you traded
- The run mode you used, and whether orders were placed or staged
- The allocation month
- Every order placed or staged, with ticker, direction and dollar amount
- Any order that failed or only partly filled
- Final weights against targets
- `notional_leverage_pct`, so the leverage being run is visible

If you did nothing, say so and say why.

## Stop and report, do not proceed

- Either connection unreachable
- The named account not found, more than one match, or unclear which
- The Portfolio line missing, or not recognised by DMS
- `portfolio.label` in the response not matching the Portfolio line
- Any status other than 200 from the DMS endpoint
- `feed_stale_hours` above 36: report it and ask before trading
- A target ticker that will not trade in the account
- Order rejections, insufficient buying power, or partial fills that leave any ticker more than 2.5 percentage points off target
- Anything that would require you to choose a holding, a portfolio or an account yourself

## What you are not asked to do

Do not judge whether the strategy is a good idea. Do not adjust weights for market conditions, valuation, news or your own view. Do not substitute a similar fund for one that is unavailable. Do not add hedges. Do not time entry.

If the targets look wrong to you, say so in your report, and do not act on that opinion.
Permalink to this answer → Last updated September 20, 2026
What instructions do I give my agent on a free Claude account?

These instructions are for a free Claude account, run by hand after each month-end. If you have a paid AI plan, use the standard instructions instead: they use the DMS connector and can run on a schedule.

Why a different set? A free Claude account allows one custom connector, and your broker needs it. So instead of connecting DMS, your agent reads your targets from a private link: a web address for one of your connections, shown on its card in My Account.

The easy way: in My Account, on each connection card, choose your broker and account and how it should run, then select Copy agent instructions (with Free Claude account selected at the top). You get these instructions with the header already filled in for that connection, ready to paste. Your broker and account details stay in your browser; DMS never receives them. The Portfolio and Feed lines come filled in as a pair, so the private link always matches its connection.

Copying from this page instead? Fill in the lines at the top before you run anything. Take the Portfolio name and the private link from the same connection card, and describe the account by nickname or last 4 digits, never the full number. Run mode starts as ASK FIRST, so the agent shows its plan and waits for your OK; you are there, so that costs nothing.

Keep your private link private. Anyone with it can read that one portfolio's targets. It cannot trade. If you think it has leaked, select Reset link on the card; the old one stops working at once.

Each month, after month-end: open a new chat, paste these instructions, and send.

Run mode: ASK FIRST
Portfolio: YOUR_PORTFOLIO_NAME
Feed: YOUR_PRIVATE_LINK
Broker: YOUR_BROKER
Account: YOUR_ACCOUNT

You rebalance one brokerage account to match one portfolio published by Dual Momentum Systems (DMS).

## Absolute rules

1. **Never compute a strategy.** Do not calculate momentum, rank assets, apply moving averages, or decide what to hold. DMS gives you the target weights. Your job is arithmetic and order entry, nothing else.
2. **One portfolio, one account.** The Portfolio and Feed lines name one DMS connection. The Broker and Account lines name one brokerage account. Every balance, position and order in these instructions refers to that account only. Never use totals across accounts, and never place an order in any other account.
3. **Never invent a ticker.** Trade only tickers returned by DMS, spelled exactly as given. If one will not trade, stop and report it.
4. **Never guess past an error.** If anything is missing, stale, refused or unclear, stop and report. Doing nothing is always safe. Doing something approximate is not.
5. **Never use any other address.** Fetch the Feed line exactly as written. Do not search for DMS data, do not use another page, and do not repeat the Feed address anywhere except this conversation.

## Run mode

- **ASK FIRST:** after Step 5, show the order plan and wait for the member to approve it before placing any order.
- **AUTOMATIC:** the member has approved placing the orders in your plan without asking. Place them. Every rule in "Stop and report" still applies.

If the run mode line is missing or unclear, treat it as ASK FIRST.

Some brokers do not let an agent submit orders at all, and instead stage them for the member to confirm in the broker's own app. If yours works that way, prepare and stage the orders, and say clearly that they are staged and waiting. Do not treat staged orders as placed.

## Step 1 - Confirm your broker connection

Confirm you can reach the broker connection and list the member's accounts. Then identify the account named on the Account line. If you cannot find it, more than one matches, or you cannot tell which it is, stop and report. Do not guess.

If the broker connection fails, **stop and report it.** A run that cannot see the account has checked nothing.

If any header line still reads YOUR_..., the member has not filled it in. Stop and ask.

## Step 2 - Fetch the target portfolio

Fetch the address on the Feed line, exactly as written.

If the fetch itself fails, stop and report exactly what happened. Do not retry with a different address.

The response is JSON. **Check `ok` first.**

- `"ok": false` means DMS refused. Report the `error` and `detail` values exactly as given, and stop. There are no targets in a refusal, so there is nothing to trade.
- `"ok": true` means you have targets. Continue.

A successful response contains `portfolio`, `generated_at`, `allocation_month`, `data_is_final`, `feed_stale_hours`, `notional_leverage_pct`, `targets` (a list of `ticker` and `weight_pct`, summing to 100) and `notes`. Read the notes.

## Step 3 - Check you were given the right portfolio, and a fresh one

**Compare `portfolio.label` with the Portfolio line.** If they do not match, stop and report both values. Do not trade. This catches the worst mistake available here: one account's allocation traded into another.

**Check `generated_at`.** It is a UTC timestamp for when DMS produced this response. If it is more than 24 hours before now, you may have been given a cached copy. Stop and report it.

`data_is_final` describes whether the month's performance data is complete. It is normally false. It does not affect whether to trade.

If `feed_stale_hours` is above 36, report it and ask before trading.

## Step 4 - Read the account

From the broker connection, for the **named account only**, get:

- **Total equity, including cash.** Every target percentage is a percentage of this number.
- Every current position, with ticker and market value.

## Step 5 - Decide whether to act

For each target ticker: target dollars = total equity x weight_pct / 100.

For each position: current weight = market value / total equity x 100.

**If every target ticker's current weight is within 2.5 percentage points of its target, and the account holds nothing outside the target list, do nothing.** Report that the account already matches and stop.

If any ticker is outside the band, or any position is held that is not in the target list, rebalance the **whole** account to target.

## Step 6 - Place or stage orders

**Sell first, then buy.**

1. Sell in full any position not in the target list.
2. Sell down any position above its target.
3. Wait until buying power covers the purchases.
4. Buy up any position below its target.

Use fractional shares where available. In ASK FIRST mode, show the full plan before placing anything.

## Step 7 - Report

Start with a one-line summary, such as "No trades needed" or "Rebalanced: 4 sells, 5 buys". Then state plainly:

- The DMS portfolio label you used, and the account you traded
- The run mode, and whether orders were placed or staged
- The allocation month, and `generated_at`
- Every order placed or staged, with ticker, direction and dollar amount
- Any order that failed or only partly filled
- Final weights against targets
- `notional_leverage_pct`

If you did nothing, say so and say why.

## Stop and report, do not proceed

- The broker connection unreachable
- The named account not found, more than one match, or unclear which
- A header line still reading YOUR_...
- The Feed fetch failing, or `"ok": false`
- `portfolio.label` not matching the Portfolio line
- `generated_at` more than 24 hours old
- A target ticker that will not trade in the account
- Order rejections, insufficient buying power, or partial fills that leave any ticker more than 2.5 percentage points off target
- Anything that would require you to choose a holding, a portfolio or an account yourself

## What you are not asked to do

Do not judge whether the strategy is a good idea. Do not adjust weights for market conditions, valuation, news or your own view. Do not substitute a similar fund for one that is unavailable. Do not add hedges. Do not time entry.

If the targets look wrong to you, say so in your report, and do not act on that opinion.
Permalink to this answer → Last updated September 20, 2026

Strategy Concepts

What is Tactical Asset Allocation (TAA)?

Tactical Asset Allocation (TAA) is an active approach to investing that shifts a portfolio's mix of assets in response to changing market conditions. Rather than holding fixed weights forever - say, always 60% stocks and 40% bonds - a TAA strategy adjusts those weights month to month based on rules designed to favor what is working and reduce exposure to what isn't.

The goal is to capture meaningful upside during strong market environments while pulling back during serious downturns. Most TAA strategies use some form of momentum (leaning toward assets that have been rising) or trend-following (staying invested when an asset is above a long-term average, stepping aside when it falls below).

Reacting, not predicting

This is the point most often misunderstood. A TAA strategy does not forecast. Every signal it uses is computed from returns that have already happened, and the rules are fixed in advance. When a strategy moves to a defensive position, it is not because anything predicted a decline - it is because the trend it was following has already turned.

That distinction sets realistic expectations. A rules-based strategy will never exit at the top or re-enter at the bottom. It gives up some of the peak on the way out and some of the recovery on the way back in, in exchange for not sitting through the whole descent.

How it differs from buy-and-hold

A buy-and-hold investor accepts whatever the market delivers, including the full depth of bear markets. A TAA strategy attempts to earn competitive long-term returns with smaller, shorter drawdowns by rotating out of falling assets and into rising ones. The trade-off is that it won't always be fully invested in the best-performing asset, and it can lag during sharp, fast recoveries.

How it differs from strategic (static) allocation

Strategic allocation sets target weights - such as 40% US stocks, 30% international, 20% bonds, 10% real assets - and rebalances back to those targets periodically. The weights themselves don't change with market conditions. TAA goes a step further: the weights themselves are driven by signals, so the portfolio can look very different from one month to the next.

Whipsaw: the characteristic cost

The recurring frustration with any trend-following approach is the whipsaw - a signal that moves the portfolio defensive just as the market turns back up, or back into risk just as it rolls over again. A choppy, directionless market can produce several of these in a row, each one a small loss, with nothing to show for the trading.

Whipsaw cannot be eliminated without also giving up the protection that makes the approach worth running. It can only be managed. Several DMS strategies do this by locking a defensive decision in place for the remainder of a risk-off period rather than reconsidering it every month, accepting a missed rebound in exchange for not being repeatedly shaken in and out of position.

Monthly decisions, not necessarily monthly trades

Most strategies tracked on DMS evaluate their rules once a month using end-of-month data, and produce a target allocation for the month ahead. Whether that produces a trade is a separate question, and it varies by strategy:

  • Some act on every signal change, moving fully between positions.
  • Some, like the Permanent Portfolio strategies, hold their targets until a sleeve drifts outside a set band or the calendar reaches the annual rebalance, and may go a long time without trading.
  • Some deliberately let a continuing position drift rather than trading it back to exact weights.
  • A few are built from actual trade dates rather than month-end decisions, so their changes are stamped to the day the trade occurred, which can fall late in the prior month.

One consequence is worth knowing when reading the Allocations view: a change in published weights does not by itself mean a trade happened. A portfolio left completely alone will still show different weights next month, because the holdings grew and shrank at different rates. Trading costs on the site are measured against last month's allocation after that drift, so a month spent holding costs nothing even though the numbers on screen moved.

Turnover isn't free

Every trade carries a spread and, in a taxable account, potentially a tax bill. A strategy that trades often needs to earn enough to cover that. This is why the site offers the Include Trading Friction toggle, on by default, and the Taxable Account toggle - a TAA strategy's headline return before costs and after costs can be meaningfully different numbers.

Why TAA strategies vary widely

The universe of assets, the signals used, the lookback period, and the rules for switching between risk-on and risk-off positions all differ across strategies. Some rotate among a small set of broad ETFs; others select from a larger menu. Some go to cash or short-term bonds when conditions look poor; others rotate into defensive assets. These differences produce very different return and risk profiles, which is why comparing them across the same historical periods is useful.

Permalink to this answer → Last updated July 30, 2026

Strategy Mechanics

What do Risk On and Risk Off mean?

Risk On means the conditions a strategy requires for holding equities are being met, so it holds them. Risk Off means they are not, so it holds something defensive instead: treasuries, short-duration bonds, or cash equivalents depending on the strategy.

The terms describe a state the rules produce, not a forecast anyone is making. A strategy is Risk Off because a measurable condition failed, not because a decline is expected.

The site-wide Risk On / Risk Off indicator

The indicator shown on the site is a single, simple comparison:

Risk Off when the weighted momentum of US large-cap equities is at or below the weighted momentum of cash. Risk On otherwise.

In plain terms: if broad US equities have not been outperforming cash on a blended measure of recent returns, the market is in a Risk Off state.

The momentum figure here is the standard DMS weighted average, which blends the trailing 1, 3, and 6-month returns with half the weight on the 6-month leg. See the momentum FAQ for why it is built that way.

This indicator is a general market read. It is deliberately simple, it is stateless, and it is the same measure regardless of which strategy you happen to be looking at.

Individual strategies use their own gates

Here is the part worth understanding clearly: a strategy's own Risk On / Risk Off decision is not necessarily the same as the site-wide indicator.

Global Navigator, for example, considers both US and international equities. It goes Risk Off only when both fail to beat cash. So there are months where the site-wide indicator reads Risk Off, because US equities are lagging cash, while Global Navigator is fully Risk On and holding international equities, because those are beating cash comfortably.

Other strategies differ more still. Some use moving-average gates rather than momentum comparisons. Some have multiple sleeves that can be in different states simultaneously, so the strategy as a whole is neither wholly Risk On nor wholly Risk Off. Some use a canary asset, where an unrelated instrument acts as the trigger.

The site-wide indicator tells you the general weather. The strategy's allocation tells you what that strategy is actually doing, and the allocation is authoritative.

The signal is lagged deliberately

Signals are computed from the prior month's completed data, then applied to the month ahead. No strategy uses data from the month it is trading in, because that data does not exist yet when the decision has to be made.

This is a correctness requirement rather than a design preference. A backtest that decides January's allocation using January's returns is reporting results nobody could have achieved.

What being Risk Off does and does not mean

  • It is not a market crash prediction. The gate is a comparison of recent returns. It fires when trends deteriorate, which sometimes precedes a decline, sometimes coincides with one, and sometimes turns out to be a false alarm.
  • It is not necessarily cash. Most DMS strategies rotate into treasuries or other defensive assets rather than sitting in cash. What that defensive position holds varies by strategy and can be adjusted further by overlays like the Treasury Duration Limiter.
  • It is not permanent. The gate is re-evaluated every month.
  • It will sometimes be wrong. A gate that goes defensive just as the market turns up costs you the rebound. This is the whipsaw discussed in the Tactical Asset Allocation FAQ, and it is the unavoidable price of having any defensive rule at all.

Why the equity-versus-cash comparison

The comparison is not "are equities rising" but "are equities beating cash." Those are different questions, and the second is the one that matters to someone deciding where to put money.

Equities grinding out 1% a year while cash pays 5% are rising and are also the wrong place to be. Using cash as the reference point builds that judgment into the rule automatically, and it is what makes the same rule sensible across eras with wildly different interest rates.

Permalink to this answer → Last updated July 30, 2026
How is momentum actually measured?

Momentum in these strategies means something specific and mechanical: a number computed from an asset's own recent returns, used to rank it against other assets or to test it against cash. Different strategy families use different formulas, and the differences are deliberate.

The DMS weighted average

The formula used by Global Navigator, LT Gain, Smart Leverage, and the site-wide Risk On / Risk Off indicator is:

wa = 0.25 x (1-month return) + 0.25 x (3-month return) + 0.50 x (6-month return)

Each component is the cumulative return over that trailing window, through the end of the most recently completed month. Half the total weight sits on the 6-month leg.

Why six months carries half the weight

The instinct is usually the opposite. Recent data feels more relevant, so weighting the most recent month heavily seems more responsive and therefore more protective.

We tested exactly that. Reversing the emphasis to put half the weight on the 1-month leg was run across the full history of the Global Navigator family. It was worse. The reason is instructive: a signal dominated by the most recent month is easily flipped by a single counter-trend bounce, and counter-trend bounces are a defining feature of the exact market episodes a defensive rule exists to catch. In both October 1987 and the 1994 bond selloff, a one-month rebound would have vetoed a defensive move that the slower weighting correctly took.

The current weighting also sits on a wide plateau. Varying the 1-month weight anywhere from zero to 0.40 produces identical results, which is the signature of a robust setting rather than a tuned one. A parameter that only works at one precise value is usually fitted to history rather than measuring anything real.

Other formulas in use

Not every strategy on the site uses the DMS weighted average. The third-party strategies published here use the formulas their original authors specified, because reproducing someone else's strategy means reproducing their rules, not substituting ours.

  • The unweighted 1/3/6/12 average, sometimes written 13612U, is a plain average of the trailing 1, 3, 6, and 12-month returns. Used by the Keller and Keuning family and by generalized protective momentum approaches.
  • The weighted 13612W applies descending weights across the same four lookbacks, emphasizing the shortest: twelve parts the 1-month return, four parts the 3-month, two parts the 6-month, one part the 12-month, divided by four. Used for canary sign-testing and universe ranking in the defensive and protective allocation strategies.
  • Moving-average gates ask a different question entirely: is the asset above its own trailing average, yes or no. Triad's defensive sleeve is gated this way rather than by a momentum comparison.

What all of these have in common

  • They use completed months only. Signals are computed from the prior month's closing data and applied to the month ahead.
  • They are cumulative returns, not annualized ones. A 6-month return is the actual compounded return over six months.
  • They are total return figures, including dividends and distributions.
  • They are compared, not thresholded. With few exceptions, momentum is used to rank assets against each other or to test one against cash, rather than checked against some fixed number.

Why any of this works

The honest answer is that nobody knows with certainty, and the strategies do not depend on knowing. Momentum's persistence across a century of data, across asset classes, and across markets is one of the most heavily documented effects in finance, and it has survived publication, which most claimed anomalies do not.

The common explanations involve investors reacting to news gradually rather than instantly, and then overreacting once a trend is established. Whether that is the true mechanism is not something a backtest can settle.

What we can say is narrower and more useful: over the full record available, ranking assets by these formulas and holding the leaders has produced better risk-adjusted outcomes than holding everything through everything. That is an empirical claim about the past, and it is the only kind of claim any of this can support.

Where to see the numbers

Each strategy's page shows the signal values driving its current allocation, using whichever formula that strategy actually employs. If a strategy is Risk Off and you want to know how close the call was, that is where to look.

Permalink to this answer → Last updated July 30, 2026
What is Smart Leverage, and how does it work?

Smart Leverage is a rules-based overlay used in several DMS strategies that selectively deploys leveraged ETFs during market recovery windows - when the odds are in your favor of capturing additional gains on the upside without large downside risk. It is not the same as being permanently leveraged. The base strategy operates unleveraged; leverage is an occasional, conditional event triggered by a market drawdown.

Arming, then deploying

Smart Leverage works in two steps, and the distinction matters when you are watching a live allocation.

Step one: arming. Smart Leverage watches the month-end drawdown of IWB (the iShares Russell 1000 ETF) from its highest month-end close on record. When that drawdown reaches 10% or greater, Smart Leverage arms. Nothing changes in the portfolio yet.

Step two: deploying. Once armed, Smart Leverage waits for a month where all of the following are true:

  • It is a later month than the one that armed it. Arming and deploying never happen in the same decision.
  • IWB's momentum has turned favorable against cash.
  • The strategy's own Risk On choice is IWB specifically.

Only then does the substitution happen:

  • 2× strategies (Global Navigator 200, LT Gain 200, Triad 135) enter SSO, a 2× S&P 500 ETF.
  • 3× strategies (Global Navigator 300, LT Gain 300, Triad 170) enter UPRO, a 3× S&P 500 ETF.

The wait can be long. In the spec's worked example the drawdown armed Smart Leverage in March 1980, but momentum did not turn until June, so June is when leverage was actually deployed.

The drawdown is measured from month-end close to month-end close; intraday swings do not trigger Smart Leverage. It can accumulate across multiple months of declining markets, so it is not a single-month measure.

If the strategy rotates to international instead

For strategies that can hold international equities, there is an important exception. If the strategy's Risk On choice turns out to be international rather than IWB while Smart Leverage is armed, the arm is cancelled rather than deployed.

The reasoning: the drawdown fired during a stretch where the strategy preferred international markets. Coming back to IWB later is a different environment, not a continuation of the recovery that armed it.

A cancelled arm also blocks re-arming until the strategy passes through a Risk Off month. Without that block, the drawdown still sitting on the books would simply re-arm Smart Leverage the following month and undo the cancellation.

The exit rule

A live deployment ends on whichever of these comes first:

  • The 12-month cap is reached. Deployments are capped at twelve consecutive months, which limits exposure to the volatility decay that erodes leveraged ETFs over long holds.
  • The strategy goes Risk Off. Leverage exits regardless of momentum.
  • Cash momentum overtakes IWB. This is its own exit condition and can fire even while the strategy still holds equities elsewhere.

When the position closes, the strategy returns to its unleveraged default.

One trigger, one deployment

This is the rule most often misread. Once a deployment ends, for any of the three reasons above, the original drawdown is spent. If momentum flips favorable again the very next month, Smart Leverage does not redeploy. Only a fresh 10% drawdown in IWB can arm it again.

The spec's diagnostic case is April 1981: IWB was beating cash, the strategy was in equities, and Smart Leverage stayed on the sidelines because the drawdown that had armed it earlier was already used up.

A note on taxes

The 12-month cap is deliberately set where it is partly with taxable accounts in mind, since a longer hold is more likely to reach favorable long-term treatment than rapid in-and-out trading. Treat that as a design leaning, not a promise - the IRS long-term test requires holding more than one year, and a position closed at the twelve-month cap sits right at that boundary. Your own treatment depends on actual trade dates and your tax situation.

How often does it trigger?

Smart Leverage triggers infrequently and selectively. The goal is not to be leveraged most of the time, but to concentrate leverage in high-conviction recovery setups - periods where a meaningful market pullback has already occurred and momentum signals a return to equities.

Historical track record

The historical results have been compelling. For Global Navigator, only one of its Smart Leverage periods produced a worse outcome than staying unleveraged would have.

What Smart Leverage is not

Smart Leverage is not a guarantee. Leverage amplifies both gains and losses - if the market continues to fall after deployment, the impact is magnified compared to holding the unleveraged fund. The historical win rate is high, but no rule works every time. Anyone using a leveraged strategy variant should be comfortable with the possibility of outsized drawdowns during the periods when leverage is active.

To date, the Smart Leverage variants have not recorded deeper maximum drawdowns than their unleveraged parents. That is a historical observation, not a property of the design, and it may not hold in future.

Which strategies use Smart Leverage?

Six: Global Navigator 200 and 300, LT Gain 200 and 300, and Triad 135 and 170.

The three-digit number in a strategy's name indicates its maximum total notional leverage - Triad 135 can reach 135%, Global Navigator 300 can reach 300%. Some strategies carry such a number without running the overlay themselves. Calculated Risk 229 and Calculated Risk 288 are portfolios of other strategies, and their leverage comes from the leveraged components they hold rather than from their own Smart Leverage instance.

If you pull up a strategy on the Strategy View page, you can see the maximum and average leverage positions by strategy at the bottom of the ALLOCATIONS & CONTRIBUTIONS section.

Permalink to this answer → Last updated July 30, 2026
What is the Treasury Duration Limiter (TDL)?

Treasury Duration Limiter, TDL. A protective overlay built into several DMS strategies that steers the Risk Off holding into short-duration treasuries when long-duration treasuries look hazardous.

Why it exists

Several DMS strategies hold long-duration treasuries as their Risk Off asset. Historically, when equities fall, investors flee to long-duration treasuries, which drives their prices up and helps cushion market drawdowns. That relationship held reliably for decades, but it is not guaranteed. In early 2022, rising interest rates caused long-duration treasuries to fall at the same time as equities - one of the worst years on record for long-duration treasury returns. Strategies that rotated defensively into long-term treasuries in that environment found that the expected safe harbor was also under water.

TDL was developed in response to that reality. The goal: if long-duration treasuries look likely to be hazardous, steer into short-duration treasuries instead and avoid compounding a bad equity period with a bad treasury period.

How the signal works

TDL uses a momentum signal on long-duration treasuries themselves. It applies a weighted lookback to long-duration treasury returns, blending the trailing 1, 3, and 6-month results with half the weight on the 6-month leg. If that weighted result is negative - long duration is losing money on its own terms - TDL fires and the Risk Off allocation moves to short-duration treasuries.

The deliberate emphasis on the slower 6-month leg matters. The episodes TDL exists to catch are ones where long duration has been damaged for months but has just bounced. A faster, more recent-weighted formula would let a single flight-to-quality month veto the signal. Testing across 44 years of history confirmed this: weighting the most recent month more heavily caused TDL to miss both October 1987 and the 1994 bond massacre. The current weighting also sits on a wide plateau, meaning small changes to it produce identical results - a sign the setting is robust rather than tuned.

Once TDL fires, it stays fired

TDL is not re-evaluated every month. Once it fires within a Risk Off run, the short-duration position is locked and held for the remainder of that run. The lock clears only when the strategy returns to Risk On.

This is intentional. It prevents whipsawing back into long duration on a single-month reversal, and it produces a smoother path with fewer trades. The tradeoff is real: if long-duration treasuries rally later in the same Risk Off run, the strategy sits it out. That cost was measured and accepted.

What TDL does not do

TDL is only active when a strategy is already in its Risk Off, defensive position. It has no effect on equity allocations and does not determine when to enter or exit equities - that remains the exclusive domain of the strategy's momentum rules. TDL is purely a safety layer within the treasury sleeve.

Which strategies use it

TDL is built into the Global Navigator family (Global Navigator, 200, and 300) and the LT Gain family (LT Gain, 200, and 300). It is part of those strategies, not a separately configurable option.

Not every DMS strategy needs it. Triad, for example, was tested with four different TDL variants on its defensive sleeve and every one performed worse than leaving the sleeve alone. Global Navigator needs a TDL because it goes fully Risk Off for extended runs. Triad's defensive weight is much smaller and is already conditioned by three separate trend gates, so a second timing layer adds whipsaw rather than protection.

Permalink to this answer → Last updated July 30, 2026
Why do some strategies trade every month and others hardly at all?

Every DMS strategy makes a decision once a month. Whether that decision produces a trade is a separate question, and the answer varies enormously across the lineup.

Two different rebalancing philosophies

Signal-driven strategies trade whenever their rules point somewhere new. A momentum strategy that rotates from equities to treasuries acts on that immediately and completely. If the signal is unchanged, the position is generally left alone.

Band-based strategies hold fixed target weights and only trade when a holding drifts far enough away from its target to matter. Between those breaches they do nothing at all, sometimes for years.

Many strategies combine both: signals decide what to hold, bands decide when it is worth trading to get back to precise weights.

How drift bands work

Suppose a strategy targets 25% in an asset. Rather than restoring exactly 25% every month, it defines a band around that target, and trades only when the position leaves the band.

The Permanent Portfolio strategies use a wide band on their four equal sleeves, rebalancing a sleeve only when it falls below 15% or rises above 35%. They also rebalance every January regardless. In practice this means long stretches with no trading at all.

Other strategies use tighter bands. Triad allows its sleeves to drift within a 5% band before pulling them back. GPMv uses a similar tolerance.

Why not just rebalance every month?

Because precision is not free and it is not obviously better.

  • Every trade costs something. Spread, market impact, and in a taxable account, realized gains. Restoring a position from 26.3% to 25.0% incurs real cost to correct a difference that has almost no effect on outcomes.
  • Drift is partly a feature. A holding grows relative to the others because it is outperforming. Trimming it immediately and mechanically means systematically selling what is working. Letting it run within a tolerance captures some of that.
  • Tax consequences compound. In a taxable account, every unnecessary rebalance realizes gains earlier than needed. Bands defer that.

The tradeoff is that a band-based strategy carries somewhat different weights than its stated targets most of the time. The bands are set so that difference stays within a range that does not change the strategy's character.

What this looks like on the site

Two consequences you will notice in the Allocations view:

Published weights change even when nothing was traded. A portfolio left completely alone still shows different percentages next month, because the holdings grew and shrank at different rates. That is drift, not activity.

Trading costs do not track changes in published weights. The friction model compares each month's targets against what the strategy was actually holding after drift, not against last month's published percentages. A month spent holding costs nothing even though the numbers moved. A rebalance back to unchanged targets does cost something, because real money moved. The Trading Friction FAQ covers this in detail.

Why the difference matters when choosing a strategy

Turnover is a real consideration, not a technicality:

  • In a tax-deferred account, high turnover costs you spread and little else.
  • In a taxable account, high turnover can meaningfully reduce what you keep. The Tax Profile panel shows how much of a strategy's realized gains historically qualified for long-term treatment, which is largely a function of how often it trades.
  • For your own discipline, a strategy that changes position frequently demands more attention and more opportunities to second-guess it than one that sits still for months.

None of this makes low turnover better in the abstract. A strategy that trades often because its rules genuinely call for it is doing its job. But two strategies with similar returns and very different turnover are not equally attractive in every account.

Where to check

Each strategy's page reports its historical turnover and trading costs, and the Allocations view shows exactly what changed month to month. If you want to know what running a strategy would actually involve month to month, that is the place to look before committing to it.

Permalink to this answer → Last updated July 30, 2026

General

agent-rebalancing-setup-guide

Agent Rebalancing (Beta) - Setup Guide

Premium members. Draft - do not publish until the feature is built and Randy has run it end to end for a full month turnover.


What this does

Your AI agent reads your DMS portfolio's target weights, reads your Robinhood Agentic account, works out the difference, and places the trades.

It removes the arithmetic and the order entry. You still decide when it runs.

What it does not do

This is not automatic trading. Nothing happens unless your agent is triggered - either because you asked it to, or because you set up a schedule in your own AI platform. If nothing triggers it, nothing happens, and your account keeps last month's allocation.

DMS is not connected to Robinhood. There is no link between the two. DMS publishes your target weights at a private URL; your agent reads them. DMS cannot see your account, cannot see your balance, cannot tell whether your agent ran, and cannot place, cancel or reverse a trade.

Your agent is the only thing that sees both sides.

What you need

  • A DMS Premium subscription
  • A Robinhood account, plus a Robinhood Agentic account (a separate

account you open and fund)

  • A paid AI plan that supports custom MCP connectors - Claude (Cowork or

Claude Code), ChatGPT, or another MCP-capable agent

  • A desktop computer for the Robinhood setup. Opening the Agentic account and

the initial authorisation cannot be done on mobile.

If you do not already pay for an AI plan, be aware that adding one costs more per year than AutoPilot, which does scheduled execution for you and does not require any of this setup. AutoPilot is the better choice for most people.


Step 1 - Build your portfolio on DMS

Open the Custom Portfolio Builder from the toolbar. Blend whichever strategies you want, at whatever weights, totalling 100%.

A single strategy at 100% is fine - that is the normal case.

Some strategies cannot be traded this way:

  • Anything with 300 in the name - Catalyst 300, Global Navigator 300,

LT Gain 300 - and both Profit Farmer strategies. These run at up to 300% notional leverage.

  • Alpha by Sector, which is available through AutoPilot instead.
  • GTAA Agg3, which is still being validated.

If your portfolio includes one of these, the selector in Step 2 will tell you which.

Editing this portfolio later changes what your agent trades on its next run. There is no separate confirmation step.

Step 2 - Get your token

My Account → Agent Rebalancing (Beta)

  1. Choose which saved portfolio your agent should trade.
  2. Read the terms and tick the box.
  3. Generate your token.

The token is shown once. Copy it somewhere safe. If you lose it, rotate to get a new one - which means reconfiguring your agent.

Your token is a password to your DMS allocation data. Treat it that way. It cannot place trades or touch your money, but anyone holding it can read your portfolio's positions.

Step 3 - Open and fund a Robinhood Agentic account

On desktop, follow Robinhood's instructions for opening an Agentic account.

Fund it with an amount you have decided to put under an AI agent. This is the sizing decision, and it is the only one. Your agent trades 100% of whatever is in that account, and nothing outside it.

If you have $500,000 at Robinhood and want $50,000 following a DMS strategy, move $50,000. The other $450,000 sits in your regular account, untouched.

Do not hold cash back inside the Agentic account. DMS strategies are complete portfolios - they hold their own defensive positions and go to cash internally when the signals say so. Money you leave uninvested will be spent on the first rebalance anyway. If you want a cash buffer, add a cash sleeve to your DMS portfolio instead.

Turn on per-order approval. Robinhood lets you require confirmation before each trade. We recommend it, particularly for the first few months. We cannot see or enforce this setting - it is yours.

Step 4 - Connect your agent

Add two connections to your agent.

Robinhood: add https://agent.robinhood.com/mcp/trading as a custom MCP connector and complete Robinhood's authorisation.

DMS: your agent needs to call https://www.dualmomentumsystems.com/agent-feed.php with your token in an Authorization: Bearer header.

Then give your agent the instruction pack - see DMS Agent Instructions - and paste your token where it says to.

Step 5 - Test before you schedule

Ask your agent to fetch your DMS targets and report them, without trading. Compare against the allocation shown on the DMS site for the same month. They should match exactly.

Then ask for a rebalance plan without placing orders. Check the dollar amounts look sane against your account.

Only then let it trade.

Step 6 - Schedule it, if you want to

DMS signals update monthly, but most scheduling features do not offer a monthly option. Use daily. The instruction pack is written to be safe to run every day: on days when your account already matches the targets, it does nothing.

A daily schedule is more reliable than a monthly one. A missed day costs nothing, because tomorrow's run catches it.


What to check on, and how often

Monthly, when your DMS digest email arrives. It tells you the allocation month has turned over. Check that your account reflects the new allocation within a few days.

Your token's "last used" date in My Account. This is the only signal DMS can give you that your agent is running. If it stops updating, your scheduled task has stopped working.

Your Robinhood activity feed. The trades are visible there like any others.

When something goes wrong

Nothing traded. Most likely your scheduled task did not run, or your agent could not reach one of the two connections. Check your platform's task history. Try disconnecting and reconnecting the Robinhood MCP.

Your agent says the portfolio cannot be traded. It will name the reason. Usually an ineligible strategy in your blend, or weights not totalling 100%.

Your agent says the data is stale. DMS publishes after month end. If the feed has not updated in four days, the endpoint refuses to serve rather than let your agent trade on old numbers. Contact us if it persists.

Your results do not match the site. Expect some difference. Published figures are backtested and do not include your trading costs, your timing, or partial fills. A large gap is worth reporting.


Honest limitations

  • We cannot see whether your agent ran, what it traded, or whether it traded

correctly.

  • AI agents make mistakes. They can misread instructions, invent tickers, size

positions wrongly, or act on stale data.

  • This is a Beta feature. It is documented but not supported. We cannot help

debug your AI platform or your Robinhood connection.

  • Robinhood does not supervise, audit or endorse any agent or strategy. DMS

has no affiliation with Robinhood.

  • Performance shown on this site is hypothetical and backtested. Your results

will differ.

If any of that is uncomfortable, AutoPilot does this properly and we would rather you used it.

Permalink to this answer → Last updated September 14, 2026