Strategies we backtested RSI 30/70 strategy

Tested by BacktestingMax

RSI overbought/oversold strategy backtest

Does the RSI 30/70 strategy make money?

No, not on most markets. RSI is an indicator that scores how hard price has moved, from 0 to 100: under 30 is called oversold, and over 70 overbought. We backtested the standard rules: buy when RSI comes back above 30, and sell short when it comes back below 70. We ran 24 tests: 8 markets, each on 15-minute, 1-hour and 4-hour charts, from 2014 to 2025, after trading costs. 20 of the 24 lost money, including all 8 on 15-minute charts. To see if the strategy kept working in the newer years, we also checked 2022–2025 on its own. Only 2 tests made money in both 2014–2021 and 2022–2025: EUR/USD on 1-hour charts and the DAX on 4-hour charts. Of 4 common changes, a filter that skips strong trends did best in 2014–2021, but with it 14 of the 24 tests still lost money in 2022–2025.

24 backtests 2014–2025 Trading costs included Tested 12 October 2026

Where it worked 24 backtests
Made money
4
of 24 tests, using the standard rules
Made money in both periods
2
2014–2021 and again 2022–2025
Best backtest
+92%
DAX, 1-hour chart: account growth 2014–2025
With a filter that skips strong trends (ADX 25 or higher)
2
tests made money in both periods, compared with 2 using the standard rules

Made money in both periods

  • EUR/USD, 1-hour
  • DAX, 4-hour

Lost money on every market

  • 15-minute charts

The results

Results on every market

Each box shows one backtest of the RSI 30/70 strategy using the standard rules, from 2014 to 2025, after trading costs: the % result, and a small chart of the account balance. The solid line is the account balance and the dashed line is the starting balance. Green results made money; red results lost money. Under each result: whether it made money in both 2014–2021 and 2022–2025, or passed all four of our checks (see "How a test passes" further down).

