Our own EMA cross, 18 runs: a real edge, and a thin one
A teardown of a strategy from our own library. Every number in the results table is the tool's saved output; the reading at the end is ours and is marked as such.
2026-09-08 · our own library entry, run as published
The claim. "EMA Cross Momentum" sits in this site's official library with the description "Fast EMA(9) crossing above slow EMA(21) rides short-term momentum; the reverse cross exits. Trend-following 101." Its published card shows AAPL on 1-hour bars over six months: 19 trades, +18.09% against +21.05% for holding, and the label it has carried since publication — Read with caution. Teardown #1 was someone else's strategy and #2 was a textbook rule; this one is ours, run exactly as published.
What we ran. The library entry's code, unchanged: long when EMA(9) crosses above EMA(21), flat when it crosses back below, 100% of equity, 3% stop-loss, 9% take-profit, no costs modelled (the cost panel re-runs the trades at 5–50 bps afterwards). Three axes: the published timeframe on eight large US names over the two years our feed provides for hourly bars; the same names on daily bars over 25 years; and the two largest crypto perpetuals on hourly bars over the ~7 months the server fetch returns. Anyone can reproduce the stock runs on the free tier from the library card.
Results — 18 runs.
| Run | Trades | Win rate | Max DD | Strategy return | Buy & hold | Verdict flag | Cost panel | Break-even cost |
|---|---|---|---|---|---|---|---|---|
| AAPL · 1h · 2024–2026 | 72 | 36.1% | 17.24% | +24.96% | +42.17% | UNDERPERFORMS_HOLD · Read with caution | Thin margin over costs | 15.5 bps |
| SPY · 1h · 2024–2026 | 71 | 33.8% | 13.67% | +18.68% | +39.28% | UNDERPERFORMS_HOLD · Read with caution | Thin margin over costs | 12.1 bps |
| QQQ · 1h · 2024–2026 | 74 | 35.1% | 13.91% | +23.15% | +51.06% | UNDERPERFORMS_HOLD · Read with caution | Thin margin over costs | 14.1 bps |
| NVDA · 1h · 2024–2026 | 69 | 42.0% | 17.33% | +55.34% | +111.19% | UNDERPERFORMS_HOLD · Read with caution | Survives realistic costs | 32.0 bps |
| MSFT · 1h · 2024–2026 | 65 | 29.2% | 19.89% | +7.25% | +23.59% | UNDERPERFORMS_HOLD · Read with caution | Dies at realistic costs | 5.4 bps |
| AMZN · 1h · 2024–2026 | 74 | 29.7% | 25.28% | −9.93% | +48.30% | UNDERPERFORMS_HOLD · Read with caution | Dies at realistic costs | — (loses at 0) |
| JPM · 1h · 2024–2026 | 72 | 37.5% | 11.07% | +21.73% | +65.93% | UNDERPERFORMS_HOLD · Read with caution | Thin margin over costs | 13.7 bps |
| XOM · 1h · 2024–2026 | 68 | 30.9% | 15.50% | +13.60% | +39.79% | UNDERPERFORMS_HOLD · Read with caution | Dies at realistic costs | 9.4 bps |
| AAPL · 1d · 2001–2026 | 122 | 41.0% | 20.33% | +737.05% | +105,363.87% | UNDERPERFORMS_HOLD · Read with caution | Survives realistic costs | 87.7 bps |
| SPY · 1d · 2001–2026 | 127 | 40.2% | 23.32% | +166.40% | +638.44% | UNDERPERFORMS_HOLD · Read with caution | Survives realistic costs | 38.7 bps |
| QQQ · 1d · 2001–2026 | 135 | 34.8% | 20.14% | +111.29% | +2,204.36% | UNDERPERFORMS_HOLD · Read with caution | Survives realistic costs | 27.8 bps |
| NVDA · 1d · 2001–2026 | 126 | 35.7% | 30.05% | +357.37% | +81,227.45% | UNDERPERFORMS_HOLD · Read with caution | Survives realistic costs | 60.5 bps |
| MSFT · 1d · 2001–2026 | 135 | 33.3% | 35.43% | +99.76% | +1,788.87% | UNDERPERFORMS_HOLD · Read with caution | Survives realistic costs | 25.6 bps |
| AMZN · 1d · 2001–2026 | 123 | 40.7% | 29.25% | +1,128.44% | +68,928.04% | UNDERPERFORMS_HOLD · Read with caution | Survives realistic costs | 102.7 bps |
| JPM · 1d · 2001–2026 | 137 | 38.0% | 33.53% | +147.04% | +917.42% | UNDERPERFORMS_HOLD · Read with caution | Survives realistic costs | 33.1 bps |
| XOM · 1d · 2001–2026 | 142 | 34.5% | 49.83% | −18.79% | +297.19% | UNDERPERFORMS_HOLD · HIGH_DRAWDOWN · Read with caution | Dies at realistic costs | — (loses at 0) |
| BTC/USDT · 1h · Feb–Sep 2026 | 110 | 32.7% | 13.70% | +9.01% | +17.56% | UNDERPERFORMS_HOLD · Read with caution | Dies at realistic costs | 3.9 bps |
| ETH/USDT · 1h · Feb–Sep 2026 | 115 | 31.3% | 18.27% | +8.15% | +28.29% | UNDERPERFORMS_HOLD · Read with caution | Dies at realistic costs | 3.4 bps |
All 18 carry the tool's UNDERPERFORMS_HOLD and NO_COSTS flags; XOM daily also carries HIGH_DRAWDOWN. None carries a sample-size flag — this is the first teardown where every run has enough trades for the ratios to mean something.
The tool's own words.
- AAPL 1h: “Underperforms buy & hold by 17.21% — it lost to doing nothing (hold: 42.17%).” · “Thin margin over costs — Profit holds up to 15.5 bps of round-trip cost.”
- MSFT 1h: “Dies at realistic costs — Profit holds up to 5.4 bps of round-trip cost. This verdict compares against a 10 bps round-trip — what you actually pay depends on the market and the instrument.”
- AMZN 1h: “Rebuilt from this run's own trades with commission stripped, it still compounds to a loss (−9.9%) — no fee level can make it profitable.”
- NVDA 1h: “Survives realistic costs — Profit holds up to 32.0 bps of round-trip cost.”
- Every page: “No trading costs modeled — real fills will be worse.”
Our reading (not the tool's).
- The label was right. Our card said "Read with caution" on a six-month sample; two years and 65–74 trades per name say the same thing with better data. Fifteen of eighteen runs are profitable before costs, so the rule is not noise — but seven of eighteen die at a 10 bps round trip and four more hold on by 12–15 bps. A strategy whose verdict flips inside the range of a normal retail commission is not an edge you can bank.
- Why it is thin. Win rates of 29–42% with a 3% stop and a 9% target mean the profit is made by a minority of trades that reach the target while the majority are stopped out. That works on paper only when nothing is skimmed off each trade; at 30–40 trades a year on hourly bars, a 10 bps round trip is a 3–4% annual drag on a strategy that nets 4–25% a year here.
- Daily bars survive costs and still lose the comparison. On 25 years of daily data the rule trades ~5 times a year, so even 25–100 bps round trips leave it profitable — and it still finishes far behind holding on every name, because a 3%/9% bracket on multi-year trends sells the winners early. XOM is the failure mode in full: −18.8% and a 49.8% drawdown.
- Crypto is the harshest test. On BTC and ETH the edge survives about 3.5–4 bps — less than a typical perpetual taker round trip. The library card runs this on crypto perpetuals by default; that is where the cost panel should be read first.
- What we did to our own catalog. Nothing. The entry keeps its label, its code and its numbers. The point of a library that carries "Read with caution" on most of its cards is that the caution is measured, not decorative.
Honest limits. Hourly stock history is capped at two years by our feed, crypto at 5,000 bars by the server fetch; the 25-year daily runs are one regime sequence; long-only; stops and targets fill at the close of the bar that crosses them; no slippage or taxes. Where a run ended in an open position the tool shows it separately and it is not in the return.
Receipts
18 share pages, open without an account (each shows the tested window, bar count, verdict and cost panel):
- AAPL 1h: https://stlab.app/v/4e58062a-2abe-466c-b84a-f0c21f84f9ca
- SPY 1h: https://stlab.app/v/4eed0b75-28f2-4717-a351-7e144184834d
- QQQ 1h: https://stlab.app/v/9aa5f238-ad24-4307-b161-375808cb3eaa
- NVDA 1h: https://stlab.app/v/f78d9854-bfc5-48ce-973a-f505e9bffca2
- MSFT 1h: https://stlab.app/v/34e475a2-a7ea-40e8-be84-69fed1a5e861
- AMZN 1h: https://stlab.app/v/283074cf-16ce-4764-bec8-0a225f51bb78
- JPM 1h: https://stlab.app/v/dca02b46-f406-4ca9-b62d-b100a703fd09
- XOM 1h: https://stlab.app/v/fe4bcf5e-3dbc-4868-9931-6f2f9992cbde
- AAPL 1d: https://stlab.app/v/5b210ded-5f5a-45aa-b077-a6c83481ca2a
- SPY 1d: https://stlab.app/v/0c361282-ae07-4855-b0bd-85c39d376c19
- QQQ 1d: https://stlab.app/v/9d7d399c-0094-47a0-a65d-b98ea9f8f62f
- NVDA 1d: https://stlab.app/v/ba5ca1ad-b6a0-41fc-b754-41e442a2175b
- MSFT 1d: https://stlab.app/v/49b6a33d-34d0-4b2b-8275-ba4851f7744d
- AMZN 1d: https://stlab.app/v/25ca6d39-887b-49b7-95f2-0e361a267312
- JPM 1d: https://stlab.app/v/dddb24ae-980e-41f4-bed5-7f411a4de864
- XOM 1d: https://stlab.app/v/289fa891-bdd2-4aae-9af3-510c2c4eb357
- BTC/USDT 1h: https://stlab.app/v/f1f300d8-a232-4256-bb49-31c8a02ba14d
- ETH/USDT 1h: https://stlab.app/v/c010f8a2-3c9f-40fb-a2fb-420781d7b1ac
The library entry itself: https://stlab.app/library/8065b644-fb13-46f4-9192-a4349c075a6c
Simulated results on historical data — research output, not financial advice. Past performance does not guarantee future results.