What this is
"Map the move with Fibonacci and Elliott Wave, then confirm with MACD and RSI, and your win rate goes up." You have seen this claim.
This is the record of testing it exhaustively against real price data — 198,000 tests, published in full.
Three conclusions up front.
- All 15 combinations lost. After transaction costs, the profit factor (gross profit ÷ gross loss) ranged 0.85–0.87. Every one below 1.0.
- Adding indicators did not help. Fibonacci alone: PF 0.853. All four stacked: PF 0.860. That is noise.
- An 80% win rate is easy to manufacture — and it is not the indicators. With a small take-profit and a wide stop, even completely random entries win 66.3% of the time.
How the test was built
- Instruments: 21 FX pairs / 3 metals / 6 stock index CFDs / 3 energy / 2 crypto / 3 US stock CFDs — 38 in total
- FX pairs: AUDCHF, AUDJPY, AUDNZD, AUDUSD, CADJPY, CHFJPY, EURAUD, EURCHF, EURGBP, EURJPY, EURNZD, EURUSD, GBPAUD, GBPCHF, GBPJPY, GBPUSD, NZDJPY, NZDUSD, USDCAD, USDCHF, USDJPY
- metals: XAGUSD, XAUUSD, XPTUSD
- stock index CFDs: DE40, JP225, UK100, US30, US500, USTEC
- energy: NGAS, UKOIL, USOIL
- crypto: BTCUSD, ETHUSD
- US stock CFDs: AAPL, NVDA, TSLA
- Timeframes: 1-hour, 4-hour, daily
- Data: two brokers (Exness / XM) tested separately. A result that appears on only one is not accepted
- Combinations: every on/off pattern of the four indicators = 15. Each swept across parameters and exit settings (1,100 configurations per instrument-timeframe)
- Total tests: 198,000 (180 units × 1,100 configurations)
Not looking into the future (the part that matters most)
Fibonacci levels and Elliott wave counts both need a confirmed swing high or low. But you only know a bar was the high after price has turned and fallen far enough away from it.
Ignore that and a backtest lies effortlessly, because it trades at points that were only identifiable in hindsight. Most published Fibonacci and Elliott backtests get this wrong.
So every pivot here is stamped with the bar on which it was confirmed, and a signal can only fire on a later bar. Entry is always the next bar's open, and when a bar could have hit both target and stop, we record it as the stop — always resolving against ourselves.
Costs
A realistic round-trip spread is deducted from every single trade. As shown below, that assumption turned out to be too generous.
Pass criteria, fixed before running
Criteria invented after seeing results can prove anything. These five were fixed up front and never moved.
| Gate | What it checks | Configs passing |
|---|---|---|
| G1 | enough trades, profitable after costs, PF ≥ 1.15 | 399 / 400 |
| G2 | at least 60% of years profitable | 392 / 400 |
| G3 | holds on both brokers’ data | 246 / 400 |
| G4 | multiple-testing correction (discount for being the best of 200k tries) | 0 / 400 |
| G5 | still profitable at 2× costs | 400 / 400 |
Result 1: all 15 combinations
| Combination | Indicators | Trades | Win rate | PF | Per trade |
|---|---|---|---|---|---|
| MACD | 1 | 2,617,618 | 45.6% | 0.873 | -1.86 pips |
| RSI | 1 | 3,600,761 | 46.8% | 0.872 | -1.86 pips |
| Elliott Wave | 1 | 1,598,853 | 45.3% | 0.860 | -2.09 pips |
| Fibonacci | 1 | 8,241,965 | 46.1% | 0.853 | -2.20 pips |
| MACD + RSI | 2 | 4,194,970 | 45.6% | 0.873 | -1.84 pips |
| Fibonacci + MACD | 2 | 6,533,189 | 45.6% | 0.868 | -1.97 pips |
| Elliott Wave + MACD | 2 | 1,832,631 | 45.4% | 0.867 | -1.97 pips |
| Elliott Wave + RSI | 2 | 1,555,506 | 45.3% | 0.861 | -2.07 pips |
| Fibonacci + RSI | 2 | 8,466,359 | 45.5% | 0.857 | -2.14 pips |
| Fibonacci + Elliott Wave | 2 | 2,015,953 | 45.2% | 0.855 | -2.17 pips |
| Elliott Wave + MACD + RSI | 3 | 1,779,078 | 45.4% | 0.868 | -1.96 pips |
| Fibonacci + MACD + RSI | 3 | 5,956,718 | 45.5% | 0.866 | -1.97 pips |
| Fibonacci + Elliott Wave + MACD | 3 | 2,210,087 | 45.3% | 0.860 | -2.05 pips |
| Fibonacci + Elliott Wave + RSI | 3 | 1,957,890 | 45.2% | 0.856 | -2.15 pips |
| Fibonacci + Elliott Wave + MACD + RSI | 4 | 2,154,637 | 45.3% | 0.860 | -2.06 pips |
How to read it: PF above 1.0 means profitable. All 15 rows are below.
Now look at the "per trade" column. Every combination lands between -1.8 and -2.2 pips — which is roughly the spread on these instruments. In other words the expectancy before costs is approximately zero. The indicators are neither right nor wrong; the strategies simply pay the spread.
Stacking indicators raises the share of configurations that show a profit, but that is not an edge. Tighter conditions mean fewer trades and wider dispersion. PF does not move — which is the tell.
Result 2: why "it worked in the backtest" happens
This is the core of the study.
Run 198,000 tests and the best one will look spectacular. The problem is that choosing the spectacular one is itself an untested act.
So: pick the winner using only the first 70% of the data, then measure that winner on the last 30% , which was never used for selection.
| Selection rule (first half) | First-half P/L | First-half win | Second-half P/L | Second-half win | Units profitable in 2nd half |
|---|---|---|---|---|---|
| highest total profit | +301,367 pips | 37.4% | -37,784 pips | 32.6% | 31% |
| highest win rate | +75,637 pips | 75.5% | -11,099 pips | 65.8% | 39% |
| highest PF | +107,342 pips | 60.6% | -4,475 pips | 48.2% | 38% |
All three selection rules flip from strongly positive to negative.
Look closely at the middle row. Select on win rate and the win rate largely survives — 75.5% in the first half, 65.8% in the second. And yet the P/L is -11,099 pips. The win rate persists; the money does not.
Only 31%–39% of instruments stayed profitable in the second half. A coin flip would give 50%, so selecting on past performance was worse than useless here.
Result 3: what an "80% win rate" actually is
The table below uses no indicators at all. Entries are placed completely at random. Only the exit settings change.
| Exit setting | Take profit / Stop (× ATR) | Win rate from RANDOM entries |
|---|---|---|
| high-win-rate | 0.8 / 1.6 | 66.3% |
| reward-tilted | 1.5 / 1.0 | 39.9% |
| trend-following | 2.5 / 1.0 | 28.9% |
Take profit at 0.8×ATR and stop at 1.6×ATR, and random entries win 66.3% of the time. Of course they do — small gains are easy to reach, large losses are hard to reach. The price is that one loss erases three or four wins.
Here are this study's highest win-rate configurations. Check the exit column: every single one is hiwin (TP 0.8 / SL 1.6).
| Instrument | TF | Combination | Exit | Trades | Win rate | 95% CI | PF | Total pips |
|---|---|---|---|---|---|---|---|---|
| USOIL | h1 | Fibonacci + RSI | hiwin | 84 | 82.1% | 72.6–88.9% | 1.72 | +254 |
| GBPJPY | h1 | Fibonacci + RSI | hiwin | 113 | 80.5% | 72.3–86.8% | 1.97 | +937 |
| EURAUD | h1 | Fibonacci + RSI | hiwin | 82 | 80.5% | 70.6–87.6% | 1.58 | +422 |
| AUDCHF | d1 | Fibonacci + MACD | hiwin | 106 | 80.2% | 71.6–86.7% | 1.82 | +2,365 |
| CADJPY | h1 | Fibonacci + MACD + RSI | hiwin | 94 | 79.8% | 70.6–86.7% | 1.85 | +471 |
| AUDCHF | d1 | Fibonacci + MACD + RSI | hiwin | 101 | 79.2% | 70.3–86.0% | 1.61 | +1,863 |
| GBPAUD | d1 | Fibonacci + MACD | hiwin | 96 | 79.2% | 70.0–86.1% | 1.55 | +4,082 |
| GBPAUD | d1 | Fibonacci + MACD + RSI | hiwin | 91 | 79.1% | 69.7–86.2% | 1.50 | +3,590 |
| AAPL | h4 | Fibonacci + Elliott Wave + RSI | hiwin | 81 | 79.0% | 68.9–86.5% | 1.44 | +306 |
| UKOIL | d1 | Fibonacci + MACD | hiwin | 104 | 78.8% | 70.0–85.6% | 2.12 | +1,692 |
| GBPCHF | h4 | Fibonacci + Elliott Wave + MACD | hiwin | 80 | 78.8% | 68.6–86.3% | 1.63 | +963 |
| GBPCHF | h4 | Fibonacci + Elliott Wave + MACD + RSI | hiwin | 80 | 78.8% | 68.6–86.3% | 1.63 | +963 |
| XPTUSD | h1 | Fibonacci + Elliott Wave + MACD | hiwin | 98 | 78.6% | 69.5–85.5% | 1.86 | +449 |
| NVDA | h4 | Elliott Wave + RSI | hiwin | 88 | 78.4% | 68.7–85.7% | 1.37 | +217 |
| XPTUSD | h1 | Fibonacci + Elliott Wave + MACD + RSI | hiwin | 96 | 78.1% | 68.9–85.2% | 1.84 | +439 |
| GBPCHF | h4 | Fibonacci + MACD + RSI | hiwin | 91 | 78.0% | 68.5–85.3% | 1.48 | +488 |
| GBPUSD | d1 | Elliott Wave + MACD + RSI | hiwin | 86 | 77.9% | 68.0–85.4% | 1.91 | +3,252 |
| UKOIL | d1 | Fibonacci + MACD | hiwin | 113 | 77.9% | 69.4–84.5% | 1.81 | +1,545 |
| USDJPY | h4 | Elliott Wave + MACD | hiwin | 90 | 77.8% | 68.2–85.1% | 1.70 | +972 |
| AUDJPY | h1 | Fibonacci + Elliott Wave + MACD + RSI | hiwin | 98 | 77.5% | 68.3–84.7% | 1.27 | +241 |
Of that 80% win rate, roughly 66.3% of it is exit geometry alone. The indicators add barely ten points — total pips stay small, and not one configuration in this table cleared the pass criteria (G2–G4 below).
Win rate is largely decided the moment you choose your target and stop distances. It is not a measure of whether a method works.
Result 4: the closest calls
In fairness, here are the configurations that survived longest. All still failed.
| Instrument | TF | Data | Combination | Trades | Win rate | PF | Total pips | Corrected significance |
|---|---|---|---|---|---|---|---|---|
| GBPUSD | h4 | xm | Fibonacci + RSI | 565 | 35.2% | 1.35 | +6,546 | 0.060 |
| EURAUD | h4 | xm | Fibonacci + MACD | 692 | 33.5% | 1.17 | +4,827 | 0.003 |
| GBPUSD | h4 | xm | Fibonacci + MACD | 667 | 32.1% | 1.20 | +4,509 | 0.005 |
| GBPUSD | h4 | xm | Fibonacci + RSI | 576 | 45.7% | 1.27 | +4,222 | 0.027 |
| GBPUSD | h4 | xm | Elliott Wave + MACD | 589 | 47.0% | 1.25 | +4,082 | 0.026 |
| GBPUSD | h4 | xm | Elliott Wave + MACD + RSI | 575 | 47.1% | 1.25 | +4,013 | 0.025 |
| XAUUSD | h4 | xm | Fibonacci + Elliott Wave | 568 | 34.1% | 1.44 | +3,676 | 0.044 |
| XAUUSD | h4 | xm | Fibonacci + Elliott Wave + RSI | 532 | 34.4% | 1.45 | +3,476 | 0.040 |
| USDJPY | h4 | xm | Fibonacci + MACD | 418 | 33.7% | 1.29 | +3,231 | 0.008 |
| USDJPY | h4 | xm | Fibonacci + MACD + RSI | 789 | 44.6% | 1.19 | +3,203 | 0.013 |
| XAUUSD | h4 | exness | Elliott Wave + MACD + RSI | 156 | 37.2% | 2.11 | +3,131 | 0.007 |
| XAUUSD | h4 | exness | Elliott Wave + MACD | 160 | 36.3% | 2.07 | +3,074 | 0.006 |
| XAUUSD | h4 | exness | Fibonacci + Elliott Wave + RSI | 204 | 41.7% | 1.69 | +2,947 | 0.007 |
| XAUUSD | h4 | exness | Fibonacci + MACD | 185 | 35.1% | 1.72 | +2,892 | 0.004 |
| XAUUSD | h4 | exness | Elliott Wave + RSI | 175 | 35.4% | 1.82 | +2,785 | 0.003 |
| XAUUSD | h4 | exness | Fibonacci + Elliott Wave | 223 | 39.9% | 1.58 | +2,783 | 0.004 |
| XAUUSD | h4 | exness | Elliott Wave + RSI | 380 | 35.0% | 1.33 | +2,772 | 0.002 |
| XAUUSD | h4 | exness | Elliott Wave | 182 | 34.1% | 1.76 | +2,671 | 0.002 |
| USDJPY | h4 | xm | Fibonacci + RSI | 603 | 31.5% | 1.16 | +2,614 | 0.001 |
| XAUUSD | h4 | xm | Elliott Wave + MACD + RSI | 823 | 33.0% | 1.19 | +2,552 | 0.003 |
They all died at the same gate: G4, the multiple-testing correction. That is the rightmost column — closer to 1.0 means "harder to explain as luck". Across all 198,000 tests the best value anywhere was 0.145, against a required 0.95.
The question that gate asks is: "if 200,000 people flip coins, should we call the longest heads streak a skilled flipper?" Discount for the number of attempts, and nothing was left.
"Maybe your implementation was just bad"
A fair challenge. Two answers.
The three Elliott rules really do bind
Elliott Wave has three rules no school disputes, and they are implemented here:
- Wave 2 never retraces beyond the start of wave 1
- Wave 3 is never the shortest of waves 1, 3 and 5
- Wave 4 never overlaps wave 1's price territory
Only 5.5–9.7% of detected swing sequences satisfy all three. Rule 3 does the most work, passing 10–18%. So this is not a detector that waved everything through — it filtered hard, and the survivors still lost.
"Count the waves properly and it works"
This is the central dispute, so let us be direct.
Discretionary wave counting cannot be tested at all. Show one chart to ten analysts and you get ten counts — and any of them can be revised afterwards ("that was actually wave b inside wave 4"). A claim that cannot be recorded as wrong when it is wrong will only ever accumulate a record of being right.
This study tested the mechanically definable part. In that range there was no edge. Whether the discretionary part holds one, this study cannot say — but whether to fund something unmeasurable is a separate decision.
Assumed costs vs. a real account
"Maybe the cost assumption was too harsh." It was the opposite.
| Pair | Cost assumed in this study | Measured (median) | Measured (p75) |
|---|---|---|---|
| USDJPY | 1.1 pips | 0.7 pips | 4.3 pips |
| EURUSD | 1.0 pips | 0.6 pips | 0.6 pips |
| EURJPY | 1.5 pips | 1.1 pips | 2.6 pips |
| GBPUSD | 1.3 pips | 0.7 pips | 0.7 pips |
Measured on our own verification account (Exness Technologies Ltd / Exness-MT5Trial5), as spread percentiles with stale ticks excluded. Sampled at 2026-07-31T20:27:12+00:00.
This study assumed costs that favour the strategies. On a real account the results above get worse, not better.
What you can actually take away
- Do not judge a method by win rate. Win rate is manufacturable from target and stop distances. Look at profit factor and per-trade expectancy. Any pitch that leads with win rate but omits the stop distance deserves suspicion on that basis alone.
- "It backtested well" carries zero information on its own. Without knowing how many variants were tried, the number cannot be interpreted. Best-of-200,000 and only-one-tried can print the same figure and mean opposite things.
- Ask for a split-period result. If nobody shows a rule fixed on early data and then applied to later data, the number may be after-the-fact.
- Costs matter more than people expect. Gross expectancy here was near zero; essentially the entire loss was spread. The more you trade, the more broker choice weighs.
- Adding indicators does not fix it. "It fails because I need more confirmation" did not hold anywhere in this study.
The raw, pre-aggregation data
The tables above aggregate 198,000 tests. The pre-aggregation data — one row per configuration, for the 100,798 that produced trades — is also available.
What you get: trades, win rate, PF, max drawdown, per-year P/L and multiple-testing-corrected significance for every instrument × timeframe × combination × parameter set (CSV), plus the design notes for the harness (pivot confirmation, the three Elliott rules, exit simulation spec).
This is not a trade record. The conclusions, all 15 combination results, the pass criteria and the reason everything failed are published in full on this page. Nothing inconvenient is hidden behind the gate — the result here is a clean negative. The raw data is gated because it is the work that backs our testing.
It goes to readers who opened an account through this site (we only match your account number against our partner ledger; no email, no password).
Limitations, stated plainly
- Bar-level simulation. The path within a single bar is not reconstructed (when both target and stop were reachable in one bar, we always record the stop — the assumption against ourselves).
- Swap/rollover is not modelled. Longer-holding configurations would differ in practice.
- These Fibonacci and Elliott implementations are one operational definition. Two swing-detection sensitivities were tested (1.5× and 3× ATR); that is not the only defensible choice.
- Index and stock CFDs depend on exchange hours and gap heavily. They are not handled to the same precision as FX.
- This does not prove the method can never work. It shows that under pre-registered conditions, across 200,000 variants, no edge distinguishable from chance was found.
Disclaimer
This is not investment advice. All figures are measured in our own verification environment and do not guarantee future results. Margin trading can produce losses exceeding your deposit. Trade at your own discretion.
Related articles
Do Order Blocks, Fair Value Gaps and Liquidity Sweeps Actually Work? 995,550 Trades Tested
We ran the six setups usually presented with a "70–80% win rate" over 995,550 trades with measured spreads, targets fixed at 2–3× the stop. Here is the outcome — and the specific reason these backtests look good.
Measured broker spreads 2026-W31 — logged hourly from our own MT5 accounts
Not a copy of published spread tables: 1,915 hourly bid/ask samples taken on our own accounts (XM (real money)) over 2026-07-24 → 2026-07-31, broken down by pair and by hour of day.
Welcome to Northmark: Your Independent Forex Broker Guide
Discover how Northmark helps traders worldwide find regulated forex brokers — independent reviews, comparisons and bonus offers in 11 languages.