Market 15-minute 1-hour 4-hour
EUR/USD −98% Lost money. Account down 90% by Aug 2018 +17% Made money in both periods +19% Made money overall, lost in one period
GBP/USD −96% Lost money. Account down 90% by Apr 2022 −18% Lost money −8% Lost money
USD/JPY −99% Lost money. Account down 90% by May 2017 −76% Lost money −9% Lost money
AUD/USD −99% Lost money. Account down 90% by Nov 2017 −61% Lost money −13% Lost money
Gold −98% Lost money. Account down 90% by Aug 2017 −84% Lost money −16% Lost money
S&P 500 −99% Lost money. Account down 90% by Aug 2017 −82% Lost money −13% Lost money
Nasdaq 100 −99% Lost money. Account down 90% by Dec 2015 −94% Lost money. Account down 90% by Jan 2021 −23% Lost money
DAX −96% Lost money. Account down 90% by Jun 2020 +92% Made money overall, lost in one period +39% Made money in both periods
All the numbers, test by test
Market Chart Trades Win rate Profit factor Result Max drawdown 2014–2021 2022–2025 Monte Carlo drawdown Trading costs
EUR/USD 15-minute 5,916 26.7% 0.90 −97.7% −97.9% −95.2% −53.1% −99.1% $6,691
EUR/USD 1-hour 1,718 27.9% 1.01 +16.9% −67.6% +6.5% +9.8% −68.1% $6,730
EUR/USD 4-hour 441 27.4% 1.06 +18.6% −27.4% −3.2% +22.5% −40.1% $556
GBP/USD 15-minute 5,953 27.6% 0.96 −95.9% −97.6% −87.9% −65.9% −98.4% $18,068
GBP/USD 1-hour 1,744 28% 0.98 −17.7% −50.0% −24.0% +8.3% −70.5% $4,124
GBP/USD 4-hour 469 26.7% 0.98 −7.6% −25.6% +14.0% −19.0% −45.5% $684
USD/JPY 15-minute 4,475 25.7% 0.83 −99.0% −99.3% −98.5% −33.9% −99.4% $5,052
USD/JPY 1-hour 1,781 25.9% 0.89 −76.1% −80.4% −62.6% −36.2% −86.4% $2,867
USD/JPY 4-hour 442 26.9% 0.97 −9.0% −33.8% +10.4% −17.6% −46.0% $569
AUD/USD 15-minute 4,145 24.6% 0.85 −99.4% −99.4% −98.9% −42.1% −99.6% $5,866
AUD/USD 1-hour 1,689 26.3% 0.91 −60.6% −83.0% −74.6% +54.9% −80.8% $3,456
AUD/USD 4-hour 403 25.1% 0.95 −13.2% −35.6% −28.7% +21.7% −45.9% $647
Gold 15-minute 2,728 26.4% 0.82 −97.9% −98.2% −98.0% +3.1% −98.6% $7,156
Gold 1-hour 1,599 26.3% 0.85 −83.9% −84.9% −69.6% −47.1% −89.1% $3,498
Gold 4-hour 465 26.2% 0.95 −16.2% −30.3% −0.3% −16.0% −45.5% $886
S&P 500 15-minute 5,724 26.8% 0.91 −98.6% −99.4% −98.1% −28.0% −99.4% $17,869
S&P 500 1-hour 1,864 25.6% 0.87 −81.9% −85.7% −73.8% −31.1% −89.9% $3,922
S&P 500 4-hour 486 23.7% 0.96 −12.8% −31.9% +9.8% −20.6% −50.9% $755
Nasdaq 100 15-minute 2,374 27% 0.79 −99.4% −99.4% −99.4% 0.0% −99.5% $10,202
Nasdaq 100 1-hour 1,290 22% 0.70 −93.5% −94.3% −92.1% −18.2% −95.0% $2,860
Nasdaq 100 4-hour 522 24.3% 0.94 −23.1% −42.9% −12.0% −12.6% −53.2% $1,063
DAX 15-minute 5,460 27.6% 0.90 −95.9% −96.8% −91.6% −50.9% −98.2% $4,960
DAX 1-hour 1,811 28.4% 1.04 +92.1% −52.6% +180.9% −31.6% −60.7% $4,202
DAX 4-hour 470 27% 1.10 +39.2% −18.2% +33.0% +4.7% −35.7% $403

Profit factor is the money won divided by the money lost. Above 1 means the test made money. Max drawdown is the biggest fall from the highest balance. 2014–2021 and 2022–2025 show the result in each period on its own. Monte Carlo drawdown: we shuffled the trades into a random order 1,000 times; in 95% of those runs, the worst drawdown was this number or less. Result is the change in the account, with the risk of each trade set to 1% of the account at that time.

The account balance

The best test and the middle test

Best test DAX, 1-hour chart +92.1% from 2014 to 2025
Middle test (median): half of the 24 did better, half did worse AUD/USD, 1-hour chart −60.6% from 2014 to 2025

What we found

What the 24 backtests show

  1. A buy closes when RSI reaches 70, and a sell closes when RSI reaches 30, unless price hits the stop-loss first. In every test, about 3 trades in 4 hit the stop-loss first, so only 22% to 28% of the trades were winners. The trades that reached 70 or 30 made 2.5 times the amount risked, on average. In 20 of the 24 tests, the winning trades did not make enough to pay for the losing ones.

  2. On 1-hour and 4-hour charts, the standard rules made money in 4 of 16 tests: EUR/USD and the DAX, on both charts. 2 of them made money in both 2014–2021 and 2022–2025: EUR/USD on 1-hour charts and the DAX on 4-hour charts. The best backtest was the DAX on 1-hour charts: the account grew 92% from 2014 to 2025, but that test lost 32% in 2022–2025.

  3. On 15-minute charts, the strategy lost money on all 8 markets: each account lost 96% to 99% of its starting balance. In 6 of the 8 tests, the account was already down 90% before the end of 2018.

  4. Taking profit at RSI 50 instead of 70 doubled the win rate: across all 24 tests, 51.8% of the trades won, instead of 26.5%. But the winning trades were much smaller: 0.8 times the amount risked on average, instead of 2.5 times. So the result hardly changed: the average trade lost about 0.06% of the account either way, and 4 of the 24 tests made money either way.

  5. Year by year, the standard rules lost money in almost every year. On 1-hour and 4-hour charts, adding up all 16 tests, the trades lost more than they made in 11 of the 12 years; only 2025 made money. The change that did best skips trades when ADX, an indicator of trend strength, shows a strong trend. With it, 8 of the 12 years made money, but its best years were 2016 and 2019, and from 2023 to 2025 its yearly results were close to zero.

