Free-data · reproducible · no live trading

Scott Phillips Strategies – Backtest Analysis

Systematic backtests of three trading ideas on crypto perpetual futures, using free-data sources only.

Strategy 1 · Meme volume
t ≈ 2.8–3.9
2–5 day momentum edge, right-tail driven
Strategy 2 · Breakout (A: 50/70)
PF 4.95 · E[R] +1.72
147 trades, capacity-capped at 10 concurrent
Strategy 3 · Pairs rubber-band
PF 0.92
Hypothesis rejected — spread doesn't revert

01Meme Comparative Volume → Forward Return

Mixed — right-tail edge, not next-day

Hypothesis: A rise in a meme coin’s volume relative to its recent average predicts a price rise the following day (or over the next few days).

Data: Bybit meme‑perpetual symbols (35 coins, daily OHLCV 2021‑2026). Off‑Bybit sources probed (CoinGecko, GeckoTerminal) but volume too sparse; the on‑Bybit sample is sufficient.

Meme classification: A symbol is considered a meme if its base ticker (without USDT) appears in a curated list of known meme coins (e.g., DOGE, SHIB, PEPE, WIF, BONK, FLOKI, etc.) OR if the ticker contains any of the keywords: dog, shib, pepe, wif, bonk, floki, turbo, brett, mog, cat, popcat, nut, ponke, mew, cheems, moodeng, bome, ordi, sats, toshi, neiro, fart, act, why, giga, mother, daddy, retard, wolf, peng, fish, ladys, meme, bobo, kishu, samo, duko, coq, grok, harambe, whales, pump, cookie, bink, meow, mubarak, spx, wif.

Method: Compute comparative volume ratio = volume(t) / SMA(volume, K)(t). Signal when ratio ≥ threshold (tested K=20/30, threshold=1.25‑3.0). Forward return measured from open(t+1) to close(t+H), H=1,2,3,5. Baseline = same‑day mean forward return of all meme coins (market‑neutral read).

Result: The effect is not next‑day (H=1 weak). Peak predictiveness at H=2–3 with volume ≥2× average: t‑stat ≈ 2.8–3.9, relative forward return +1.0% to +2.2% over baseline. Median forward returns remain negative; the edge is a right‑tail driven by a few large winners.

02Breakout Entries with Trailing Stop

Positive — capacity-capped edge holds

Hypothesis: Buying a new N‑day high and exiting when price falls to the X‑day low (trailing) captures profit.

Variants tested:

Data: 121 crypto‑native Bybit USDT perps (≥150 daily candles, ≥$500k/day avg turnover). Window ≈ 2020‑03 → 2026‑09 (BTCUSDT 2,360 days).

Method: Signal at close when close[t] > max(high[t‑N … t‑1]). Entry next open. Stop = min(low[t‑X+1 … t]) trailed daily (never lowered). Risk 1% of $100k equity per trade, max 10 concurrent positions (portfolio-level cap, enforced — signals firing with no free slot are rejected). Fees 10.5 bps/side.

Result (base, no volume confirmation):

OptionTradesWin%PFE[R]OOS E[R]MaxDDTotal Return
A (50/70)14730.6%4.95+1.72+1.16−46.9%+253.3%
B (70/90)12025.8%1.94+0.44+1.15−37.3%+52.7%
C (100/120)8828.4%1.77+0.35+1.14−28.9%+30.9%

Adding a volume‑confirmation filter (cv_ratio ≥ 1.5 on signal bar) raises PF slightly (A: 4.95→5.21) without materially changing the read.

Directional impact without stop loss: To understand the pure breakout signal, we measured the average forward return after the breakout bar, exiting after H days (no stop, no trailing). The table below shows the mean return over the next H days (averaged across all symbols and all breakout signals). This isolates whether price tends to continue up after a breakout, independent of exit rules.

