Skip to main content

Documentation Index

Fetch the complete documentation index at: https://uncoded.ch/docs/llms.txt

Use this file to discover all available pages before exploring further.

RSI mean-reversion is the textbook starter recipe. Buy when RSI is oversold and price is below a trend filter. Sell signals delegated to your existing mode (typically BasicMode). Reliable in chop and ranging markets, with a trend filter to avoid catching falling knives.

Goal

Capture short-term mean-reversion bounces in BTCUSDT on a 15-minute timeframe, gated by a longer-period trend filter to avoid buying into sustained downtrends.

When to pick this recipe

Sideways or ranging markets

Mean-reversion thrives when price oscillates within a range. RSI captures the oscillation; the bounces are tradable.

You're running BasicMode and want gating

Run BasicMode continuously with canBuy: false by default; let this recipe flip canBuy: true only when conditions hold. Combines BasicMode’s clean execution with custom entry timing.

You want a tested starter

RSI mean-reversion is the most-documented strategy in technical analysis. Many operators have validated patterns that work.

Capital `$5,000+` paired with a mode

The recipe controls when the underlying mode buys. Capital sizing is determined by the mode, not the recipe.

When NOT to pick this recipe

  • Sustained sharp downtrends — RSI gets stuck below 30 for extended periods; the recipe fires repeatedly into a falling market. The trend filter helps but doesn’t eliminate this.
  • Vertical melt-up rallies — RSI rarely reaches oversold during strong uptrends; the recipe rarely fires.
  • First-week operators — let BasicMode run alone for at least a month before adding gating logic.
  • Pairs with extreme volatility — RSI thresholds calibrated for BTCUSDT may not transfer to high-volatility altcoins.

Prerequisites

1

BasicMode (or other mode) running on BTCUSDT

The recipe controls when the mode is allowed to buy; it doesn’t replace the mode. You need the mode running first.
2

SignalEditor and SignalsBot running

The recipe is a SignalEditor strategy that posts webhooks to the SignalsBot. Both must be running.
3

Capital allocated to the mode

$15,000–$25,000 for BasicMode, $3,000–$5,000 for LowMoney, etc.
4

Set the mode's canBuy default to false

Via the Dashboard’s Modes panel. The recipe will flip this on/off based on conditions.

Setup steps

1

Open the SignalEditor and create a new strategy

Click “New Strategy.” Name it rsi-mean-reversion-btcusdt-15m.
2

Add a Price node

Drop a Price node on the canvas. Set:
  • Symbol: BTCUSDT
  • Timeframe: 15m
3

Add an RSI(14) indicator

Drop an Indicator node. Choose RSI from the catalog. Set length to 14.Connect the Price node to the RSI input.
4

Add an EMA(50) trend filter

Drop another Indicator node. Choose EMA from the catalog. Set length to 50.Connect the Price node to the EMA input.
5

Add the entry condition

Drop a Condition node. Configure:
  • Sub-condition A: RSI < 30 (oversold).
  • Sub-condition B: Price < EMA(50) (below trend).
  • Logic: AND.
6

Attach a trigger

Drop a Trigger node. Set mode to once_per_bar_close — fires only on closed candles, prevents intra-bar noise.Connect the Condition node to the Trigger input.
7

Configure the webhook target

On the Trigger node, set:
  • Webhook URL: your SignalsBot’s /webhook endpoint
  • Message template (JSON):
    {
      "secret": "<your-shared-secret>",
      "pair": "BTCUSDT",
      "mode": 4,
      "canBuy": true
    }
    
This webhook flips the mode’s canBuy to true when the condition fires.
8

Add an exit-flip strategy (mirror)

Create a second strategy: rsi-mean-reversion-btcusdt-15m-exit. Same Price + RSI + EMA, but condition is RSI > 70 OR price > EMA(50). Trigger writes canBuy: false.This pair of strategies (entry-flip-on, exit-flip-off) brackets the buying windows.
9

Preview both strategies

Hit Preview on each. Confirm:
  • Entry strategy fires occasionally (a few times per week typical on BTCUSDT 15m).
  • Exit strategy mirrors — fires when RSI rebounds above 70 or price rises above EMA.
  • Firing rate is sane (not 100x per hour, not zero).
10

Backtest the combined behavior

Run a Backtester job: BasicMode on BTCUSDT with 30 days of recent data, gated by canBuy flips at the times the recipe would have fired.The Backtester will show the equity curve under this combined regime. Compare against BasicMode-alone for the same window.
11

Forward-test on small capital

Allocate $1,500 (a sub-account if you can) to BasicMode + this recipe pair. Run for 2 weeks. Watch the Dashboard daily.If forward-test behavior matches backtest, scale up. If it diverges, investigate.
12

Promote to full capital if validated

Move to $15,000–$25,000 allocation for BasicMode, with the recipe pair gating buying.

Expected behavior

On BTCUSDT 15m, expect the entry condition to fire roughly 2–6 times per week in normal market regimes. More in choppy/declining markets, less in strong uptrends.
BasicMode’s typical hold time (hours to days) applies once canBuy is flipped on. The recipe doesn’t change BasicMode’s exits — those happen via the sell ladder.
The recipe trades fewer round-trips than BasicMode-alone (because some buying windows are gated off). Per-trade selectivity is higher (better-timed entries).Net effect varies by regime. In sideways markets, gating helps slightly. In strong-trend markets, gating can underperform BasicMode-alone (you missed buying opportunities during sustained moves).Backtest on multiple windows to get a fair picture.

Common mistakes

Causes the recipe to fire every minute the condition holds. RSI can stay below 30 for hours — that’s 60+ flips per hour. Floods the SignalsBot.Fix: use once_per_bar_close. Fires once per closed 15-minute candle.
Without the mirror strategy that flips canBuy: false when conditions clear, the entry strategy stays “buying allowed forever” once it fires. Defeats the purpose of gating.Fix: build both strategies as a pair.
Tighter threshold = fewer signals = thinner sample size. Sounds good but in practice the recipe almost never fires.Fix: stick with < 30 for entry, > 70 for exit. The classic thresholds work.
Without the EMA(50) trend filter, the recipe fires on every RSI dip — including dips during sustained downtrends. You catch falling knives.Fix: keep the AND with EMA(50) filter.
Backtest is necessary but not sufficient. Markets change. Forward-test on small capital for 2 weeks before committing full size.

What’s next

EMA Cross Trend

Trend-following alternative recipe.

Multi-Timeframe

More sophisticated composition pattern.

SignalEditor

The module where you build this recipe.

Backtester

Validate the combined behavior on historical data.
Last modified on May 3, 2026