Markets › FX · EUR/USD spot (15-minute to 1-hour bars)
Stochastic + RSI + MACD Strategy Backtest: EUR/USD, 15-Minute to 1-Hour Bars, 2004 to 2026
A popular three-indicator strategy, shown on video with a 56% win rate over 100 trades, tested on 22 years of EUR/USD with costs, a control and every variant reported.
Buried · No proven edgeForty per cent, every time. It needs more.
Variants tried: 6 · Passed every gate: 0 · Holdout opened: yes (already used)
Short answer: not on EUR/USD. We tested a popular Stochastic + RSI + MACD strategy, shown on YouTube with a 56% win rate over 100 trades, on 22 years of EUR/USD on 15-minute, 30-minute and 1-hour bars. It won about 40% of its trades, the break-even rate for its 1.5R target, and every variant lost after costs.How much costs took here, compared across all 54 of our tests →
00The verdict in three lines
- A YouTube video with over 800,000 views on 14 October 2026 (“Most Effective Stochastic + RSI + MACD Trading Strategy (Proven 100x)”) shows a strategy that combines the three indicators and reports a 56% win rate over 100 trades on 30-minute EUR/USD. We ran its rules, as written down before any number, on EUR/USD from 2004 to 2026 on 15-minute, 30-minute and 1-hour bars, with about one pip of costs a trade.
- About 40% winners, every time. Across 24,216 trades the win rate was 40.2% to 41.5%. On the video's own setup no stretch of 100 consecutive trades in 22 years reached 56 winners; the best had 53.
- All six Buried. With a 1.5R target, 40% winners is the break-even rate: the result before costs was close to zero, and after costs every variant lost. None beat the same trades placed on other days.
01What we tested
The video's rules, in our words, with its settings: Stochastic (14, 3, 3), RSI(14), MACD (12, 26, 9).
- Long: wait until both Stochastic lines are oversold (below 20). Then, with RSI above 50 (an uptrend, in the video's reading), buy when the MACD line crosses above its signal line, provided the Stochastic lines have not reached overbought (above 80) in the meantime. Short: the mirror image.
- Stop beyond the nearest swing low (swing high for shorts), target at 1.5 times the stop distance. One trade at a time; signals that come while a trade is open are missed, as the video suggests.
- Variant A follows these rules. Variant B adds the video's own improvement: a stop never more than 0.15% from the entry.
- Where the video leaves room for judgement, we fixed it in advance: a swing low is a bar lower than the two bars on each side (it is known two bars later); no swing in the last 200 bars, no trade; a MACD crossing with RSI on the wrong side of 50 is not a signal but keeps the setup alive; a signal uses up the setup.
- Six variants: 15-minute, 30-minute (the video's test) and 1-hour bars, each A and B, long and short. With six variants the development t-statistic bar is 2.5. Results in R, the stop distance at entry.
02Data and costs
EUR/USD spot, the 1-minute bid history of an IC Markets MetaTrader 4 demo server, January 2004 to 28 September 2026. Costs: about 1 pip per round trip (0.15 pip on every fill plus 0.7 pip commission), as in every EUR/USD test on the site. Periods: development 2004 to 2012, validation 2013 to 2019, holdout 2020 to 2026, already used by our earlier EUR/USD tests. Engine check: a self-test with hand-worked cases and an independent re-implementation that matched every trade of all six variants (sm_selftest_result.txt).
03The video's claim: 56 winners in 100 trades
The video backtests 100 trades. To see how unusual 56 winners in 100 trades is for these rules, we looked at every stretch of 100 consecutive trades over 22 years.
| Bars and stop | Variant | Trades | Winners (95% range) | Winners in a typical run of 100 | Fewest to most in any run of 100 | Runs of 100 with 56 or more winners |
|---|---|---|---|---|---|---|
| 15-minute, stop at the swing | A | 5,997 | 40.2% (39% to 41%) | 40 | 27 to 56 | under 0.1% |
| 15-minute, stop capped at 0.15% | B | 7,775 | 40.3% (39% to 41%) | 40 | 24 to 57 | 0.2% |
| 30-minute, stop at the swing | A | 2,904 | 40.4% (39% to 42%) | 40 | 25 to 53 | none |
| 30-minute, stop capped at 0.15% | B | 4,077 | 40.4% (39% to 42%) | 40 | 28 to 55 | none |
| 1-hour, stop at the swing | A | 1,395 | 40.6% (38% to 43%) | 42 | 29 to 54 | none |
| 1-hour, stop capped at 0.15% | B | 2,068 | 41.5% (39% to 44%) | 42 | 31 to 51 | none |
On 30-minute bars, the video's setup, no run of 100 trades reached 56 winners. A sample of 100 is small: around a true win rate of 40%, runs between about 30 and 50 winners are normal, which is what the table shows.
04Results
Net R is the sum of the trades' results after costs; pips add up the net result of every trade.
| Variant | Version | Trades | Net after costs | R per trade | Gross per trade | Cost per trade | Profit factor | Pips | Verdict |
|---|---|---|---|---|---|---|---|---|---|
| SM-M15-A | 15-minute, stop at the swing | 5,997 | -452 R | -0.075 R | +0.003 R | 0.078 R | 0.88 | -3,114 | Buried |
| SM-M15-B | 15-minute, stop capped at 0.15% | 7,775 | -611 R | -0.079 R | +0.006 R | 0.085 R | 0.88 | -5,672 | Buried |
| SM-M30-A | 30-minute, stop at the swing | 2,904 | -91 R | -0.031 R | +0.011 R | 0.042 R | 0.95 | -689 | Buried |
| SM-M30-B | 30-minute, stop capped at 0.15% | 4,077 | -182 R | -0.045 R | +0.023 R | 0.067 R | 0.93 | -3,173 | Buried |
| SM-H1-A | 1-hour, stop at the swing | 1,395 | -23 R | -0.016 R | +0.012 R | 0.029 R | 0.97 | -1,187 | Buried |
| SM-H1-B | 1-hour, stop capped at 0.15% | 2,068 | -35 R | -0.017 R | +0.041 R | 0.057 R | 0.97 | -572 | Buried |
Cumulative net R by month for four of the variants. * Holdout already used before this test.
By period
| Variant | Development 2004 to 2012 (trades) | Validation 2013 to 2019 (trades) | Holdout* 2020 to 2026 (trades) | Development t | Validation PF |
|---|---|---|---|---|---|
| SM-M15-A | -155 R (2,317) | -94 R (1,805) | -203 R (1,875) | -2.36 | 0.92 |
| SM-M15-B | -132 R (3,078) | -153 R (2,359) | -326 R (2,338) | -1.78 | 0.90 |
| SM-M30-A | +13 R (1,090) | -58 R (912) | -47 R (902) | 0.32 | 0.90 |
| SM-M30-B | +3 R (1,559) | -79 R (1,249) | -105 R (1,269) | 0.04 | 0.90 |
| SM-H1-A | -25 R (548) | -2 R (419) | +4 R (428) | -0.86 | 0.99 |
| SM-H1-B | -0 R (788) | -26 R (638) | -9 R (642) | -0.01 | 0.94 |
05Why a near-zero edge becomes a loss
| Variant | Median stop (pips) | Cost per trade | Median hours held | Longs: trades / net | Shorts: trades / net |
|---|---|---|---|---|---|
| SM-M15-A | 19.5 | 0.078 R | 3.4 | 2,931 / -224.2 R | 3,066 / -227.4 R |
| SM-M15-B | 16.6 | 0.085 R | 1.8 | 3,817 / -299.0 R | 3,958 / -312.0 R |
| SM-M30-A | 30.1 | 0.042 R | 6.7 | 1,412 / -1.2 R | 1,492 / -90.1 R |
| SM-M30-B | 17.4 | 0.067 R | 2.0 | 2,027 / -43.8 R | 2,050 / -137.9 R |
| SM-H1-A | 44.2 | 0.029 R | 18.5 | 700 / +15.1 R | 695 / -37.8 R |
| SM-H1-B | 17.7 | 0.057 R | 2.5 | 1,017 / -43.3 R | 1,051 / +8.5 R |
A winner here is a trade that reached its target, which happened about 40% of the time; every other trade hit its stop. That is the break-even rate for a 1.5R target, so the gross result is close to zero, and one pip of cost on a stop of 15 to 45 pips is enough to make every variant lose. The video's 0.15% cap made stops tighter, trades more frequent and costs heavier in R.
06Financing
Scenario A: 2% a year of the entry price for every calendar day held. Scenario B: today's IC Markets EUR/USD swap (long -7.99, short +1.31 points per lot per night, Wednesday counting three): not a historical rate. Trades last hours, so financing changes little; the verdict uses the baseline.
| Variant | Net, no financing | Net, scenario A (2% a year) | Net, scenario B (today's swap) |
|---|---|---|---|
| SM-M15-A | -451.6 R | -519.6 R | -481.4 R |
| SM-M15-B | -610.9 R | -676.0 R | -639.0 R |
| SM-M30-A | -91.3 R | -136.2 R | -114.0 R |
| SM-M30-B | -181.7 R | -218.0 R | -203.0 R |
| SM-H1-A | -22.7 R | -52.2 R | -38.3 R |
| SM-H1-B | -34.8 R | -55.6 R | -46.8 R |
07Is it the signal or chance?
The moved-entry control: every real entry moved by one random offset of whole days, at least 5% of the series, to the same time of day on another day, same direction, same stop distance and 1.5R target, same costs; 500 runs with fixed seeds. The bar is the 95th percentile of the average net R per trade.
| Variant | Trades | Real average per trade | Control trades (mean) | Control median | Control 5th to 95th | Percentile (95 needed) |
|---|---|---|---|---|---|---|
| SM-M15-A | 5,997 | -0.075 R | 3,773 | -0.086 R | -0.123 R to -0.053 R | 68.8 |
| SM-M15-B | 7,775 | -0.079 R | 5,294 | -0.092 R | -0.118 R to -0.064 R | 74.8 |
| SM-M30-A | 2,904 | -0.031 R | 1,924 | -0.053 R | -0.097 R to -0.006 R | 73.0 |
| SM-M30-B | 4,077 | -0.045 R | 3,044 | -0.074 R | -0.110 R to -0.033 R | 86.2 |
| SM-H1-A | 1,395 | -0.016 R | 949 | -0.036 R | -0.098 R to +0.032 R | 69.2 |
| SM-H1-B | 2,068 | -0.017 R | 1,622 | -0.061 R | -0.111 R to -0.012 R | 93.2 |
08The 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) |
|---|---|---|---|---|---|---|---|
| SM-M15-A | 5,997 | fail | pass | fail | fail | fail | fail |
| SM-M15-B | 7,775 | fail | pass | fail | fail | fail | fail |
| SM-M30-A | 2,904 | fail | pass | fail | fail | fail | fail |
| SM-M30-B | 4,077 | fail | pass | fail | fail | fail | fail |
| SM-H1-A | 1,395 | fail | pass | fail | fail | fail | pass |
| SM-H1-B | 2,068 | fail | pass | fail | fail | fail | fail |
09Verdict by variant
| Variant | Cause | Gates failed | Verdict |
|---|---|---|---|
| SM-M15-A | Costs | 1, 3, 4, 5, 6 | Buried |
| SM-M15-B | Costs | 1, 3, 4, 5, 6 | Buried |
| SM-M30-A | Costs | 1, 3, 4, 5, 6 | Buried |
| SM-M30-B | Costs | 1, 3, 4, 5, 6 | Buried |
| SM-H1-A | Costs | 1, 3, 4, 5 | Buried |
| SM-H1-B | Costs | 1, 3, 4, 5, 6 | Buried |
Costs: each variant was slightly positive before costs and negative after, and none beat the control. Not tested: other markets and settings, other readings of the video's judgement calls.
TWhat this shows, and what to take into your own tests
What the results show
- The win rate sat at about 40% in every variant (40.2% to 41.5%). With a target at 1.5 times the stop, 40% is the break-even point before costs, and that is about where the gross result ended.
- On the video's own setup (EUR/USD, 30-minute bars), no stretch of 100 consecutive trades in 22 years reached 56 winners; the best had 53, the typical one 40.
- About one pip of cost a trade turned a near-zero result into a loss in every variant; the video's 0.15% stop cap made trades smaller and costs heavier in R.
- None of the six beat the same trades placed on other days.
What remains unknown
- Other markets and settings; we tested the video's settings and its own market only.
- The video's exact trades: its chart rules leave room for judgement (which swing, when a setup expires), so our fixed reading may differ from its picks.
Why it failed
Three indicators that agree are still three views of the same recent prices. On EUR/USD the combination picked entries that were no better than chance: winners at the 1.5R target came about 40% of the time, the break-even rate, so the gross result was close to zero and the spread and commission decided the sign.
What you can apply to your own tests
- A hundred trades is a small sample: a 95% range around a 56% win rate on 100 trades runs from about 46% to 65%.
- Before you trust a win rate, work out the break-even rate for your target and stop: here 40%.
- Test a "proven" strategy on all the data you can get, not on a stretch someone picked.
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
What is the win rate of the Stochastic + RSI + MACD strategy?
About 40% in our test: 40.2% to 41.5% across six variants and 24,216 trades on EUR/USD from 2004 to 2026. On the 30-minute chart no run of 100 consecutive trades reached 56 winners; the best had 53.
Why does a 40% win rate lose money with a 1.5R target?
With a target at 1.5 times the stop, a 40% win rate breaks even before costs (0.4 x 1.5 = 0.6, the same as 0.6 losses of 1R). Any trading cost then turns the result negative.
How was the Stochastic + RSI + MACD strategy tested?
On EUR/USD spot 1-minute broker data from 2004 to 2026, built into 15-minute, 30-minute and 1-hour bars, with about 1 pip of costs a trade 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.
10Check our arithmetic
sm_spec.md
sm_lib.js · sm_ref.js · sm_selftest.js · sm_run.js
control_audit_lib.js · em_lib.js · fb_clock.js · fx_data.js · gh_lib.js · gx_lib.js · hourly_lib.js · ma_lib.js · rb_lib.js · rs_lib.js · rsi2_protocol.js
sm_selftest_result.txt · sm_results.txt · sm_summary.json
Code provenance: our own code, written from the standard indicator definitions and the rules as fixed in the specification. Nothing from the video's author is used or published.
11Data notes
Gaps. Removing the trades open across a suspect or unclear gap in the data changes no verdict:
| Variant | Trades | Removed | R per trade | Verdict |
|---|---|---|---|---|
| SM-M15-A | 5,997 | 25 | -0.075 R → -0.078 R | Buried → Buried |
| SM-M15-B | 7,775 | 14 | -0.079 R → -0.079 R | Buried → Buried |
| SM-M30-A | 2,904 | 23 | -0.031 R → -0.029 R | Buried → Buried |
| SM-M30-B | 4,077 | 8 | -0.045 R → -0.046 R | Buried → Buried |
| SM-H1-A | 1,395 | 26 | -0.016 R → -0.023 R | Buried → Buried |
| SM-H1-B | 2,068 | 7 | -0.017 R → -0.017 R | Buried → Buried |
Clock. The file's time labels are an hour early in many weeks of 2004 to 2014 (our clock audit). The bars here are continuous and cut on whole and half hours, so a shifted label moves whole bars without changing them, and nothing in the rules depends on the time of day.
Source. A broker's demo history, not an exchange record; costs are constant across years.
12Corrections
22 Oct 2026, navigation: added a link to the new guide comparing trading costs across all our tests. No result changed. 22 Oct 2026, navigation: added a link to the new guide comparing trend following and mean reversion across all our tests. No result changed.
+More tests and guides
- Rsi strategy backtest
- Macd crossover strategy backtest
- Forex strategy backtest
- Fibonacci retracement strategy backtest
- Trend following vs mean reversion: this test next to the others of its style
- Free prop firm challenge calculator
- What all the backtests found so far
- The backtesting protocol
- How to backtest a trading strategy without fooling yourself
- Backtesting glossary