# TR-RSI-ADX — Rules (own words, not a transcript copy)

- Source video: Trading Rush, "I Tested RSI + ADX Trading Strategy 100 Times" (YouTube
  watch URL `https://www.youtube.com/watch?v=uSkGE0ujyn4`).
- Official companion article (author-published text used as transcript):
  `https://tradingrush.net/i-tested-rsi-adx-trading-strategy-100-times-and-you-should/`
- Accessed: 2026-09-28. Local transcript: `transcript.txt` in this folder (gitignored,
  read-only, not quoted at length here). Its header notes YouTube captions were unavailable
  on 2026-09-28; the body is the author's official article text.
- Scope of this file: what the video was observed to say, what we freeze as assumptions, and
  what stays open. No claim of exact replication of the video's manual test.

## Video claim (as stated in the video, not our measurement)

- 100 manual backtest trades tracked in the author's own app, fixed 1.5:1 reward-to-risk on
  every trade; reported win rate approximately 36%, described as one of the worst on the
  channel, with 5 wins in a row and 13 losses in a row.
- Profit path described as: rising at the start (ADX filtering range-market false signals),
  then falling as trend-top/bottom entries failed; ends presented as losing overall.
- Context claims: the earlier separate RSI test (classic overbought/oversold use) had a
  profitable win rate, while ADX alone did not; mixing Bollinger Bands with RSI turned a ~55%
  setup into ~35%. Combined-signal quality here is rated below either indicator alone.
- TR score 16.5/50 (win rate 3.5/10, ease 6/10, reliability 3.5/10, consistency 0/10,
  trade quality 3.5/10); ranked second last, just above Bollinger Bands + RSI, alongside CCI.
- We report all of this as the video's claim. Our own measurement: vectorbtpro run on
  Dukascopy H1 Bid, see RESULTS.md. No exact replication of the video is claimed.

## Observed strategy rules (paraphrased)

1. Indicators: RSI plus ADX for trend strength, plus a 200-period exponential moving average
   as long-term trend filter and a 21-period exponential moving average as stop anchor.
2. Long entry: RSI crosses ABOVE 70, but only while price is above the 200 EMA and ADX is
   above 25 at the same time.
3. Short entry: RSI crosses BELOW 30, but only while price is below the 200 EMA and ADX is
   above 25 at the same time. In both directions ADX must be above 25, not below.
4. This is RSI-as-momentum, NOT classic RSI mean reversion. Do not substitute: the classic
   use buys below 30 / sells above 70; this setup does the opposite (buys strength above 70,
   sells weakness below 30) and relies on the EMA200 plus ADX for context.
5. Initial stop: beyond the 21 EMA — below it for longs, above it for shorts. The video
   rejects a pullback-based stop here because buying at the top of a trend would make that
   stop too wide.
6. Exit in the 100-trade test: fixed target at 1.5 times the entry-to-stop distance (1.5R)
   with the fixed stop from rule 5. No trailing or alternative exit is described for this test.
7. Author's own observations (not rules, but test-relevant): ADX filtered almost all
   range-market false signals; most RSI>70 crosses arrive near the top of a swing high (and
   RSI<30 crosses near trend bottoms), so entries buy tops and sell bottoms; slow trends give
   many false signals; the 13-loss streak followed the early winners.

## Explicit frozen assumptions for this test

| # | Point | Frozen default | Reason |
|---|-------|----------------|--------|
| A1 | RSI period / applied price / levels | 14 / close / 70 and 30 | Platform-standard RSI; video states 70/30 only |
| A2 | RSI cross definition | Strict cross on closed bars: long needs prior closed RSI ≤ 70 and signal closed RSI > 70; short needs prior ≥ 30 and signal < 30 | Literal reading of "crosses above/below" |
| A3 | ADX period | 14 | Widely used platform default; video gives no value |
| A4 | ADX threshold and timing | Strictly > 25.0 on the signal closed bar (bar 1); level only, rising not required | Literal reading of "above 25" |
| A5 | EMA200 definition | 200, exponential, applied to close | Standard trend-filter use; video states 200 EMA |
| A6 | EMA21 definition | 21, exponential, applied to close | Video states 21 EMA; close is the standard input |
| A7 | Price vs EMA200 comparison | Signal-bar close vs EMA200 value at the signal bar | Literal reading of "price above/below the 200 moving average" |
| A8 | EMA alignment depth | Signal bar only (1 bar) | Literal reading; stricter multi-bar check is a variant |
| A9 | Chart timeframe | H1 | Assignment scope (EURUSD H1, EURJPY H1); video states no timeframe |
| A10 | Bar decision timing | Closed bars only: signal confirmed on bar 1 close; fill at the next bar's open | Avoids intra-bar repaint; testable and reproducible |
| A11 | Stop placement | Exactly at the EMA21 value of the signal bar, no extra offset (offset input defaults to 0) | Literal reading of "below/above the 21 moving average" |
| A12 | Target | 1.5 × (entry − stop) for longs, mirrored for shorts, set at order time | Video's stated 1.5:1 ratio |
| A13 | Overlapping signals | One position per symbol at a time; new signals ignored while a position is open | Prevents compounding ambiguity; stacking/reversal are variants |
| A14 | Exit on opposite signal | No (positions exit only at SL/TP in the base run) | Video describes fixed-SL/TP exits only |
| A15 | Cooldown between entries | None (0 bars) | Video counted signals as they came; spacing is a variant |
| A16 | Session filter | None (24h) | Video states none |
| A17 | Lot sizing | Fixed 0.01 lots | Keeps trade counts/win-rate comparable without money-management effects |
| A18 | Costs | Fixed assumed costs (bid-only data): spread EURUSD 1.0 pip / EURJPY 1.2 pip (half-spread adverse per fill) plus $7/lot round trip ($0.07 at 0.01 lot); EURJPY commission converted at fixed USDJPY 140 | Assumptions, not measured costs |
| A19 | Period / split | Full Dukascopy H1 window from 2017 per symbol, predeclared IS/OOS split at 2024-01-01 00:00 UTC+2 (trades assigned by exit time) | W7-TEST requires an explicit IS/OOS boundary |

## Open points and variant plan (at most three single-dimension variants)

| # | Open point (video silent or ambiguous) | Base (above) | Variant (`test.py` id) |
|---|----------------------------------------|--------------|------------------------|
| V1 | ADX threshold ("above 25" = how far above?) | Strictly > 25.0 | `adx20`: > 20.0 — threshold sensitivity |
| V2 | ADX level vs rising (is a high but falling ADX enough?) | Level only (A4) | `adxrising`: require signal-bar ADX above prior-bar ADX |
| V3 | Cross vs level-hold (does RSI just need to be above 70 / below 30?) | Strict cross (A2) | `hold`: closed-bar RSI > 70 (long) / < 30 (short), no cross required |

No variant changes two dimensions at once; each variant reruns the full two-symbol battery so the
reported range reads "depending on open point X, the measured win rate lies between A and B".
Comparison is win rate only, against the video's approximate 36%. No exact replication
is claimed (manual 100-trade sample, unknown dates/spread).
No P&L, profit, or performance promise is made here or in any outward article material.

Reproduce with `py -3.11 test.py` (vectorbtpro). Outputs are in `results/`.