Where to take profit

Take profit at RSI 70 or at RSI 50?

These numbers add up all 24 tests, from 2014 to 2025. The standard rules close a buy when RSI reaches 70 and a sell when RSI reaches 30. The other version closes buys and sells at RSI 50. Results are in % of the account, and every trade risked 1% of the account.

Win rate, taking profit at RSI 70 (the standard rules)
26.5%
The average winning trade made 2.5% of the account.
Win rate, taking profit at RSI 50
51.8%
The average winning trade made 0.8% of the account.
Average trade, winners and losers together
−0.06%
of the account, with either exit. 4 of the 24 tests made money either way.

The average losing trade lost about 1% of the account with either exit: 1.0% with the exit at RSI 70, and 0.9% with the exit at RSI 50.

Year by year

Did the strategy lose every year?

This table adds up all 16 tests on 1-hour and 4-hour charts, by the year each trade opened. Results are in R: 1R is the amount risked on one trade, 1% of the account at the time. A plus sign means the trades made more than they lost that year.

Year Standard rules With the ADX filter
2014 −103.2R +5.5R
2015 −65.3R +7.3R
2016 −18.1R +72.4R
2017 −66.7R +34.5R
2018 −32.6R −16.2R
2019 −4.5R +56.0R
2020 −157.3R −47.5R
2021 −30.3R −3.5R
2022 −93.8R +23.5R
2023 −46.4R −5.5R
2024 −33.1R +1.8R
2025 +47.3R +5.0R

The ADX filter takes only RSI signals that come while ADX is below 25. On these charts it skips about 4 trades in 5, so its yearly totals are smaller.

The strategy

What the RSI 30/70 strategy is

RSI (Relative Strength Index) is an indicator that scores how hard price has moved, from 0 to 100. It compares the size of the up moves with the size of the down moves over the last 14 candles. A common way to trade it: under 30 is oversold, so you buy; over 70 is overbought, so you sell short. The idea is that a market that moved a long way in a short time often moves back. The standard rules we tested wait for RSI to turn first: they buy when RSI comes back above 30, and sell short when RSI comes back below 70.

RSI
14 candles, levels 30 and 70 (the standard settings)
Stop-loss
2 × ATR(14). ATR is how far price moves in an average candle, over the last 14 candles.
Take-profit
No fixed take-profit. A buy closes when RSI reaches 70, and a sell closes when RSI reaches 30.
Risk per trade
1% of the account

The rules we tested

  1. Buy when RSI crosses back above 30: RSI was below 30 when the previous candle closed, and is 30 or higher when this candle closes.
  2. Sell short when RSI crosses back below 70: RSI was above 70 when the previous candle closed, and is 70 or lower when this candle closes.
  3. Close a buy when a candle closes with RSI at 70 or higher. Close a sell when a candle closes with RSI at 30 or lower. Entries and these exits happen at the opening price of the next candle.
  4. ATR is an indicator of how far price moves in an average candle, measured over the last 14 candles. Put the stop-loss 2 times the signal candle's ATR below that candle's closing price for a buy, or above it for a sell. The stop-loss does not move. If price reaches it, the trade closes at the stop price, or at a worse price if price gaps past it (opens beyond it).
  5. After a stop-loss, a new trade needs a new signal on a later candle. Only one trade is open at a time: a signal that comes while a trade is open is ignored.
  6. Size every trade so that, if the stop-loss is hit, the trade loses 1% of the account.

