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.

EUR/USD spot · 15-minute, 30-minute and 1-hour bars · Protocol v1.0 plus the 8 Oct 2026 rules

Buried · No proven edge

Forty per cent, every time. It needs more.

BornFrozen 14 Oct 2026 (sm_spec.md), before any indicator was computed
Died14 Oct 2026

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 stopVariantTradesWinners (95% range)Winners in a typical run of 100Fewest to most in any run of 100Runs of 100 with 56 or more winners
15-minute, stop at the swingA5,99740.2% (39% to 41%)4027 to 56under 0.1%
15-minute, stop capped at 0.15%B7,77540.3% (39% to 41%)4024 to 570.2%
30-minute, stop at the swingA2,90440.4% (39% to 42%)4025 to 53none
30-minute, stop capped at 0.15%B4,07740.4% (39% to 42%)4028 to 55none
1-hour, stop at the swingA1,39540.6% (38% to 43%)4229 to 54none
1-hour, stop capped at 0.15%B2,06841.5% (39% to 44%)4231 to 51none

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.

VariantVersionTradesNet after costsR per tradeGross per tradeCost per tradeProfit factorPipsVerdict
SM-M15-A15-minute, stop at the swing5,997-452 R-0.075 R+0.003 R0.078 R0.88-3,114Buried
SM-M15-B15-minute, stop capped at 0.15%7,775-611 R-0.079 R+0.006 R0.085 R0.88-5,672Buried
SM-M30-A30-minute, stop at the swing2,904-91 R-0.031 R+0.011 R0.042 R0.95-689Buried
SM-M30-B30-minute, stop capped at 0.15%4,077-182 R-0.045 R+0.023 R0.067 R0.93-3,173Buried
SM-H1-A1-hour, stop at the swing1,395-23 R-0.016 R+0.012 R0.029 R0.97-1,187Buried
SM-H1-B1-hour, stop capped at 0.15%2,068-35 R-0.017 R+0.041 R0.057 R0.97-572Buried
-400-2000200620102014201820222026validationholdout*SM-M15-ASM-M30-ASM-H1-ASM-M30-B

Cumulative net R by month for four of the variants. * Holdout already used before this test.

By period

VariantDevelopment 2004 to 2012 (trades)Validation 2013 to 2019 (trades)Holdout* 2020 to 2026 (trades)Development tValidation PF
SM-M15-A-155 R (2,317)-94 R (1,805)-203 R (1,875)-2.360.92
SM-M15-B-132 R (3,078)-153 R (2,359)-326 R (2,338)-1.780.90
SM-M30-A+13 R (1,090)-58 R (912)-47 R (902)0.320.90
SM-M30-B+3 R (1,559)-79 R (1,249)-105 R (1,269)0.040.90
SM-H1-A-25 R (548)-2 R (419)+4 R (428)-0.860.99
SM-H1-B-0 R (788)-26 R (638)-9 R (642)-0.010.94

05Why a near-zero edge becomes a loss

VariantMedian stop (pips)Cost per tradeMedian hours heldLongs: trades / netShorts: trades / net
SM-M15-A19.50.078 R3.42,931 / -224.2 R3,066 / -227.4 R
SM-M15-B16.60.085 R1.83,817 / -299.0 R3,958 / -312.0 R
SM-M30-A30.10.042 R6.71,412 / -1.2 R1,492 / -90.1 R
SM-M30-B17.40.067 R2.02,027 / -43.8 R2,050 / -137.9 R
SM-H1-A44.20.029 R18.5700 / +15.1 R695 / -37.8 R
SM-H1-B17.70.057 R2.51,017 / -43.3 R1,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.

VariantNet, no financingNet, 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.

VariantTradesReal average per tradeControl trades (mean)Control medianControl 5th to 95thPercentile (95 needed)
SM-M15-A5,997-0.075 R3,773-0.086 R-0.123 R to -0.053 R68.8
SM-M15-B7,775-0.079 R5,294-0.092 R-0.118 R to -0.064 R74.8
SM-M30-A2,904-0.031 R1,924-0.053 R-0.097 R to -0.006 R73.0
SM-M30-B4,077-0.045 R3,044-0.074 R-0.110 R to -0.033 R86.2
SM-H1-A1,395-0.016 R949-0.036 R-0.098 R to +0.032 R69.2
SM-H1-B2,068-0.017 R1,622-0.061 R-0.111 R to -0.012 R93.2

08The gates

VariantTrades1. PF ≥ 1.2 in validation2. ≥ 50 trades in each period3. t ≥ 2.5 on development4. Above the 95th percentile of the moved-entry control5. Positive without the 10 best trades6. Holdout net positive (already used)
SM-M15-A5,997failpassfailfailfailfail
SM-M15-B7,775failpassfailfailfailfail
SM-M30-A2,904failpassfailfailfailfail
SM-M30-B4,077failpassfailfailfailfail
SM-H1-A1,395failpassfailfailfailpass
SM-H1-B2,068failpassfailfailfailfail

09Verdict by variant

VariantCauseGates failedVerdict
SM-M15-ACosts1, 3, 4, 5, 6Buried
SM-M15-BCosts1, 3, 4, 5, 6Buried
SM-M30-ACosts1, 3, 4, 5, 6Buried
SM-M30-BCosts1, 3, 4, 5, 6Buried
SM-H1-ACosts1, 3, 4, 5Buried
SM-H1-BCosts1, 3, 4, 5, 6Buried

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

Frozen specificationThe rules as read from the video, our fixed readings of its vague points, costs, periods, gates and control, dated before any indicator was computed.
sm_spec.md
CodeThe engine (its readings at the top), the independent re-implementation, the self-test and the run (node sm_run.js). Needs your own MT4 EUR/USD history.
sm_lib.js · sm_ref.js · sm_selftest.js · sm_run.js
Shared code it usesThe MT4 loader, bars, RSI, statistics and control helpers.
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
ResultsSelf-test result, the console output of the run and all numbers as one file.
sm_selftest_result.txt · sm_results.txt · sm_summary.json
Trade logs (CSV)Every trade of every variant: signal, entry and exit (New York time), stop, R, exit reason, gross and net R, pips and both financing scenarios.
SM-M15-A · SM-M15-B · SM-M30-A · SM-M30-B · SM-H1-A · SM-H1-B
Data recordFile hashes and the gap audit of the EUR/USD file.
data_manifest.md · data_holes_eur.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:

VariantTradesRemovedR per tradeVerdict
SM-M15-A5,99725-0.075 R → -0.078 RBuried → Buried
SM-M15-B7,77514-0.079 R → -0.079 RBuried → Buried
SM-M30-A2,90423-0.031 R → -0.029 RBuried → Buried
SM-M30-B4,0778-0.045 R → -0.046 RBuried → Buried
SM-H1-A1,39526-0.016 R → -0.023 RBuried → Buried
SM-H1-B2,0687-0.017 R → -0.017 RBuried → 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