Markets › Futures · NQ futures, 5-minute
MACD + RSI Strategy Backtest: The 200 EMA Trend Filter on 6 Years of NQ
“The simplest day-trading strategy, with an 80% win rate.” A 200 EMA for the trend, a MACD crossover and RSI above 50 for the entry: one of the most taught indicator combinations on YouTube. We ran it on every NQ session from 2020 to 2026, with costs and against random days.
Buried · No proven edgeNot 80 per cent. Not quite enough, either.
Variants tried: 4 · Passed every gate: 0 · Best: 4 of 6 · Holdout opened: yes (already used)
Short answer: close, but not proven. A 200 EMA trend filter with a MACD cross and RSI above 50, traded mechanically on NQ 5-minute bars from 2020 to 2026, made +$65 a trade after costs in its best version and beat random days, but failed two of our six gates, made most of its profit in 2022 and won 46.3% of its trades, not 80%.
00The verdict in three lines
- Does the MACD + RSI strategy work? Closer than anything we have tested on NQ, but it did not pass. The best version (the 200 EMA on 15-minute bars, target 1.5R) made +$65 a trade after costs over 2,433 trades, was positive in all 7 years and beat random days in all 500 runs, yet failed two of our six gates.
- The 80% win rate: 46.3% (95% range 44.3% to 48.3%). The result came from the trades held to the close on trending days, not from frequent small wins.
- Where the profit came from: the 200 EMA filter (signals with the trend +$63 a trade, against it -$48) and one year, 2022, which brought 64% of the total. Buried, no proven edge.
01The strategy as it is taught
- Trend filter: a 200-period exponential moving average (200 EMA) on the 15-minute or 1-hour chart. Price above it: only buys. Below: only sells.
- Entry trigger, on the 5-minute chart: the MACD line crosses its signal line (a bullish cross for a buy) and, at the same time, the RSI(14) is above 50.
- Stop: just beyond the nearest swing low (swing high for a sell). Target: 1.5 or 2 times the risk.
Tutorials of this kind often promise win rates around 80% and call it the simplest strategy a beginner can learn. Unlike chart patterns or order blocks, every part of it is a formula, so it can be tested exactly as stated. This is not one presenter's version: it is the common template, with standard settings.
02How we made the rules mechanical
- Charts: continuous NQ bars including the overnight session, as most platforms show futures. Trades only in the regular session, from the 5-minute bar closing at 09:35 to the one closing at 15:30 New York.
- Trend: the close of the last completed 15-minute (or 1-hour) bar against its 200 EMA. No look-ahead.
- Signal: the MACD (12, 26, 9) line crosses its signal line at the close of a 5-minute bar, with RSI(14) above 50 for a buy (below 50 for a sell), in the direction of the trend.
- Trade: enter at the next minute's open; stop one tick beyond the most recent 5-minute swing (a bar with two higher lows on each side) from the last 4 hours that is below the signal close; target 1.5R or 2R; out at the session close otherwise. One position at a time, as many trades a day as the signals give, long and short.
These definitions were fixed and dated before any indicator was computed (mre_spec.md). Not tested: an ATR stop, “RSI leaving oversold” instead of above 50, and other settings.
03How we tested it
NQ (E-mini Nasdaq-100 futures), NinjaTrader 1-minute history with the overnight session, back-adjusted, trades from 3 February 2020 (after a month for the averages to settle) to 25 September 2026: 1,712 sessions. Costs: $15.76 a round trip per contract (commission plus one tick of slippage on each fill), as in all our futures tests, with 1.5 and 2.5 times that shown too. Periods: February 2020 to 2023, 2024 to March 2025, and a holdout from April 2025 already used by our earlier NQ tests. Because classic indicator combinations have been tried many times on this site, the first-period bar is t ≥ 2.5. Control: every trade moved to another day at the same minute, same direction and stop distance, 500 times. Engine check: the EMA, MACD and RSI against hand-worked values, hand-made days for every rule, and an independent re-implementation that matched every trade of all four versions; deliberate errors put into the code (RSI at or above 50, a look-ahead in the trend filter, a longer swing window) were each caught (mre_selftest_result.txt).
04Results: does the MACD + RSI strategy work?
| Variant | Version | Trades | Win rate (95% range) | Gross per trade | Net per trade | Net total, 1 contract | Profit factor | Verdict |
|---|---|---|---|---|---|---|---|---|
| MRE-15-1.5R | 200 EMA on 15-minute bars, target 1.5R | 2,433 | 46.3% (44% to 48%) | +$81 | +$65 | +$157,666 | 1.10 | Buried |
| MRE-15-2R | 200 EMA on 15-minute bars, target 2R | 2,307 | 43.4% (41% to 45%) | +$78 | +$62 | +$143,407 | 1.09 | Buried |
| MRE-60-1.5R | 200 EMA on 1-hour bars, target 1.5R | 2,239 | 46.1% (44% to 48%) | +$64 | +$49 | +$108,831 | 1.07 | Buried |
| MRE-60-2R | 200 EMA on 1-hour bars, target 2R | 2,120 | 43.3% (41% to 45%) | +$66 | +$50 | +$105,754 | 1.07 | Buried |
Cumulative net dollars per contract by month. * Holdout already used before this test.
All four versions ended positive after costs, with profit factors between 1.07 and 1.10: a thin edge per trade, about 0.045 R for the best version, over a large number of trades.
05The 80% win rate claim
| Variant | Hit the target | Stopped | Closed at the session close | Median risk | Cost per trade | Median minutes held | Trades a day |
|---|---|---|---|---|---|---|---|
| MRE-15-1.5R | 28.0% | 42.7% | 29.3% | 60.75 pts (+$1,215) | 0.016 R | 76 | 1.42 |
| MRE-15-2R | 18.5% | 45.3% | 36.2% | 61.25 pts (+$1,225) | 0.016 R | 91 | 1.35 |
| MRE-60-1.5R | 27.8% | 43.8% | 28.5% | 59.25 pts (+$1,185) | 0.016 R | 74 | 1.31 |
| MRE-60-2R | 18.7% | 46.3% | 35.0% | 59.50 pts (+$1,190) | 0.016 R | 89 | 1.24 |
The win rates were 43.3% to 46.3%, and the upper end of every 95% range is below 50%. With a 1.5R target, about 40% winners break even before costs, so 46% is enough for a small profit; 80% is not what this rule does on NQ. Close to a third of the trades were still open at the close, and those trend days carried much of the result.
06Indicator signal or random entry?
| Variant | Trades | Real net per trade | Random days, median | Random, 5th to 95th | Percentile (95 needed) |
|---|---|---|---|---|---|
| MRE-15-1.5R | 2,433 | +$65 | -$10 | -$55 to +$40 | 100.0 |
| MRE-15-2R | 2,307 | +$62 | -$5 | -$59 to +$48 | 98.6 |
| MRE-60-1.5R | 2,239 | +$49 | -$6 | -$71 to +$41 | 97.4 |
| MRE-60-2R | 2,120 | +$50 | -$1 | -$69 to +$49 | 95.6 |
The control places every trade on another day at the same minute, same direction and stop distance. All four versions passed this gate, the best one beating every random run. That is unusual for an indicator strategy on this site: the plain MACD crossover on ES sat at the 48.4th percentile.
07Does the 200 EMA filter help?
| Variant | MACD + RSI without the filter: trades | Net per trade | With the trend: trades | Net per trade | Against the trend: trades | Net per trade |
|---|---|---|---|---|---|---|
| MRE-15-1.5R | 3,132 | +$22 | 1,965 | +$63 | 1,167 | -$48 |
| MRE-15-2R | 2,947 | +$24 | 1,832 | +$66 | 1,115 | -$45 |
| MRE-60-1.5R | 3,132 | +$22 | 1,747 | +$60 | 1,385 | -$26 |
| MRE-60-2R | 2,947 | +$24 | 1,626 | +$64 | 1,321 | -$25 |
A descriptive check, with the same exits and one position at a time: the same MACD and RSI signals without the 200 EMA filter made +$22 a trade. Split by what the filter would have said, the signals in the direction of the trend made +$63 and those against it -$48. The filter did most of the work. Whether the MACD and RSI add anything beyond the trend itself is a question we did not test: it would need random entries in the direction of the 200 EMA, specified before running them.
08Are MACD and RSI too late? The lag question
| Variant | Swing to signal, median | Best move while open, median | Worst move while open, median | Never reached 1R in favour | Held to the close |
|---|---|---|---|---|---|
| MRE-15-1.5R | 20 min | 0.79 R | -0.83 R | 57.7% | 29.3% |
| MRE-15-2R | 20 min | 0.78 R | -0.89 R | 57.7% | 36.2% |
| MRE-60-1.5R | 20 min | 0.76 R | -0.86 R | 58.2% | 28.5% |
| MRE-60-2R | 20 min | 0.76 R | -0.91 R | 58.4% | 35.0% |
By the time the MACD crossed with RSI above 50, the swing used for the stop was a median 20 minutes old, and after the entry the typical trade moved less than 1R in its favour (57.7% never reached 1R). That fits the “lagging indicator” complaint: most entries came late in a small move. The result was still positive because a minority of trades caught a trending day and were held to the close.
09By period and by year
| Variant | Feb 2020 to 2023 (trades) | 2024 to Mar 2025 (trades) | Holdout* Apr 2025 to Sep 2026 (trades) | t, first period | PF, second period |
|---|---|---|---|---|---|
| MRE-15-1.5R | +$130,712 (1,448) | +$26,676 (443) | +$278 (542) | 2.30 | 1.10 |
| MRE-15-2R | +$144,996 (1,367) | +$11,694 (429) | -$13,283 (511) | 2.39 | 1.04 |
| MRE-60-1.5R | +$58,629 (1,343) | +$28,024 (412) | +$22,177 (484) | 1.08 | 1.11 |
| MRE-60-2R | +$69,706 (1,269) | +$20,841 (394) | +$15,208 (457) | 1.20 | 1.08 |
| Year | MRE-15-1.5R net (trades) | MRE-15-2R net (trades) | MRE-60-1.5R net (trades) | MRE-60-2R net (trades) |
|---|---|---|---|---|
| 2020 (from 3 Feb) | +$12,035 (332) | +$27,856 (321) | -$336 (317) | -$235 (303) |
| 2021 | +$10,650 (365) | +$13,079 (343) | -$10,201 (333) | -$480 (316) |
| 2022 | +$101,658 (364) | +$105,176 (341) | +$64,001 (337) | +$73,581 (315) |
| 2023 | +$6,368 (387) | -$1,115 (362) | +$5,164 (356) | -$3,160 (335) |
| 2024 | +$3,094 (350) | -$3,470 (342) | +$698 (328) | +$4,400 (316) |
| 2025 | +$13,939 (379) | -$6,166 (356) | +$27,880 (342) | +$10,582 (320) |
| 2026 (to 25 Sep) | +$9,920 (256) | +$8,046 (242) | +$21,623 (226) | +$21,067 (215) |
* The holdout months were already used by our earlier NQ tests.
2022, a year of long trends down and sharp rallies, brought 59% to 73% of each version's profit; without it the versions made +$18 to +$27 a trade. The best version was positive in every year, but in the most recent period it was flat (+$278), and the 2R version on 15-minute bars lost there. Longs made more than shorts (+$132,176 against +$25,490 for the best version) in a market that rose over these years.
10Costs
| Variant | Before costs | $15.76 (base) | x1.5 | x2.5 |
|---|---|---|---|---|
| MRE-15-1.5R | +$81 | +$65 | +$57 | +$41 |
| MRE-15-2R | +$78 | +$62 | +$54 | +$39 |
| MRE-60-1.5R | +$64 | +$49 | +$41 | +$25 |
| MRE-60-2R | +$66 | +$50 | +$42 | +$26 |
With a median stop of about 61 points, $15.76 is 0.016 R a trade; every version stays positive even at two and a half times our cost. Costs did not decide this test.
11MACD and RSI on EUR/USD, ES and NQ
Our Stochastic + RSI + MACD test on EUR/USD used the same MACD cross with RSI above 50 and a swing stop with a 1.5R target, plus a Stochastic arming rule instead of a trend filter, on 15-minute to 1-hour bars from 2004 to 2026: about 40% to 42% winners, all six versions lost after costs, none beat random days by enough. The plain MACD crossover on ES hourly bars was about zero before costs. On NQ, with a 200 EMA trend filter, the same kind of trigger ended positive and beat random days. The difference that stands out is the trend filter, in a market that trended strongly; this test alone cannot say whether the MACD and RSI matter.
12The gates
| Variant | Trades | 1. PF ≥ 1.2 in validation | 2. ≥ 50 trades in each period | 3. t ≥ 2.5 on development | 4. Above the 95th percentile of the moved-entry control | 5. Positive without the 10 best trades | 6. Holdout net positive (already used) |
|---|---|---|---|---|---|---|---|
| MRE-15-1.5R | 2,433 | fail | pass | fail | pass | pass | pass |
| MRE-15-2R | 2,307 | fail | pass | fail | pass | pass | fail |
| MRE-60-1.5R | 2,239 | fail | pass | fail | pass | pass | pass |
| MRE-60-2R | 2,120 | fail | pass | fail | pass | pass | pass |
| Variant | Cause | Gates failed | Verdict |
|---|---|---|---|
| MRE-15-1.5R | No proven edge | 1, 3 | Buried |
| MRE-15-2R | No proven edge | 1, 3, 6 | Buried |
| MRE-60-1.5R | No proven edge | 1, 3 | Buried |
| MRE-60-2R | No proven edge | 1, 3 | Buried |
The data-gap check removed 2, 2, 2, 2 trades; no verdict changed. No proven edge: positive and better than random days, but not strong or stable enough in the development and validation years to clear the bar we set before the run. What would change our verdict: a forward sample of new trades, after costs, that holds the result.
TWhat this shows, and what to take into your own tests
What the results show
- The MACD and RSI crossover with a 200 EMA trend filter, traded mechanically on NQ 5-minute bars from February 2020 to September 2026, ended positive after costs in all four versions; the best made +$65 a trade over 2,433 trades and beat the same trades on random days in every one of 500 runs.
- It still failed two of our six gates (a profit factor of 1.10 in 2024 to March 2025, where 1.2 is needed, and a development t of 2.30, where 2.5 is needed), and 64% of its profit came from 2022 alone.
- The win rate was 46.3%, not 80%. Most of the difference between winning and losing came from the 200 EMA filter: the same MACD and RSI signals taken against the trend lost $48 a trade.
What remains unknown
- Whether the result holds after 2026: our holdout months had already been used by earlier NQ tests, so only new data can tell. A forward test would be the next step.
- Whether the MACD and RSI add anything beyond the trend itself. We did not test random entries in the direction of the 200 EMA; that comparison would have to be specified before it is run.
- Other settings, other markets and other stop rules (an ATR stop, RSI leaving oversold). We tested the standard settings only.
Why it was buried
Our gates ask for more than a positive total: a profit factor of at least 1.2 in the validation years and a development t of at least 2.5, because indicator combinations have been tried many times on this site. No version cleared both; the best reached a profit factor of 1.11 and a t of 2.39. The rules were fixed before the run, so the verdict stands; it is the closest any of our NQ tests has come.
What you can apply to your own tests
- Ignore win-rate promises. At a 1.5R target a strategy needs about 40% winners to break even before costs; 80% at that target would be extraordinary.
- Find out which part of the rule does the work. Here the trend filter separated the winning signals from the losing ones far more than the indicator cross did.
- Check what one year is worth to your result. A strategy that made most of its money in one trending year needs more than one good year to prove itself.
A note on the numbers: drawdown figures are measured on closed trades unless a table says it includes open losses. Open losses inside a trade are not counted in a closed-trade drawdown, so real account risk is higher, especially for systems with no stop. Backtests are not live trading.
FAQCommon questions
Does the MACD + RSI strategy work?
In our backtest on NQ futures it was positive after costs in all four versions (the best +$65 a trade over 2,433 trades) and beat the same trades on random days, but it did not reach our development and validation bars, so we cannot call it a proven edge.
What is the win rate of the MACD and RSI strategy?
46.3% in our best version (95% range 44.3% to 48.3%), with a 1.5R target. The 80% often claimed in tutorials is far outside that range.
Does the 200 EMA filter help a MACD strategy?
In our test, yes, by a lot: the same MACD and RSI signals made +$63 a trade in the direction of the 200 EMA and -$48 against it. That was a descriptive check, not a separate test.
Are MACD and RSI lagging indicators?
Both are built from past prices, so they confirm a move after it has started. In our NQ test the typical trade moved less than 1R in its favour after the entry (57.7% never reached 1R); the profit came from a minority of trend days held to the close.
How was the MACD + RSI strategy tested?
On NQ 1-minute data with the overnight session, built into 5-, 15- and 60-minute bars, with standard settings fixed before any result, one contract and $15.76 a round trip, and rules written and dated before the data was run, costs included on every trade, results split into development, validation and holdout periods, a random-entry control as the benchmark, and every variant reported. Read the protocol.
13Check our arithmetic
mre_spec.md
mre_lib.js · mre_ref.js · mre_selftest.js · mre_run.js
control_audit_lib.js · em_lib.js · gh_lib.js · hourly_lib.js · ma_lib.js · rb_lib.js · rsi2_protocol.js
mre_selftest_result.txt · mre_results.txt · mre_summary.json
MRE-15-1.5R · MRE-15-2R · MRE-60-1.5R · MRE-60-2R
Code provenance: our own code, written from the template as commonly taught and the readings in the specification. We have no connection with any course or channel.
14Data notes
Source. NinjaTrader NQ 1-minute history, back-adjusted continuous contract, on the New York clock, overnight session included; the back-adjustment keeps the averages continuous across contract rolls. Known gaps in the file are listed in our data audit and never filled. Fills: entries at the next minute's open; stops and targets at their level or the minute's open if it gapped through; one tick of slippage per fill is in the cost.
15Corrections
None since publication.