The method

How we tested it

The test

Markets
EUR/USD, GBP/USD, USD/JPY, AUD/USD, Gold, S&P 500, Nasdaq 100 and DAX
Charts
15-minute, 1-hour and 4-hour candles
Dates
January 2014 to December 2025
Account
$10,000, risking 1% of the account on each trade
Trading costs
Included. Every trade pays that market's normal trading cost: the spread, which is the gap between the buy price and the sell price.

How a test passes

We call a test passed only if it meets all four checks. A strategy can make money in one backtest and still fail one of these checks.

  • At least 100 trades. With fewer trades, a good result could be luck.
  • It made money from 2014 to 2021 and again from 2022 to 2025. This shows whether the strategy kept working in the newer years, not only in the older ones.
  • A profit factor (the money won divided by the money lost) of at least 1.2 from 2022 to 2025, after trading costs.
  • In 95% of 1,000 random shuffles of the trades, the account must not fall more than 30% from its highest point.

Improvements

Can the RSI 30/70 strategy be improved?

We tried four changes traders often make to the RSI 30/70 strategy, one at a time, on the same 24 tests. Two change the rules: when to enter, and when to take profit. Two add a filter, an extra rule that skips some trades: one trades only in the direction of the trend, and one skips trades when there is a strong trend. If you pick the best change and judge it on the same years, it will almost always look good. So we picked the best one in 2014–2021 only, by the number of tests that made money, and then checked it in 2022–2025.

Version Made money 2014–2021years used to pick the best version Made money 2022–2025years not used to pick it Made money in both periods Passed all four checks
Standard rules The rules under 'The rules we tested', with nothing changed. 6 of 24middle test −66.1% 7 of 24middle test −18.6% 2 0
Enter right away, without waiting for RSI to come back Buy as soon as RSI drops below 30, and sell short as soon as it rises above 70. Don't wait for RSI to come back. The exits and the stop-loss stay the same. 5 of 24middle test −38.1% 4 of 24middle test −11.9% 2 0
Take profit at RSI 50 Close a buy when RSI reaches 50 instead of 70, and a sell when RSI reaches 50 instead of 30. The entries and the stop-loss stay the same. 4 of 24middle test −61.2% 8 of 24middle test −18.1% 2 0
With a 200 EMA trend filter The 200 EMA is a moving average of the last 200 candles that gives more weight to recent candles. Only buy when the price is above the 200 EMA, and only sell short when it is below. 6 of 24middle test −9.1% 9 of 24middle test −4.5% 0 0
With a filter that skips strong trends (ADX 25 or higher)Best on 2014–2021 ADX is an indicator that measures how strong a trend is, from 0 to 100, using the last 14 candles. Traders usually say ADX of 25 or higher means a strong trend. Take a signal only when ADX is below 25. 14 of 24middle test +6.2% 10 of 24middle test −2.0% 2 0

In 2014–2021, the years we used to pick the best change, the ADX filter did best: 14 of 24 tests made money with it, compared with 6 with the standard rules. In 2022–2025, the years we kept for the check, the gap was smaller: 10 of 24 tests made money, compared with 7. In 2022–2025, the middle test (half of the 24 did better, half did worse) was −2.0% with the filter and −18.6% without it. Only 2 tests made money in both periods, the same as with the standard rules. One reason: the filter skips about 3 trades in 4, so 6 of the 8 tests on 4-hour charts had fewer than 100 trades. 3 of those 6 made money in both periods, but we don't count them, because a test needs at least 100 trades to judge. So in this backtest the ADX filter helped, but more than half of the tests still lost money with it in 2022–2025. In both periods, the middle test with the 200 EMA filter also lost less than with the standard rules, but mostly because that filter skipped 84% of the trades.

