Worked research note
A 200-day trend rule: an evidence audit
The recorded path is reproducible; taxes, nearby parameters, and later-window tests are not part of the evidence.
By ArthaPilot Research
Published 2026-10-11
Research question
One SPY-or-SHY moving-average backtest with recorded turnover and robustness evidence the fixture cannot supply.
Scope: The report evaluates one long-only U.S. equity-or-short-Treasury rule and one moving-average length.
One center rule produced an attractive but incomplete record
The configured rule holds SPY when its price is above a 200-day moving average and SHY otherwise. In the recorded backtest from January 3, 2017 through December 31, 2024, it produced 11.21% CAGR, a 0.752 Sharpe ratio, and a 25.07% maximum drawdown.
Those three figures describe one realized path. Without adjacent lookbacks or held-out windows, they cannot distinguish a durable relationship from a favorable parameter and sample combination.
Exhibit 01
Content-pinned result
The recorded 200-day result
The verified return and risk summary from the single committed SPY/SHY fixture.
What return and drawdown did the recorded 200-day SPY-or-SHY rule produce on its full path?
Construction. Evaluate the configured state condition on the daily schedule and apply the recorded allocation path. Calculate CAGR and maximum drawdown from the resulting portfolio-value series. Report Sharpe separately in the result ledger because it is not a percentage metric.
| Category | Full-path metric |
|---|---|
| CAGR | 11.21% |
| Maximum drawdown | 25.07% |
Source and construction: Recorded ArthaPilot Strategy Builder fixture; 2017-01-03 through 2024-12-31; engine 1.0.0; response hash 969f807dc429… .
How this figure was calculated
Inputs
- A daily 200-day SPY simple-moving-average condition with SPY risk-on and SHY otherwise.
- The committed total-return response from 2017-01-03 through 2024-12-31 with zero costs and slippage.
- A $10,000 starting principal and no inflation adjustment, so every figure is nominal.
Calculation
- Evaluate the configured state condition on the daily schedule and apply the recorded allocation path.
- Calculate CAGR and maximum drawdown from the resulting portfolio-value series.
- Report Sharpe separately in the result ledger because it is not a percentage metric.
What this step cannot establish
These are full-path results for one parameter. They are not parameter, holdout, cost, or tax evidence.
Exact values behind the figure
| Series | Recorded outcome | Value (%) |
|---|---|---|
| Full-path metric | CAGR | 11.21% |
| Full-path metric | Maximum drawdown | 25.07% |
The center rule is reproducible but not validated across parameter choices. The first conclusion is about evidence quality rather than strategy quality.
Nothing in this fixture supports a comparison with buy-and-hold, another lookback, or another defensive asset.
The state path reveals the implementation burden
The strategy spent 82.75% of days in SPY and 17.25% in SHY. It changed state 44 times. Total one-way turnover was 44.0 and annual one-way turnover was 5.510934, using the engine's decimal convention in which 1.0 means 100%.
That turnover is part of the strategy, not a secondary statistic. Yet the recorded request set transaction costs and slippage to zero and did not enable investor taxes. The path tells us how much trading occurred; it does not tell us what that trading would have cost a household.
Exhibit 02
Content-pinned result
Exposure and turnover behind the headline
The recorded state occupancy and transition statistics, with the engine's turnover units made explicit.
How was the recorded path divided between SPY and SHY states?
Construction. Count response days assigned to each state and divide by total state-classified days. Convert the state fractions to percentages and verify they sum to 100%. Keep transition count and turnover in the adjacent ledger rather than mixing their units into the chart.
| Category | State occupancy |
|---|---|
| SPY risk-on | 82.75% |
| SHY default | 17.25% |
Note: The chart shows exposure time; the result ledger reports 44 transitions and 5.510934 annual turnover.
Source and construction: Same recorded ArthaPilot fixture; transaction costs, slippage, and investor taxes disabled.
How this figure was calculated
Inputs
- The response's Risk-On and Default state occupancy fractions.
- The recorded 44 transitions and one-way turnover fields used as implementation context.
Calculation
- Count response days assigned to each state and divide by total state-classified days.
- Convert the state fractions to percentages and verify they sum to 100%.
- Keep transition count and turnover in the adjacent ledger rather than mixing their units into the chart.
What this step cannot establish
State occupancy describes exposure. It does not price the trades created by the 44 transitions.
Exact values behind the figure
| Series | Portfolio state | Time in state (%) |
|---|---|---|
| State occupancy | SPY risk-on | 82.75% |
| State occupancy | SHY default | 17.25% |
A strategy that turns the portfolio over more than five times per year cannot be said to survive costs or taxes on the basis of a zero-friction run.
That is not evidence that costs or taxes would erase the result. It is evidence that the omitted tests are financially material and must be run before answering the title question.
The recorded result cannot answer the title
The fixture contains one moving-average length, one full historical window, and zero configured transaction costs or slippage. Investor taxes are disabled.
Those settings support a narrow negative conclusion: the recorded backtest does not establish parameter, temporal, cost, or tax survival.
Exhibit 03
Method note
Scope of the insufficiency finding
The claims excluded by the request and response fields in the committed fixture.
How much turnover did the one recorded trend path generate before the omitted cost and tax tests?
Construction. Read total_turnover as the cumulative multiple of portfolio value traded across the full path. Read turnover_per_year as the engine's annualized turnover multiple; do not convert either value to a performance return.
| Category | Recorded turnover |
|---|---|
| Full-path total | 44× |
| Annualized | 5.511× |
Note: The fixture records zero configured trading costs and slippage and no investor-tax result.
Source and construction: Scope boundary derived from the configured and omitted fields in the committed ArthaPilot fixture.
How this figure was calculated
Inputs
- Total turnover and annual turnover from the recorded tactical response.
- The request's zero trading-cost and slippage inputs and the response's null tax result.
Calculation
- Read total_turnover as the cumulative multiple of portfolio value traded across the full path.
- Read turnover_per_year as the engine's annualized turnover multiple; do not convert either value to a performance return.
What this step cannot establish
Turnover shows the implementation burden that requires cost and tax tests. It does not estimate the return drag those omitted tests would produce.
Exact values behind the figure
| Series | Turnover measure | Portfolio-value multiple |
|---|---|---|
| Recorded turnover | Full-path total | 44× |
| Recorded turnover | Annualized | 5.511× |
The content-pinned evidence supports a reproducible 200-day result and an equally reproducible insufficiency finding.
The report does not convert absent comparisons into implied results.
Method and constraints
Method
The displayed 200-day SPY/SHY results reconcile to one committed request and response fixture.
Verification: Preserve the fixture path, source commit, engine version, and request/response SHA-256 hashes with the note.
Verification: Reconcile displayed state percentages, transitions, and turnover units to the committed response.
Verification: Do not place any tax-aware or cost-friction label on the recorded metrics.
Assumptions held fixed
- The worked case is the committed 200-day SPY/SHY strategy response covering 2017-01-03 through 2024-12-31.
- The report uses only the recorded CAGR, Sharpe ratio, maximum drawdown, state occupancy, transition count, and turnover facts.
- The engine reports turnover in decimal units, where 1.0 means 100% one-way turnover.
- Transaction costs, slippage, and investor taxes were disabled in the recorded request.
What this study establishes
The honest answer is not yet. The committed case shows that one 200-day SPY-or-SHY rule produced 11.21% CAGR, a 25.07% maximum drawdown, and a 0.752 Sharpe ratio from January 2017 through December 2024. It does not show that nearby lookbacks behaved similarly, that the rule held up in later test windows, or that it survived taxes.
The fixture is still useful because it exposes the implementation path behind the headline: 82.75% of days in SPY, 17.25% in SHY, 44 state transitions, and 5.510934 annual one-way turnover under the engine's decimal convention. With transaction costs, slippage, and investor taxes all disabled, those figures define the tests the strategy has yet to pass.
Limitations
- The report evaluates one long-only U.S. equity-or-short-Treasury rule and one moving-average length.
- It contains no parameter grid, walk-forward fold, start-year matrix, transaction-cost stress, or tax-aware replay.
- The 2017–2024 history is one realized market sequence and is not an independent forecast trial.
- The result does not replicate diversified futures trend following across asset classes.
Sources and prior research
- Tobias J. Moskowitz, Yao Hua Ooi, and Lasse Heje Pedersen, Time series momentum (2012)
Peer-reviewed foundation for treating trend following as a testable return relationship across assets and samples.
- Brian Hurst, Yao Hua Ooi, and Lasse Heje Pedersen, A century of evidence on trend-following investing (2017)
Firm research precedent for testing trend behavior across a broader history and set of economic conditions than one worked case.
- ArthaPilot, Strategy Builder methodology (2026)
Calculation contract for signal timing, state transitions, turnover, parameter sweeps, walk-forward validation, and tax-aware exclusions.
Evidence and reproducibility
trend-following-robustness-recorded-demo-fixture
A descriptive worked note reporting one zero-friction 200-day SPY/SHY backtest and concluding that it cannot establish parameter, temporal, cost, or tax survival.
Evidence date: 2026-08-17. Basis and units are stated in each recorded fact.
note=2d71feada64cd2933119894b3b6d53bc1b38569cca57d2903a41cd431d26046c; request=73ed0528a6df917a7305f7bcd3928471d8c547d94627023a94d3fd07052e0ded; response=969f807dc4299351a4bb7243f783041c275ec8e80269ab61735d0dd19d6ee774
Source: web/src/data/research/portfolio/fixtures/strategy-builder.record.json. Versions: fixture1=69daa3e2f3fd5efe2faa78e6b08748eee1bc250c@1.0.0.
- A result for another moving-average length
- A walk-forward or start-year finding
- A claim that the strategy survives transaction costs, slippage, or investor taxes
Inspect the same question with your own inputs
The linked tools expose the assumptions, dates, and result tables behind this report.
- Inspect the signal Test how an indicator lines up with future returns before placing it inside an allocation rule.
- Build and stress the rule Run nearby parameters, walk-forward windows, and explicit execution assumptions.
- Browse strategies Compare published strategy definitions and historical results with their stated assumptions.