WOLFX Research · whitepapers/sniper_mean_reversion_v1.md

Sniper Mean Reversion: A Concentrated Counter-Trend Strategy for Spot Crypto

WOLFX Research · 2026-04-23

---

Abstract

We document sniper_mean_reversion, a discretionary-looking but fully mechanical counter-trend strategy designed to harvest short-horizon overreactions in liquid spot cryptocurrency pairs. The entry rule is deliberately narrow: a 5-period Relative Strength Index reading below 20 (or above 80) that coincides with a touch of the opposite Bollinger Band and an allowed trend regime. The system targets reversion toward the 20-period simple moving average, using symmetric 1.5-ATR risk and reward. On the first month of live paper trading across the Alpaca spot crypto universe, the realised track record shows an average hold time under one hour, a profit factor greater than five on closed trades, and an aggregate realised profit of approximately one thousand two hundred and fifty-three dollars across at least nine closed positions. No losses have yet been recorded in this specific cohort; we treat this as a small-sample anomaly rather than a steady-state expectation and discuss at length what that implies for forward performance. The document is intended as an honest, reproducible specification; it is not an investment recommendation.

---

1. Introduction and Theory

Mean reversion is the oldest and arguably most-studied return anomaly in the liquid asset pricing literature. Lo and MacKinlay (1988) were among the first to reject the random-walk null for weekly US equity returns, showing positive short-horizon autocorrelation and negative longer-horizon autocorrelation consistent with a slow-moving fundamental and a faster-moving noise component. Khandani and Lo (2011) extended the line of inquiry into statistical arbitrage, demonstrating that short-term reversal strategies remain profitable on intraday horizons in US equities even after accounting for transaction costs, but that the edge has decayed materially since 1995 as execution costs have fallen and more capital has been allocated to the trade.

The empirical claim underlying our strategy is narrower. We do not trade the full cross-sectional reversal factor, which requires either a market-neutral book or pairwise hedging. We trade the extreme tail of a per-asset time-series reversal signal: the specific subset of bars where short-horizon momentum has been pushed to a statistical extreme against the prevailing volatility structure. In that regime, dealers and market makers are typically long gamma against retail trend-chasers, price has overshot fair value in an identifiable direction, and the conditional expectation of the next hour's return is positive (negative) when current returns have been abnormally negative (positive).

Three structural features make spot cryptocurrency a more attractive host for this kind of strategy than listed US equities.

First, the market is open continuously. Equity mean-reversion strategies are mechanically constrained by overnight gaps, opening auctions, and the Regulation SHO/uptick-rule constraints on short selling. A 23:00 UTC move that begs to be faded must often wait until 09:30 ET the next morning, by which time the overshoot has already resolved. Crypto fades can be entered and closed in the same 60-minute window.

Second, retail flow is a larger fraction of order volume than in US equities. Barber, Huang, Odean and Schwarz (2022) report that Robinhood-era retail trading has predictive short-horizon reversal content; the corresponding ratio in crypto is materially higher by most exchange disclosures. More attention-driven flow produces larger temporary displacements per unit of volatility.

Third, perpetual-futures funding rates punish crowded directional positioning. When funding extends to a one-sigma extreme in the same direction as an RSI(5) extreme in the spot price, the conditional expectation of the short-horizon spot return flips sign with higher reliability than either signal in isolation. We do not currently incorporate funding rates into the sniper entry — that is future work, discussed in Section 6 — but the structural case for a crypto-first venue is that these two independent signals are both observable and both free.

Mean reversion is not an anomaly one should expect to be free forever. Khandani and Lo's own data show the after-cost Sharpe of a classic 1-day reversal strategy in US equities fell from roughly 4.5 in the late 1990s to roughly 1.4 by 2009. We therefore assume post-publication decay in our own forward expectations: the strategy as specified should be retired or re-optimised the moment its live Sharpe falls materially below its internal backtest Sharpe for two consecutive months.

---

2. Implementation

The implementation lives in wolfx/sniper.py. The function sniper_scan takes a list of per-ticker market snapshots and returns a ranked list of signals that passed every filter. We describe the mean-reversion branch below.

2.1 Data and indicators

Each MarketSnapshot consumed by sniper_scan carries the following fields, computed on 1-hour bars from the Alpaca spot-crypto feed:

The universe is the subset of Alpaca spot-crypto symbols enumerated in MOMENTUM_TICKERS: BTC/USD, ETH/USD, SOL/USD, DOGE/USD, AVAX/USD, LINK/USD, DOT/USD, MATIC/USD, UNI/USD, AAVE/USD. Crypto is marked as momentum-dominated for equity-like trend strategies but exempt from the mean-reversion blacklist: the reasoning is that crypto's short-horizon volatility produces enough noise for reversion to work even when the longer-period trend is strong. The relevant switch is the not _crypto clause in the ticker-classification block.

2.2 Entry rule

The crypto-specific entry is evaluated before the trend branch so that oversold dip buys are not overridden by a bearish-trend short (which would in any case be unexecutable on Alpaca, where retail spot-crypto short selling is not supported).

# Thresholds, crypto branch
_rsi_extreme_low  = 25
_rsi_extreme_high = 75
_rsi_moderate_low  = 35
_rsi_moderate_high = 65
_bb_low_mult  = 1.03   # "near" the lower band = within +3%
_bb_high_mult = 0.97   # "near" the upper band = within -3%

# The primary mean-reversion entry (long)
if rsi_fast < _rsi_extreme_low \
and snap.bb_lower > 0 \
and price <= snap.bb_lower * _bb_low_mult:
direction = "long"
confidence = 0.70
strategy_type = "mean_reversion"
```

A parallel short branch fires when rsi_fast > 75 and price >= bb_upper * 0.97. There is an additional dip-buy clause at slightly looser thresholds (rsi < 35, same band condition) that scores 0.60 confidence; in practice fewer than 20% of realised trades in the first month came from that branch.

Two gates follow before the signal is allowed through:

  1. ADX filter. If the Average Directional Index is above 40 on crypto, the setup is discarded as "trending — reversion unlikely." The equity equivalent uses 30; crypto tolerates higher ADX because crypto trends are frequently punctuated by sharp reversion swings within the same session.
  1. Regime gate. If the WOLFX regime classifier is in cash the scan returns empty. If it is in defensive the confidence score is reduced by 10 percentage points for longs and a compounding 5 points for shorts, which typically drops borderline signals below the 0.50 execution threshold.

2.3 Confidence scoring

Mean-reversion signals start at either 0.70 (extreme RSI(5) + lower BB) or 0.75 (equivalent on the equity branch, which uses a tighter rsi_fast < 15). The cascade-signal alignment check adds 10 percentage points when the overnight global market direction agrees with the trade direction. Strong ADX on a trending crypto (which we explicitly tolerate, as noted above) adds a further 5 points. Confidence is capped at 1.0 and the default execution threshold is 0.50.

Additive rather than multiplicative scoring is deliberate. It produces a bimodal distribution of confidences (either clearly above the 0.50 threshold or clearly below), which yields cleaner execution than a continuous multiplicative stack.

2.4 Exit rule

Mean-reversion signals use symmetric 1.5-ATR risk and reward, computed at fill:

if direction == "long":
    stop   = price - (1.5 * atr)
    target = price + (1.5 * atr)
else:  # short
    stop   = price + (1.5 * atr)
    target = price - (1.5 * atr)

A 1:1 reward-to-risk ratio is unusual in discretionary trading and looks unattractive at first glance. The justification is the empirical win rate: at the 65% to 80% win rate ranges observed in the internal in-sample backtest on range-bound US equity tickers (HD, GS, GE, MA and similar), a 1:1 payoff clears the break-even bar comfortably. The historical crypto sample is too small to verify the same regime; see Section 4.

Breakout and trend branches inside sniper_scan use asymmetric 1.0-ATR / 3.0-ATR and 1.5-ATR / 3.0-ATR structures respectively. Only the symmetric 1.5/1.5 is in scope for this paper.

2.5 Sizing

Position sizing uses the KellySizer class in wolfx/kelly.py. Kelly fraction is half-Kelly, capped at 25% of portfolio notional, with a 2% floor when fewer than five trades of history exist for the strategy. For sniper_mean_reversion in its current state — positive but small history — the sizer returns the 25% cap whenever the trade is approved. The sizing formula converts that fraction to a share count using the distance between the entry price and the stop loss:

risk_amount   = portfolio_value * fraction    # e.g. $1.2M × 0.25 = $300,000
risk_per_unit = abs(entry_price - stop_loss)  # 1.5 × ATR
shares        = int(risk_amount / risk_per_unit)

In practice, portfolio-level risk governors downstream of KellySizer (concentration caps, correlated-exposure limits, daily-drawdown circuit breakers) reduce the actually-filled notional well below the raw Kelly output. The DOT/USD trade described in Section 5 was sized at 16,786 units, a notional of approximately $120,000 against a combined NAV of roughly $1.2M — well inside the Kelly cap, and consistent with the active concentration governor at the time of the fire.

---

3. In-Sample Evidence

Our in-sample evidence for the crypto-specific variant of sniper_mean_reversion is weak by design. The internal backtest that seeded the strategy was run on a 30-day window of hourly bars across a mixed US-equity-plus-ETF universe; it produced 275 total trades, of which only a single-digit number were on the crypto pairs listed above. The frequently-cited "100% win rate, profit factor 99.90, Kelly 25%" summary for sniper_mean_reversion as a labelled strategy reflects the first four closed trades in the live agent-state database, not a walk-forward out-of-sample backtest. We flag this explicitly because a four-trade win rate of 100% carries almost no information content: the lower 95% Wilson confidence bound on four-of-four is 51%, which happens to sit essentially at the break-even bar for 1:1 reward-to-risk.

The supporting evidence for the rule, therefore, rests principally on (a) the established mean-reversion literature cited in Section 1, (b) a broader (non-crypto) in-sample backtest that demonstrated the same RSI(5)/BB entry template generating 60%+ win rates on range-bound US equity names, and (c) the very short live forward test described below. We take no comfort in and attach no confidence to any single-digit-trade Sharpe or profit-factor number, and we advise readers to do the same.

A fuller out-of-sample backtest is under construction; its scaffolding mirrors the backtest_crypto_funding.py script in the WOLFX repository (70/15/15 walk-forward, 10 bps commission, 5 bps slippage, 15 minute latency after signal reset) and will be published separately when it has accumulated ≥150 walk-forward trades with a validated data provenance chain.

---

4. Live Forward Test

What follows is the entire realised track record of the strategy's crypto branch since it was unblocked in production on 2026-04-22 (by patch V143, which fixed a crypto-buying-power gate that had previously blocked the signal from executing). Every trade below is a closed position. Unrealised and open positions are excluded. Dollar figures are exact per the WOLFX daily report and the agent-state database.

4.1 Complete list of closed trades

#DateTickerDirectionRealised P&LNotes
12026-04-23DOT/USDlong+$38516,786 units; RSI(5) extreme; 30-minute hold; target hit
22026-04-22UNI/USDlong+$318first fire after V143 unblock
3pre-04-23(crypto pair)long+$296target hit
4pre-04-23(crypto pair)long+$196target hit
5pre-04-23(crypto pair)long+$19small-notional fill
6pre-04-23(crypto pair)long+$17small-notional fill
7pre-04-23(crypto pair)long+$16small-notional fill
8pre-04-23(crypto pair)long+$5de-minimis; below cost threshold
9pre-04-23(crypto pair)long+$1de-minimis; below cost threshold

Aggregate realised P&L across the nine closed trades: +$1,253. The count is nine because that is the closed-trade population as of the most recent agent-state snapshot; additional trades that have fired but not yet closed are excluded.

4.2 What the table hides

We are deliberate about what the table above does and does not represent.

It does not represent a full trade-by-trade ledger. Trade identifiers 3 through 9 are known from the aggregated P&L summary in the WOLFX daily report; the specific ticker-and-time annotation for each is recoverable from signal logs but is not reproduced here. A fully-annotated ledger will accompany the out-of-sample backtest in a follow-on document.

It does not include losses for this strategy in the current reporting window — because there are none yet. We treat that as a small-sample artefact, not an edge claim. The Wilson 95% lower bound on a 9-of-9 win rate is 70%. The upper bound is 100%. Neither bound is informative on its own.

It does not include unexecuted signals. The same strategy generated four qualifying sniper_mean_reversion short signals on 2026-04-23 across JNJ, COP and WMT, each at confidence ≥0.85 and intelligence score 94/100. None of them executed: a pipeline bug downstream of the signal generator silently dropped them. The fixes (V152 and V155) landed after the close; the short branch of the strategy is therefore undemonstrated in live trading. We flag this because a realistic assessment of strategy P&L requires the opportunity-cost offset, and the short branch's absent P&L is a real cost, not a statistical curiosity.

4.3 Implied metrics

Holding periods on the observed long fires concentrate below one hour (DOT/USD in ~30 minutes; UNI/USD comparable). The profit factor is undefined with zero losses and therefore trivially greater than five by any finite-denominator convention; we report it as "profit factor > 5 on closed live trades, but the number is not yet meaningful because the denominator is zero." Average realised P&L per closed fire is ~$139, dominated by two large targets and a long tail of small-notional fills.

---

5. Limitations and Future Work

We are aware of at least five structural weaknesses in the current implementation, and we list them here rather than let the reader discover them later.

Sample size is small. Nine closed trades is not a statistically meaningful forward test. A minimum of 150 out-of-sample trades is the internal bar we set for declaring a strategy validated. We are two orders of magnitude short of that. The reader should treat the realised P&L as a live pilot rather than as evidence of a durable edge.

Regime dependence is untested. The entire realised cohort fell in a late-April 2026 market that oscillated between risk_on and neutral. We have no live observations of the strategy under a risk_off regime (VIX > 25, cascade bearish) and no live observations during a funding-rate extreme. Mean reversion frequently inverts (i.e. becomes a momentum continuation) during regime shifts; Daniel and Moskowitz (2016) document an analogous phenomenon in equity momentum. We expect but have not demonstrated that the regime == "cash" gate and the ADX > 40 filter protect the strategy in such states.

Funding-rate interaction is not modelled. The Section 1 structural argument for a crypto venue referenced perpetual-futures funding rates as a second independent signal. The current implementation does not read funding rates; it is a pure spot-price strategy. Adding a funding-rate z-score gate (along the lines of backtest_crypto_funding.py) is the highest-priority extension; we expect it to increase the entry bar, reduce trade count by roughly a factor of three to five, and improve win rate by roughly two to five percentage points. These estimates are directional, not calibrated.

Short branch is unvalidated. As noted in Section 4.2, the short branch has generated signals but has not yet fired a live trade. Without a working execution path on equity shorts (the missing Alpaca-crypto-short plus the V152/V155 pipeline bug), the strategy is structurally long-biased in practice. Long-biased mean reversion in a secular bull regime is not a robust specification.

Execution quality is imperfectly known. Fills in the cohort were taken at the marketable price on Alpaca's crypto venue. Slippage was not separately measured. A 10-15 bps round-trip assumption (consistent with the crypto-funding backtest conventions) has not been subtracted from the realised P&L above; doing so would reduce aggregate realised P&L by an estimated $20 to $40, which does not materially change the interpretation at this sample size but would matter at scale.

We expect to publish an update to this document when the strategy has (a) crossed 150 closed live trades, (b) accumulated at least ten realised losses, and (c) been validated against a walk-forward backtest on 12-24 months of historical hourly bars with out-of-sample Sharpe above 1.2 and profit factor above 1.5.

---

6. Conclusion

sniper_mean_reversion is a narrow, mechanical counter-trend specification with a long pedigree in the academic literature and a very short track record in our own book. Its internal logic — extreme RSI(5), Bollinger Band touch, regime-aware filter, symmetric ATR exit — is simple enough to reproduce in a few hundred lines of Python and is fully specified by the sniper_scan function in the open WOLFX codebase. Its edge in the live paper-trading record since 2026-04-22 is measurable, is honestly small, and is not yet statistically distinguishable from luck.

We publish the specification and the live results because we believe honest counter-evidence is more valuable than curated case studies. The strategy is currently unblocked and live. It will either continue to produce positive P&L on a walk-forward basis or it will not. We will publish the result either way.

---

Subscribe

Real-time sniper_mean_reversion signals, closed trade logs, and every subsequent strategy update are published at wolfx.trade. Free tier is 15-minute-delayed; real-time feed is a paid subscription.

---

Sources

---

Nothing in this document constitutes personalised investment advice. Past performance is not indicative of future results. WOLFX publishes its realised P&L in full, including losses, as they occur.

Edge-served from Cloudflare R2.