Questions

Questions traders ask

Does the RSI 30/70 strategy work?

Not on most markets. In our backtest from 2014 to 2025, with trading costs, the standard rules lost money in 20 of 24 tests: 8 markets, each on 15-minute, 1-hour and 4-hour charts. The standard rules use RSI over 14 candles: buy when RSI crosses back above 30, and sell short when it crosses back below 70. Only 2 tests made money in both 2014–2021 and 2022–2025: EUR/USD on 1-hour charts and the DAX on 4-hour charts.

What is the best timeframe for the RSI 30/70 strategy?

In our tests, 4-hour charts lost the least, but no timeframe made money on most markets. On 15-minute charts, all 8 accounts lost 96% to 99% of their starting balance. On 1-hour charts, 2 of 8 tests made money, and on 4-hour charts, 2 of 8 did too, but the 4-hour tests lost less: the middle result on 4-hour charts was a loss of 11% (half of the 8 tests did better, half did worse), and on 1-hour charts it was a loss of 68%. On daily charts, the strategy made only 53 to 75 trades per market from late 2014 to 2025. That is fewer than the 100 trades we need to judge a test, so daily charts are not in the results.

Should you buy as soon as RSI drops below 30?

No, there was no clear gain in our test. Buying as soon as RSI dropped below 30, and selling short as soon as it rose above 70, made money in 5 of 24 tests. Waiting for RSI to cross back made money in 4 of 24. In both versions, 2 tests made money in both 2014–2021 and 2022–2025. Entering right away gave fewer trades and a slightly lower win rate, 24.6% instead of 26.5%, but the winning trades were a little bigger.

Does RSI work better when the market is not trending?

Yes, a little, in this backtest. ADX is an indicator that measures how strong a trend is; traders usually say ADX of 25 or higher means a strong trend. When we took RSI signals only while ADX was below 25, 22 of the 24 tests had a better result from 2014 to 2025 than without the filter, and the average trade did better on all three charts, in 2014–2021 and in 2022–2025. But the filter skipped about 3 trades in 4, so 6 of the 8 tests on 4-hour charts had fewer than 100 trades, and in 2022–2025, 14 of the 24 tests still lost money. Trading only in the direction of the trend did not help on 15-minute and 1-hour charts: with a 200 EMA filter (only buy above a moving average of the last 200 candles, and only sell short below it), the average trade from 2014 to 2025 was worse than with no filter.

Keep exploring

Related strategies we tested

RSI RSI divergence strategy backtest Made money in 5 of 24 tests, 2 of them in both periods. Best: DAX, 1-hour, +49%
The strategy code we ran

This is the exact code from the BacktestingMax strategy engine. Paste it into the strategy editor in the app to run it on any market.