Breakout NH=1H=2H=3H=4H=5Avg H=1‑10
50+1.03%+1.84%+2.33%+2.52%+2.29%+2.63%
70+1.31%+2.37%+2.81%+2.72%+2.54%+2.84%
100+0.87%+0.94%+0.68%+0.60%+0.43%+0.59%

Even without a stop loss, the breakout shows a positive drift: for the 50‑day breakout, the average return over the next 10 days is +2.63%; for 70‑day it is +2.84%; for 100‑day it is only +0.59%. This confirms that price tends to drift upward after a breakout, especially for shorter lookbacks, but the magnitude is modest and the winning percentage is around 50‑60% (see win_rate column in the full output). The trailing stop in the main strategy captures part of this drift while limiting losses on failed breakouts.

Interpretation: Shorter lookback + tighter stop (Option A) dominates. Correcting an earlier bug where the 10-position cap was documented but not enforced (unlimited concurrent positions were allowed) cut headline trade counts sharply (622→147 for A) and shallowed max drawdown (−59%→−47%), since aggregate risk is now bounded as intended. Maximum drawdown ≈ −29% to −47% with 1% risk per trade and a real 10-position cap.

03Pairs Correlation & Rubber-Band Effect

Rejected — no mean-reversion, trade loses money

Hypothesis: Pairs that move together with high correlation, when they lose that correlation, will exhibit a mean‑reverting “rubber‑band” in their price spread.

Data: 60 most‑liquid crypto‑native Bybit perps (ranked by 24h turnover), daily close prices 2020‑03 → 2026‑09 (2,360 days). 1,770 unique pairs.

Method:

Result – Layer 1 (statistical):

GroupnCorr‑recover @30dCorr‑recover @90dz‑shrink >50% @20dMean \|z0\|
High‑corr (established)1,10611.6%66.8%0.2%1.45
Ctrl (never high‑corr)8,8768.0%48.9%51.0%1.39

Correlation does eventually recover, but slowly. The price spread does not mean‑revert after a high‑corr break – the spread shrinks in only 0.2% of established pairs versus 51% of random pairs.

Result – Layer 2 (trading):

Interpretation: The rubber‑band hypothesis fails for crypto perps. Decorrelation events of previously‑high‑corr pairs are typically regime shifts; the diverging leg tends to keep diverging rather than snap back. Correlation itself is sticky, but not a tradable spread signal at these horizons.

Analysis Pipeline

  1. Universe construction: Fetch all Bybit USDT linear perps; exclude stock/ETF perps using a ticker list; keep crypto‑native symbols.
  2. Data download: For each symbol, download daily OHLCV via Bybit /v5/market/kline (interval=D, newest‑first pages, paginated backwards to build full history). Cache gzipped JSON per symbol.
  3. Feature calculation: Compute indicators (SMA, rolling max/min, ATR, volume SMA, comparative volume ratio, rolling correlation, etc.) using only historical bars (no look‑ahead).
  4. Signal generation: Apply strategy‑specific rules (breakout, comparative volume threshold, correlation event).
  5. Order simulation: Enter at next open, apply trailing stops or time stops, size by fixed fractional risk (1% of equity per trade), cap concurrent positions.
  6. Cost model: Baseline fee 10.5 bps per side (5.5 bps taker + 5 bps slippage); cost sweeps performed post‑hoc on saved gross trades.
  7. Performance metrics: Trade‑level (win rate, avg win/loss, payoff, profit factor, expectancy R). Equity‑level via daily mark‑to‑market delta (avoids double‑counting). Annualised return, Sharpe, max drawdown, per‑year breakdown, walk‑forward (70/30 temporal split), Monte Carlo bootstrap of trade returns.
  8. Output: Dated JSON and CSV files under results/; summary markdown; validation script re‑derives headline numbers from raw files.

Results Summary

All numbers are re‑derived from committed trade logs (results/*). No data was fabricated; missing observations or weak signals are stated honestly.

Repository: https://github.com/jahrfm/scott-phillips-strategies