Backtested research example
🗓 Backtest period: 2023-01-01..2026-08-05
Spec ID: spec-multitimeframe-momentum-us-stocks-1783167355_v16 · Generated: 2026-08-01 09:09 UTC
Cluster: Momentum · Sub Cluster: Weekly-Daily Trend Alignment
Long-only US stock momentum strategy that buys liquid names only when daily and completed-week trend filters are simultaneously bullish. Positions are volatility-sized with a 10% notional cap and exited on trend failure, ATR trailing stop, or maximum holding age.
Trend-following assumes that price moves in large liquid equities can persist because information diffusion, institutional rebalancing, benchmark flows, and behavioral underreaction do not resolve instantly. Requiring both daily and weekly alignment attempts to filter out short-lived bounces and participate only when shorter-term strength is confirmed by a slower regime signal.
The ATR-based sizing and trailing stop are structural risk controls: they reduce concentration in high-volatility names, cut positions whose realized path no longer supports the trend, and allow winners to run until either trend alignment breaks or the time stop is reached.
[code omitted from public view]
| Param | Value | Notes |
|---|---|---|
| Rule type | MULTI_TIMEFRAME_TREND_MOMENTUM | Long-only multi-timeframe trend filter |
| Universe | 20 US stocks | Supplied symbols; nominally top 20 by capitalization |
| Backtest window | 2023-01-01..2026-08-05 | Daily bars |
| Initial capital | $30,000 | Portfolio capital base |
| Max leverage | 4.0x | Portfolio-level leverage allowance |
| Rebalance | Daily at close | Market-on-close execution convention |
| Daily trend | SMA20 > SMA50, close > SMA20, 5-day SMA20 slope > 0 | All conditions required |
| Weekly trend | SMA20w > SMA50w, weekly close > SMA20w, 4-week SMA20w slope > 0 | Uses completed Friday week only |
| Liquidity filter | 20-day avg dollar volume >= $10,000,000 | Entry eligibility screen |
| Position sizing | ATR(14) risk sizing | Target 1% equity risk per position |
| Position cap | 10% of equity | Per-name notional cap |
| Trailing stop | 3.0 * ATR(14) | Long exit stop |
| Max holding period | 126 trading days | Time-based exit |
| Costs | $0.004/share, $1 min/order, max commission 1%, 0 bps slippage | No explicit market-impact model |
| # | Concern | Status |
|---|---|---|
| 1 | Daily close/high/low/volume signals executed at same-day open | Not present; strategy executes at the close using the platform MOC convention |
| 2 | Weekly trend using incomplete current week | Controlled; weekly bars use completed week only with last available Friday close |
| 3 | Moving-average and ATR windows using future bars | No future bars required; indicators are trailing-window calculations |
| 4 | Liquidity screen using unavailable future volume | Uses trailing 20-day average dollar volume, evaluated at close |
| 5 | Survivorship or universe reconstitution bias | Open item; the supplied 20-symbol basket appears static over the test window |
The backtest produced a positive total return of 31.85% with moderate risk-adjusted performance: Sharpe 0.79, Sortino 1.03, Calmar 0.74, and max drawdown of -10.98%. Profit factor was 1.46 despite a 34.05% win rate, consistent with a trend-following profile where average winners are larger than average losers. The 834 trades suggest the filters are active rather than buy-and-hold, so robustness to transaction costs and universe construction is material.
Recomputed here from the run's stored daily returns, because every annualized figure in the table above is derived from the LENGTH of that array (years = n / 252). Only total return and max drawdown do not depend on the row count, so when the recomputed and stored values differ by a common factor, those two are the numbers to trust.
| Check | From the run's own returns | Note |
|---|---|---|
| Daily-return rows | 897 | 0.99x the 905 trading days in 2023-01-01..2026-08-05 |
| Distinct dates | 897 | one row per date |
| Date span | 2023-01-03 .. 2026-07-31 | |
| Sum of daily returns | 31.85% | matches the reported total return |
| Sharpe from these rows | 0.79 | stored 0.79 |
| Volatility from these rows | 11.39% | stored 11.39% |
| Max drawdown from these rows | -10.98% | stored -10.98% |
| CAGR from these rows | 8.08% | stored 8.08% |
| Metric | Value |
|---|---|
| Total Return | 31.85% |
| Sharpe | 0.79 |
| Sortino | 1.03 |
| Calmar | 0.74 |
| Max Drawdown | -10.98% |
| Volatility | 11.39% |
| Win Rate | 34.05% |
| Profit Factor | 1.46 |
| Total Trades | 834 |
| Symbols | 20 (AAPL, ACON, AMZN, BETR, BRK-A, BRK-B, GOODO, GOOG, GOOGL, HOLO, +10 more) |
Backtests are historical simulations for research purposes only. They are not investment advice and do not guarantee future performance.