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.
Goal
Capture short-term mean-reversion bounces inBTCUSDT 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
You're running BasicMode and want gating
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
Capital `$5,000+` paired with a mode
When NOT to pick this recipe
Prerequisites
BasicMode (or other mode) running on BTCUSDT
SignalEditor and SignalsBot running
Setup steps
Open the SignalEditor and create a new strategy
rsi-mean-reversion-btcusdt-15m.Add an RSI(14) indicator
14.Connect the Price node to the RSI input.Add an EMA(50) trend filter
50.Connect the Price node to the EMA input.Add the entry condition
- Sub-condition A: RSI
<30(oversold). - Sub-condition B: Price
<EMA(50) (below trend). - Logic: AND.
Attach a trigger
once_per_bar_close — fires only on closed candles, prevents intra-bar noise.Connect the Condition node to the Trigger input.Configure the webhook target
- Webhook URL: your SignalsBot’s
/webhookendpoint - Message template (JSON):
canBuy to true when the condition fires.Add an exit-flip strategy (mirror)
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.Preview both strategies
- Entry strategy fires occasionally (a few times per week typical on BTCUSDT 15m).
- Exit strategy mirrors — fires when RSI rebounds above
70or price rises above EMA. - Firing rate is sane (not 100x per hour, not zero).
Backtest the combined behavior
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.Forward-test on small capital
$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.Expected behavior
Firing frequency
Firing frequency
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.Hold duration
Hold duration
canBuy is flipped on. The recipe doesn’t change BasicMode’s exits — those happen via the sell ladder.Net-of-fees performance vs BasicMode-alone
Net-of-fees performance vs BasicMode-alone
Common mistakes
❌ Trigger mode set to `once_per_minute`
❌ Trigger mode set to `once_per_minute`
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.❌ Forgetting the exit-flip strategy
❌ Forgetting the exit-flip strategy
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.❌ Tightening the RSI threshold to 20
❌ Tightening the RSI threshold to 20
< 30 for entry, > 70 for exit. The classic thresholds work.❌ Skipping the trend filter (only RSI condition)
❌ Skipping the trend filter (only RSI condition)
❌ Not forward-testing before scaling
❌ Not forward-testing before scaling