Tickfloor

Does the 9/21 EMA crossover work? We tested it on thousands of trades

It did not pass. On hourly crypto the plain cross made 15.0% a year before costs and -51.3% after. On daily US stocks it made 9.1% a year against 18.0% for the stocks it traded. The filtered version beat every random copy but lost to the basket in both halves of the test.

What people say

The 9/21 EMA cross is one of the first strategies new traders meet: two moving averages, buy when the fast one crosses above the slow one, sell when it crosses back. This autumn a run of videos tested it "on 100 trades" and reported real results.

Trade Hunter's two 9-21 EMA videos passed 25,000 and 21,000 views in August and September 2026. Moving averages came up in 101 posts on the trading subreddits in the same five weeks, including an r/Daytrading thread asking whether RSI, MACD and EMAs are outdated.

What we tested

A hundred trades is a small sample: a rule with no edge at all lands well above or below break-even over 100 trades quite often. We ran the cross over 21,714 hourly trades on crypto, plus the filtered version and a daily version on US stocks. The rules and pass bar were written down before running.

Results

VersionMarket (assets)TradesRule, a year (after costs)Benchmark, a yearAhead or behind, a yearSame, before costsRandom copies beatenpq (all tests)
9/21 EMA cross on hourly crypto, long and shortcrypto (8)21,714-51.3%84.7%-136.0 pts-69.7 pts20%1.001.00
Same cross, long only, above the 200 EMA (earlier run)crypto (8)9,91121.8%84.7%-62.9 pts-3.8 pts100%1.001.00
9/21 EMA cross on daily US large caps, long onlyUS stocks (40)1,8629.1%18.0%-8.9 pts-8.3 pts4%1.001.00
  • 9/21 EMA cross on hourly crypto, long and short
    Market (assets)
    crypto (8)
    Trades
    21,714
    Rule, a year (after costs)
    -51.3%
    Benchmark, a year
    84.7%
    Ahead or behind, a year
    -136.0 pts
    Same, before costs
    -69.7 pts
    Random copies beaten
    20%
    p
    1.00
    q (all tests)
    1.00
  • Same cross, long only, above the 200 EMA (earlier run)
    Market (assets)
    crypto (8)
    Trades
    9,911
    Rule, a year (after costs)
    21.8%
    Benchmark, a year
    84.7%
    Ahead or behind, a year
    -62.9 pts
    Same, before costs
    -3.8 pts
    Random copies beaten
    100%
    p
    1.00
    q (all tests)
    1.00
  • 9/21 EMA cross on daily US large caps, long only
    Market (assets)
    US stocks (40)
    Trades
    1,862
    Rule, a year (after costs)
    9.1%
    Benchmark, a year
    18.0%
    Ahead or behind, a year
    -8.9 pts
    Same, before costs
    -8.3 pts
    Random copies beaten
    4%
    p
    1.00
    q (all tests)
    1.00

One thing to know before reading the numbers. The benchmark is always fully invested, and from 2017 to early 2025 crypto rose a lot, so any rule that spends much of its time in cash trails it by a wide margin almost automatically. That is why we also compare each rule with 200 copies of itself: the same number of trades, the same holding times and the same costs, moved to random dates. Those copies are in the market exactly as much as the rule is, so they answer the fairer question: did the rule pick better moments than chance? The always-in version is never in cash, so for it the benchmark gap is pure timing and costs.

9/21 EMA crossover: growth of $1 against the benchmark1c10c$1$10$10020182019202020212022202320242025
Solid: 9/21 EMA cross on hourly crypto, long and short, ends at $0.004. Dashed: equal-weight benchmark of the same assets, ends at $104. Growth of $1 after costs, log scale.
9/21 EMA crossover: result against 200 random-date copies-150-140-130-120-110-100-90This rule -136 pts
Grey bars: 200 copies of the rule with the same trades moved to random dates (same lengths, same costs). Axis: percentage points a year ahead of (+) or behind (-) the benchmark. The rule beat 39 of 200.

The plain cross beat 39 of 200 random copies. The filtered version (not charted) beat 200 of 200, but it still trailed the basket in both halves of the test window.

What costs do to it

Crypto pays 0.10% a side plus a measured slippage for each coin; US stocks and ETFs pay 0.05% a side. The cost is charged every time the position changes, including a flip from long to short. The always-in cross flips between long and short 21,714 times in seven and a half years. Before costs it made 15.0% a year; after costs -51.3%. The filtered version trades less and kept more: 80.9% before costs, 21.8% after, against 84.7% for the basket.

Why it did not hold up

A moving average cross is a late signal by design. By the time the 9 crosses the 21, part of the move is over, and in a choppy market the cross flips back and forth and pays costs each time.

On daily US stocks the cross cut the worst drop from 32.2% to 13.8%, because it was in cash for part of every big fall. It also missed a lot of the gains, 9.1% a year against 18.0%. That is a smaller, smoother ride, not a better one, and its trades beat only 8 of 200 random copies.

The filtered hourly version is the most interesting result on this page. It kept far more than the plain cross and beat all 200 random copies. It still trailed the basket by a wide margin in both halves of the window, so it did not pass, and on its own it is not evidence of an edge.

What a beginner should take away

Try it yourself

This one you can run exactly in the Backtest Lab on daily bars: on QQQ, set the entry to ema(9) crosses above ema(21) and the exit to ema(9) crosses below ema(21). The Lab compares it with holding QQQ and with 1,000 random entries.

The Lab tests one rule on one stock, fills at the next open and compares against holding that stock after costs, so its number will not match the basket results above.

A pass opens every course lesson, the full research tabs and more Lab runs on all 50 Lab stocks. It does not include trade signals or a system that wins.

Receipt: data, costs, files
Engine
Tickfloor research harness (research/hunt2), the one behind the published strategy registry
Pre-registration
docs/research/trending-1005/prereg.md, committed before any new run
Window
2017-08-17 to 2025-03-14 for the best-faith version; data stops before 2025-03-15 (later data is held back)
Cells
tr5-ema921-1h-both, h3-hourly-ema-9-21-cross (earlier run, reused), tr5-ema921-daily-stocks
Multiple testing
q is Benjamini-Hochberg over all 719 tests in the published family, these included
Result files
docs/research/trending-1005/results.json and charts.json (Tickfloor's private repo)
Limits and caveats

Limits

The videos trade the cross on intraday stock and futures charts with discretion. We tested a mechanical version on hourly crypto and daily US stocks.

Shorts pay no borrowing or funding cost here.

The 40 stocks are today's large companies, which flatters any long rule a little (survivorship bias).

General information only. It doesn't consider your objectives, finances or needs. Tickfloor holds no financial services licence and never places trades.

Short answers (FAQ)

Does the 9/21 EMA crossover work?

Not in our tests. None of the three versions passed the bar we set in advance, after costs.

Is 100 trades enough to test a strategy?

Rarely. With 100 trades, a rule with no edge can easily show a profit by chance. We used thousands and compared with random entries.

Is the 9/21 EMA better on stocks or crypto?

Neither passed. On daily US stocks it lowered the worst drop and also lowered the return.

Is this advice?

No. It reports what happened to a set of rules in the past. General information only.

How we set the rules, costs and pass bar before running anything: the Tickfloor testing standard. The wider record is on the evidence page.