Public signals — official ExoScope featured rows are pinned at the top.
Trend continuation: in an EMA-defined uptrend, buys when RSI dips toward its midline and turns back up (a pullback into trend) — and the mirror for downtrends.
const fast = input('fast_ema', 20, { min: 5, max: 50 });
const slow = input('slow_ema', 50, { min: 20, max: 200 });
const rsiPeriod = input('rsi_period', 14);
const pullbackRsi = input('pullback_rsi', 45, { min: 30, max: 50 });
const minGap = input('min_gap', 8, { min: 3, max: 30 });
const emaFast = ta.ema(close, fast);
const emaSlow = ta.ema(close, slow);
const rsi = ta.rsi(close, rsiPeriod);
let last = -minGap;
for (let i = slow + 2; i < barCount; i++) {
if (i - last < minGap) continue;
if (emaFast[i] === null || emaSlow[i] === null || rsi[i] === null || rsi[i - 1] === null) continue;
const upTrend = emaFast[i] > emaSlow[i];
const downTrend = emaFast[i] < emaSlow[i];
if (upTrend && rsi[i - 1] < pullbackRsi && rsi[i] > rsi[i - 1] && close[i] > emaSlow[i]) { signal(i, 'buy', close[i], 'Pullback up'); last = i; }
else if (downTrend && rsi[i - 1] > 100 - pullbackRsi && rsi[i] < rsi[i - 1] && close[i] < emaSlow[i]) { signal(i, 'sell', close[i], 'Pullback down'); last = i; }
}
Code runs in a sandboxed Web Worker — no network or DOM access. Use at your own risk. Not financial advice.