Renaissance Mean Reversion [JOAT]RENAISSANCE MEAN REVERSION
A tribute to the Medallion-style statistical-arbitrage approach: do not trade price — trade the spread between price and its smoothed expectation , measure how reliably that spread mean-reverts using an AR(1) half-life regression , and only fire signals when the half-life is fast enough to be tradeable. The result is a discipline-enforcing engine that says no more often than yes : it refuses to take a reversion trade until the spread shows it actually reverts.
The synthetic spread
The script builds a synthetic pair from two views of the same instrument:
Leg 1 — current price (configurable source).
Leg 2 — long EMA of price (default 50-bar; configurable).
Spread = price − long EMA (or ln(price) − ln(EMA) when log-spread mode is on, removing scale).
The spread is then Z-scored over a configurable lookback (default 100 bars) to produce a stationary stationary signal that says: "how many standard deviations is the spread from its own mean right now?". This is the textbook stat-arb construction, single-leg version.
Half-life regression — the gate
This is what makes the script institutional rather than retail. Reversion is meaningless if the spread does not actually revert. The script fits an AR(1) regression over a configurable window (default 120 bars):
Δspread_t = α + β · spread_{t−1} + ε_t
The half-life of mean reversion is then:
HL = −ln(2) / ln(1 + β)
When β is negative and close to zero, HL is short — the spread reverts quickly. When β approaches −1, HL is huge — the spread barely reverts. When β is positive, the spread is anti-mean-reverting (trending) and the script will refuse to trade.
A configurable Max Half-Life (default 20 bars) gates signals — entries only fire when HL is below this threshold. A configurable Min Half-Life (default 0.5) floors the estimate to avoid degenerate near-zero values that would otherwise produce explosive signals.
This is the headline filter. Roughly 50–70% of bars on most instruments fail it — which is the point. You only trade when the spread has earned the right.
Entry / Exit logic
R-LONG — fires when Z < −entryZ (default −2.0) AND HL is below the max threshold AND the re-entry cooldown has elapsed. Spread is stretched too far below, will revert.
R-SHORT — fires when Z > +entryZ AND HL is below the max threshold AND cooldown elapsed.
R-EXIT — fires when |Z| drops below exitZ (default 0.25) OR when Max Hold Bars (default 40) has been reached, whichever comes first.
A configurable re-entry cooldown (default 3 bars) prevents immediate re-firing on the same side.
Visual system — minimal mono institutional
The aesthetic is intentionally austere — Renaissance's research-paper minimalism. Pure monochrome:
Z guides on right side of chart — small text labels showing current Z, HL, and tradeable status.
R-LONG / R-SHORT / R-EXIT labels — clean text tags on entry and exit bars.
Half-Life overlay label — current HL value displayed near the live close.
Shaded ribbon between price and slow EMA (configurable transparency).
Trade entry/exit shapes — small markers at signal bars.
Single-hue tradeable-regime tint (off by default) — subtle bgcolor when HL is fast AND Z is stretched.
A locked Minimal Mono palette: white bull / gray bear / pure-black background. No accent colours. The chart looks like a quant research paper. Intentional.
Dashboard
Monospaced table positionable to any of eight corners. Surfaces:
Current spread value and Z score.
Current half-life (in bars) with tradeable / non-tradeable flag.
AR(1) β coefficient (the regression's directional read).
Z thresholds in use.
Last signal direction with bars-ago.
Max-hold bars remaining (when in a position).
Rolling backtest tracker
The script tracks the last N closed reversion trades (configurable, default 200) and surfaces:
Total trades, wins, losses.
Win rate.
Average bars-to-exit.
Average Z magnitude at entry.
Hit-rate by side (R-LONG vs R-SHORT).
This is the script's own performance audit — you see whether the engine is finding genuine reversion or whether the current regime is breaking it.
Alerts
Three alert conditions, each independently controllable:
Reversion Entry (R-LONG or R-SHORT)
Reversion Exit (R-EXIT)
Half-Life crosses Max Half-Life (regime change — reversion is becoming unreliable)
How to read it
Three reads, in order of conviction:
R-LONG / R-SHORT with very fast HL (e.g. HL = 4 bars on a 1H chart) — the script's intended high-conviction setup. The spread is stretched, the math says it will revert quickly, the chart agrees. This is the institutional setup.
Half-life crossing above max (alert) — regime warning. The instrument is shifting from mean-reverting to trending. Any open R-positions should be re-evaluated; new R-entries should be paused until HL re-tightens.
Sustained R-EXIT triggers from time-stop (max-hold) rather than from Z returning to neutral — the script is exiting because the trade ran out of time, not because the thesis played out. Recurring time-stop exits mean the current parameters do not fit the instrument.
The rolling backtest win-rate is your auditor. When it climbs, the engine is finding edge. When it grinds flat or declines, the regime has changed and the parameters need adjustment.
Suggested settings
Defaults (long EMA 50, Z lookback 100, regression window 120, max HL 20 bars, entry Z 2.0, exit Z 0.25) are tuned for 1H–4H on liquid markets where mean reversion is statistically meaningful. For lower timeframes drop everything proportionally (long EMA 25, Z 50, regression 60). For HTF raise everything (long EMA 100, Z 200, regression 200). The max HL is the most sensitive parameter — narrow it (10–15) for high-conviction-only filtering; widen it (25–30) for more frequent signals.
Originality / what's reused
The synthetic-pair Z-score construction is textbook stat-arb. The AR(1) half-life regression is published quantitative finance — the Ornstein–Uhlenbeck-process speed-of-reversion estimator. The implementation here — the dual-leg synthetic spread with optional log construction, the rolling Z-normalisation pipeline, the AR(1) regression with HL formula and min/max-HL gating, the entry/exit state machine with cooldown and max-hold, the rolling N-trade backtest tracker, and the minimal-mono institutional aesthetic — is JOAT-original. No third-party code reused. The script is a tribute to the Medallion-style approach, not a direct replication of any proprietary Renaissance Technologies code.
Limitations
The single-leg "synthetic pair" (price vs its own EMA) is a degenerate stat-arb construction by design — true stat-arb uses two genuinely co-integrated instruments. Pine's per-script symbol limitation makes a two-instrument cointegration construction impractical for a standalone indicator; this script captures the methodology of stat-arb (spread + Z + HL gate) on the single-instrument case. The HL estimate is statistical and needs the regression window populated; early bars give a warm-up read.
—
-made with passion by jackofalltrades
Indicator

Volatility Reversion Bands Pro [JOAT]VOLATILITY REVERSION BANDS PRO
A two-layer reversion envelope: inner Bollinger band for the normal volatility envelope, outer ATR-extended band for the extreme envelope. Signals only fire when price has reached the outer ring — the inner band is context, the outer band is the trigger. The result is a clean mean-reversion engine that respects the difference between "stretched" and "actually stretched".
Two envelopes, one principle
Inner band — classic Bollinger: basis (SMA or EMA) ± stdev × multiplier. The familiar 20-period, 2-sigma defaults are preserved.
Outer reversion band — the outer envelope extends inner band ± ATR × multiplier . This is the band that triggers signals. Setting the ATR multiplier high makes signals rarer but deeper; setting it low makes them frequent and shallower.
Reversion bands using stdev alone collapse in low-volatility regimes (too many false signals) and explode in high-volatility regimes (signals come too late). The ATR extension on top of stdev fixes both: ATR adds a constant-floor protection in quiet markets and scales the outer band proportionally in loud ones.
Strong vs weak signals
Two signal tiers from a single channel-ratio read (close position within the outer band, normalised 0–1):
Strong signals — fire on the outer band itself (ratio ≤ 0 or ≥ 1). The high-conviction reversion read.
Weak signals — fire when ratio reaches a configurable near-band threshold (default 0.10 / 0.90). The "approaching outer band" read — useful for traders who want earlier hints. Easily disabled.
A signal cooldown suppresses same-side repetition; an exhaustion arrow prints when N consecutive bars (default 3) all live in the outer-band zone — a configurable escalating-glyph string ("^", "^^", "^^^"…) makes the run length visible at a glance.
Volatility regime classification
Independent of signals, the script classifies the current volatility regime by comparing current stdev to its own rolling average over a long lookback (default 100 bars):
Low regime — stdev / avgStdev below the low threshold (default 1.0×). Reversion is more reliable here.
High regime — above the high threshold (default 2.0×). Reversion is less reliable here; trends become dominant.
Normal regime — in between. Default mode.
Background tinting (toggleable, transparency-controlled) paints the chart by regime so the trader can see at a glance whether the current environment is suitable for reversion. This is the "do not fight the tape" filter — when the background is hot, every reversion signal is lower-conviction by definition.
Visual system
Bar gradient — bars are coloured by their position-in-band ratio (bull → mid → bear via plasma palette). At a glance you can see where price is sitting in the channel without reading the value.
Inner band fill — toggleable shoulder fill between BB and outer reversal bands with configurable transparency.
Inner BB lines and basis line are each independently toggleable for traders who want a minimalist or full envelope view.
Signal label style — Glyph (compact), Text (verbose), or Both.
A locked Plasma palette (yellow bull, magenta bear, violet mid) on a deep-void background gives the chart a distinctive look without competing with price action.
Dashboard
Monospaced table, positionable to any of nine corners, with togglable legend footer. Rows surface current basis, inner band values, outer reversion band values, channel ratio %, stdev / avgStdev ratio, regime label, last signal direction with age, and an exhaustion run counter.
Alerts
Four alert conditions, each independently controllable:
Strong Long / Short (outer band touch reversion)
Weak Long / Short (near-band threshold)
Vol Regime Change
Exhaustion Arrow (consecutive bars in outer-band zone)
How to read it
Two reads, in order of conviction:
Strong signal in a Low or Normal regime — the script's intended sweet spot. The outer band has been touched, price is statistically far from its mean, and the volatility environment supports the idea of mean-reversion.
Exhaustion arrow — when 3+ bars sit in the outer band, you usually have either a genuine breakout (the bands themselves will start to expand) or an exhaustion (the next reversal candle will be the signal). Either way, the next move is meaningful.
In a High regime, treat strong signals as cautionary at best — the bars are coloured by ratio for a reason; the gradient will tell you when one side is dominating.
Suggested settings
Defaults (length 20, stdev mult 2.0, ATR mult 1.5) are tuned to 1H–4H on liquid markets — the classical Bollinger settings plus a 1.5-ATR outer cushion. For 5m–15m, drop length to 14 and ATR multiplier to 1.0. For daily and above, raise length to 50 and ATR multiplier to 2.0. The regime thresholds (low 1.0×, high 2.0× of the long-run stdev average) are conservative — tighten the bands if your instrument is unusually quiet.
Originality / what's reused
Bollinger Bands and ATR are public-domain primitives. The implementation — the outer-band = inner-band ± ATR construction, the channel-ratio bar gradient, the regime classifier with auto-tinted background, the exhaustion-arrow consecutive-bar run logic, the weak/strong signal tiering, and the dashboard's monospaced regime-aware layout — is JOAT-original and tuned together. No third-party code reused.
Open source
Published open-source under the default Mozilla Public License 2.0. Section-headed source, tooltips on every input, helper functions documented inline. The band engine, the regime classifier, the exhaustion logic, and the dashboard are independent modules — fork or extend any single one without reading the whole file.
Limitations
Reversion bands are a counter-trend tool by construction. In sustained one-sided moves the outer band will be repeatedly touched without producing a profitable reversion — the High regime tint and the exhaustion-arrow run logic both exist to warn you when you are in this state. Signals are confirmed on bar close (non-repainting), so an intra-bar wick into the outer band that gets reabsorbed will not fire.
—
-made with passion by jackofalltrades
Indicator

Sovereign Trend Strategy [JOAT]Sovereign Trend Strategy
Introduction
The Sovereign Trend Strategy is a systematic, rules-based trend-following strategy built on the SMEMA (SMA of EMA) crossover engine — a double-smoothed moving average system that removes the erratic noise of raw EMA crossovers while remaining faster to respond than pure SMA systems. It enters long and short trades on SMEMA fast/slow crossovers, applies four optional confirmation filters (ADX, RSI, volatility ratio, and baseline), and manages each trade through a full exit framework: stop loss, two take-profit levels with partial close at TP1, a dynamic trailing stop, a trend-reversal exit, and a maximum bars cap that forces turnover.
This is a strategy designed to trade constantly — the default configuration is tuned for maximum trade frequency across all assets and timeframes, with all optional filters disabled so that every valid SMEMA crossover generates a signal. Traders seeking higher-quality entries can enable the ADX, RSI, baseline, or volatility filters individually to raise the bar.
Core Concepts
SMEMA — Double-Smoothed Moving Average Engine
The SMEMA construction applies a simple moving average on top of an exponential moving average, producing a line that is more responsive than a plain SMA but smoother than a raw EMA:
smema(float src, int len) =>
ta.sma(ta.ema(src, len), len)
float fast = smema(close, smFast)
float slow = smema(close, smSlow)
float baseline = smema(close, smBase)
Three SMEMA lines are computed: a fast line (default length 2), a slow line (default length 5), and a longer baseline (default length 15). Crossovers between fast and slow generate the entry signals. The baseline provides an optional directional filter when enabled.
Entry Conditions
Long entries fire when the fast SMEMA crosses above the slow SMEMA with all active filters passing:
bool xUp = ta.crossover(fast, slow)
bool longOk = xUp and adxOk and rsiLongOk and volOk and baseOk
and warmed and inDateRange and barstate.isconfirmed and doLong
Short entries mirror this on downward crossovers. Entries only fire when there are no open trades (pyramiding disabled), ensuring clean one-trade-at-a-time management.
Trade Management Framework
Each trade uses ATR-based levels calculated at entry:
| Level | Default Multiplier | Purpose |
|-------|-------------------|---------|
| Stop Loss | 1.8× ATR | Full position stop |
| TP1 | 2.5× ATR | 50% partial close, breakeven stop move |
| TP2 | 4.5× ATR | Full position close |
| Trailing Stop | 1.5× ATR | Activated after TP1 hit |
After TP1 triggers, the stop-loss is moved to the entry price (breakeven). The trailing stop then follows price by 1.5× ATR, locking in profit while letting the remaining position run toward TP2. This staged approach captures quick-reaction profits at TP1 and rides momentum toward TP2.
Six Exit Paths
// Priority order for long exits:
// 1. Stop Loss — low <= entrySL
// 2. TP1 — high >= entryTP1 (50% partial, breakeven stop set)
// 3. TP2 — high >= entryTP2 (full close after TP1 hit)
// 4. Trailing — low <= trlStop (after TP1 hit)
// 5. Reversal — fast SMEMA crosses below slow (xDn confirmed)
// 6. Max Bars — barsInTrd >= maxBars
The max bars exit (default 10) is particularly important for trade frequency — it guarantees no position is held longer than 10 bars regardless of whether any other exit triggers, creating rapid capital recycling and enabling 100+ trade sample sizes even on daily timeframes.
Optional Confirmation Filters
All four filters are disabled by default and can be enabled individually:
ADX Filter — requires ADX above a minimum threshold before entry. Prevents entries in ranging, low-momentum markets.
RSI Filter — requires RSI above the bull minimum for longs (default 52) or below the bear maximum for shorts (default 48). Confirms momentum alignment with direction.
Volatility Ratio Filter — requires current ATR to be at least a configurable fraction of its own SMA. Filters out squeeze conditions where ATR is compressed.
Baseline Filter — requires close to be above the baseline SMEMA for longs and below for shorts. Adds a medium-term trend confirmation layer.
Strategy Parameters (Backtesting Standards)
Initial capital: $10,000 (realistic for the average retail trader)
Position size: 100% of equity (maximizes trade count visibility in backtest)
Commission: 0.05% per side (appropriate for most spot and futures markets)
Slippage: 2 ticks (conservative estimate for liquid instruments)
Pyramiding: 0 (no compounding positions)
Features
SMEMA fast/slow crossover entry engine with three configurable period lengths
Full trade management: ATR-based SL, TP1 (50% partial), TP2 (full), trailing stop, reversal exit, max bars exit
Breakeven stop migration to entry price after TP1 hit
Four optional confirmation filters: ADX, RSI, volatility ratio, and SMEMA baseline
Long-only, short-only, or both directions configurable
Date range filter for restricted backtesting windows
Live SL, TP1, and TP2 dashed lines drawn on the chart while a trade is open
SMEMA ribbon fill between fast and slow lines, colored by crossover direction
▲ LONG / ▼ SHORT signal labels at every entry signal
Dashboard: position, SMEMA cross direction, ADX, RSI, vol ratio, trade count, win rate, net P&L, bars in trade, settings summary
Alerts for long entry and short entry signals
Webhook JSON alert format
Watermark
Input Parameters
SMEMA Engine
Fast SMEMA Length — period for the fast crossover line (default 2)
Slow SMEMA Length — period for the slow crossover line (default 5)
Baseline SMEMA — period for the optional trend baseline (default 15)
Trend Filter
ADX Length — period for ADX / DMI calculation (default 14)
Min ADX — minimum ADX value required before entry (default 18)
Enable ADX Filter — master toggle (default off)
RSI Filter
RSI Length — period for RSI calculation (default 14)
RSI Bull Min — minimum RSI for long entries (default 52)
RSI Bear Max — maximum RSI for short entries (default 48)
Enable RSI Filter — master toggle (default off)
Volatility Filter
ATR Length — lookback for ATR (default 14)
ATR Smooth — lookback for the ATR average used in ratio (default 20)
Min Vol Ratio — ATR/AvgATR minimum threshold (default 0.8)
Enable Vol Ratio Filter — master toggle (default off)
Baseline Filter
Enable Baseline Filter — when on, requires close above baseline for longs and below for shorts (default off)
Trade Management
Stop-Loss ATR Mult — distance of initial stop from entry in ATR units (default 1.8)
TP1 ATR Mult — distance of first take-profit from entry (default 2.5)
TP2 ATR Mult — distance of second take-profit from entry (default 4.5)
Use Trailing Stop — enables dynamic trailing after TP1 (default on)
Trailing Stop ATR Mult — trail distance in ATR units (default 1.5)
Max Bars in Trade — maximum bars before forced exit (default 10)
Trade Direction
Allow Long Trades — toggles long entry signals (default on)
Allow Short Trades — toggles short entry signals (default on)
Date Range
Enable Date Filter — restricts backtesting to a specific window
From Date / To Date — start and end of the active period
Visuals
Bull Color — cyan default for upside elements
Bear Color — red default for downside elements
Neutral Color — gray for baseline and neutral dashboard text
Show Dashboard — live performance and settings panel
Show Watermark
Show Signal Labels — ▲ LONG / ▼ SHORT markers on entry bars
Show SMEMA Bands — toggles the ribbon and three SMEMA line plots
How to Use
Add the strategy to any chart. The default settings are tuned for high trade frequency — no filters enabled, fast periods of 2/5, max bars 10.
Run the Strategy Tester to review backtest performance. Check that the trade count is above 100 on your chosen timeframe and symbol before drawing any performance conclusions.
To increase signal quality at the cost of trade frequency, enable filters one at a time: start with the ADX filter to eliminate ranging entries, then add RSI if you want additional momentum confirmation.
Use the SL/TP dashed lines drawn on-chart during live trades to monitor your risk levels visually in real time.
Set the Long Entry and Short Entry alerts to receive notifications. Use Webhook JSON format to route signals to automation platforms.
Adjust the ATR multipliers to fit the volatility profile of your market. Higher-volatility assets like altcoins benefit from wider stops (2.0–2.5×) and wider TP levels. Lower-volatility assets like indices may work better with tighter parameters.
The Max Bars in Trade parameter is the most powerful lever for trade frequency. Reducing it to 5–7 generates very high trade counts. Increasing it to 20–40 gives trades more room to develop but reduces total trade count.
Indicator Limitations
SMEMA crossovers are inherently lagging — by definition, the crossover confirms a direction change after it has already begun. In fast-moving markets this means entries will not be at the exact turning point.
The default configuration (all filters off, max bars 10) optimizes for trade count and sample size rather than highest possible win rate. Enabling filters will reduce trade count but may improve per-trade quality — test thoroughly on your symbol and timeframe before live use.
The 100% equity position sizing in the backtest is chosen to keep commission effects proportional and performance metrics visible at small capital sizes. This does not represent a recommendation to risk your entire account on any trade.
Backtested results are not a guarantee of future performance. Past performance under any parameters does not imply future results.
The strategy uses `calc_on_every_tick=false` — all orders execute at bar close, which is more realistic than tick-by-tick simulation but means intrabar SL/TP wicks may not be captured accurately in the backtest.
Originality Statement
The Sovereign Trend Strategy is an original Pine Script v6 strategy publication. The SMEMA (SMA of EMA) double-smoothing construction is an original baseline engineering choice that produces a distinct crossover behavior not replicated by standard EMA or SMA crossover systems. The six-path exit framework, the staged TP1/breakeven/trailing/TP2 management sequence, and the modular optional filter architecture are original design decisions. The strategy.position_size derivation of position state (avoiding the Pine Script v6 timing bug with strategy.opentrades and manual boolean flags) is an original technical solution developed for this publication.
Disclaimer
This is a backtested strategy provided for educational purposes only. It does not constitute financial advice or a recommendation to trade any specific instrument. All trading involves risk of capital loss. Backtested performance does not guarantee future results. Commission, slippage, and real-world execution conditions will differ from backtest simulations. Always perform your own analysis and consult a licensed financial professional before trading with real capital.
-Made with passion by jackofalltrades
Strategy