class RsiOverboughtOversold(Strategy):
    """The classic RSI 30/70 strategy, as most traders learn it, plus four changes traders make.
    Standard (all switches off): RSI over 14 candles (Wilder's formula). Buy when RSI crosses
    back above 30 (it closed below 30 on the candle before). Sell short when it crosses back
    below 70. Close a buy when RSI reaches 70 and a sell when RSI reaches 30; the exit fills at
    the next candle's open. A stop 2 x ATR(14) from the entry caps every trade, sized so the
    stop costs 1% of the account. One trade at a time: a signal while a trade is open is ignored.
    Every version starts trading once all its indicators (the 200 EMA too) have enough candles,
    so all versions trade the same dates.
    The changes, one at a time:
      early_entry  = 1   buy as soon as RSI crosses below 30, sell as soon as it crosses above 70
      exit_mid     = 1   close at RSI 50 instead of at the other level
      trend_filter = 1   only buy above the 200 EMA, only sell below it
      adx_filter   = 1   only trade when ADX(14) is below 25, which means no strong trend
    """
    params = {"rsi_period": Param(type=int, default=14, min=2, max=100),
              "oversold": Param(type=float, default=30.0, min=1.0, max=49.0),
              "overbought": Param(type=float, default=70.0, min=51.0, max=99.0),
              "atr_mult": Param(type=float, default=2.0, min=0.5, max=5.0),
              "early_entry": Param(type=int, default=0, min=0, max=1),
              "exit_mid": Param(type=int, default=0, min=0, max=1),
              "trend_filter": Param(type=int, default=0, min=0, max=1),
              "adx_filter": Param(type=int, default=0, min=0, max=1),
              "adx_max": Param(type=float, default=25.0, min=5.0, max=60.0)}
    lookback = 50
    def init(self, ctx):
        self.rsi = ctx.indicator("builtin:rsi", period=ctx.params.rsi_period)
        self.atr = ctx.atr(period=14)
        self.ema = ctx.ema(source=ctx.close, period=200)
        self.adx = ctx.indicator("builtin:adx", period=14)
        self.reverse_to = None  # "long" / "short": open this once the closing trade is gone
    def on_bar(self, ctx):
        p = ctx.params
        r0, r1 = self.rsi.rsi[0], self.rsi.rsi[1]
        a, ema, adx = self.atr.value, self.ema.value, self.adx.adx[0]
        if r0 is None or r1 is None or a is None or ema is None or adx is None:
            return
        low, high = p.oversold, p.overbought
        if p.early_entry == 1:
            buy_signal = r1 >= low and r0 < low     # RSI drops into oversold
            sell_signal = r1 <= high and r0 > high  # RSI rises into overbought
        else:
            buy_signal = r1 < low and r0 >= low     # RSI crosses back above 30
            sell_signal = r1 > high and r0 <= high  # RSI crosses back below 70
        exit_long = 50.0 if p.exit_mid == 1 else high
        exit_short = 50.0 if p.exit_mid == 1 else low
        pos = ctx.position
        if pos is not None:
            if pos.is_long and r0 >= exit_long:
                ctx.close_position()
                self.reverse_to = "short" if sell_signal else None
            elif pos.is_short and r0 <= exit_short:
                ctx.close_position()
                self.reverse_to = "long" if buy_signal else None
            return
        # A reversal (only possible with early_entry) waits one candle for the close to fill.
        # Drop it if RSI has already left the zone.
        pending, self.reverse_to = self.reverse_to, None
        if pending == "long" and r0 < low:
            buy_signal = True
        if pending == "short" and r0 > high:
            sell_signal = True
        entry = ctx.close[0]
        calm = p.adx_filter == 0 or adx < p.adx_max
        long_ok = p.trend_filter == 0 or entry > ema
        short_ok = p.trend_filter == 0 or entry < ema
        if ctx.gate("rsi_buy_signal", buy_signal) and ctx.gate("trend_long", long_ok) and ctx.gate("adx_long", calm):
            stop = entry - p.atr_mult * a
            ctx.buy(size=ctx.size_by_risk_pct(0.01, stop=stop, entry=entry), sl=stop, tag="rsi_long")
        elif ctx.gate("rsi_sell_signal", sell_signal) and ctx.gate("trend_short", short_ok) and ctx.gate("adx_short", calm):
            stop = entry + p.atr_mult * a
            ctx.sell(size=ctx.size_by_risk_pct(0.01, stop=stop, entry=entry), sl=stop, tag="rsi_short")

Your turn

Test the RSI 30/70 strategy yourself

Change the settings, the market or the stop-loss and see the result in seconds. Ask the BacktestingMax AI: Backtest the RSI 30/70 strategy on GBP/JPY, 1-hour chart, taking trades only when ADX is below 25.

Try it free in BacktestingMax

Free account. No credit card needed.

See every strategy we tested Browse strategies shared by traders

Backtest on historical data with trading costs, run by BacktestingMax. Past results do not guarantee future results, and nothing here is financial advice. Updated 12 October 2026.