// Faux equity-curve SVG — plots a normalised series of points as a polyline function EquityCurve({ points, width = 600, height = 160 }) { const min = Math.min(...points); const max = Math.max(...points); const pad = { t: 12, r: 8, b: 8, l: 8 }; const w = width - pad.l - pad.r; const h = height - pad.t - pad.b; const xs = points.map((_, i) => pad.l + (i / (points.length - 1)) * w); const ys = points.map(v => pad.t + h - ((v - min) / (max - min || 1)) * h); const poly = xs.map((x, i) => `${x},${ys[i]}`).join(' '); const areaPts = `${xs[0]},${pad.t + h} ${poly} ${xs[xs.length-1]},${pad.t + h}`; return ( {/* start / end dots */} ); } function BacktestEntry({ entry, go, wide }) { const [expanded, setExpanded] = React.useState(false); return (
{/* Entry header */}
{entry.tag} {entry.category}
{entry.date}
{entry.title}
{entry.summary}
{/* Metrics strip */}
{entry.metrics.map((m, i) => (
{m.label}
{m.value}
))}
{/* Equity curve */}
OUT-OF-SAMPLE EQUITY CURVE (normalised to 100)
{entry.period.split('→')[0].trim()} {entry.period.split('→')[1].trim()}
{/* Expandable detail */}
setExpanded(v => !v)} style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', cursor: 'pointer', userSelect: 'none' }}> {expanded ? '▲ HIDE DETAIL' : '▼ PARAMETERS & ANALYSIS'} WALK-FORWARD VALIDATED
{expanded && (
{/* Parameters */}
PARAMETERS
{entry.params.map(([k, v], i) => (
{k} {v}
))}
{/* Analysis */}
ANALYSIS
{entry.analysis}
{/* Walk-forward note */}
WALK-FORWARD NOTE {entry.wfNote}
go('backtester')}>Run in backtester → go('methodology')}>Read methodology
)}
); } // BTC SMA 50/200 equity curve: 29 monthly data points, starts 100, ends ~1400 const BTC_CURVE = [100,118,134,109,98,115,142,168,195,212,185,210,248,310,290,320,375,420,390,440,510,580,620,590,680,760,830,910,980,1050,1140,1280,1380]; // SOL Donchian equity curve: 23 monthly data points, starts 100, ends ~870 const SOL_CURVE = [100,95,88,115,140,108,130,175,160,200,250,220,280,340,390,360,420,500,560,620,700,760,840,870]; const ENTRIES = [ { tag: 'COMPLETE', category: 'BACKTEST · TREND', date: 'APR 16, 2026', title: 'SMA 50/200 crossover — Bitcoin 2019–2026', summary: 'Classic golden/death-cross system walk-forward validated on 7.25 years of BTC daily data. Long when price is above the 200-day MA and the 50-day is above the 200-day. Flat otherwise.', period: '2019-01-01 → 2026-04-01', metrics: [ { label: 'OOS CAGR', value: '+41.2%', color: TH.green }, { label: 'SHARPE', value: '1.82', color: TH.green }, { label: 'MAX DD', value: '-28.4%', color: TH.inkSoft }, { label: 'TRADES', value: '14', color: TH.inkSoft }, { label: 'WIN RATE', value: '57%', color: TH.inkSoft }, ], curve: BTC_CURVE, params: [ ['Asset', 'BTC/USDT · Binance daily'], ['Fast MA', '50 days'], ['Slow MA', '200 days'], ['Direction', 'Long only'], ['Period', '2019-01-01 → 2026-04-01 (7.25 yr)'], ['WF windows', '3Y in-sample · 1Y out-of-sample · 6M step'], ['Fees', '0.10% per trade · 5bps slippage'], ], analysis: 'The strategy underperforms buy-and-hold on raw return (BTC buy-and-hold CAGR: +52.1%) but substantially reduces drawdown and volatility. The Sharpe of 1.82 out-of-sample is robust across the tested window steps, with no single period responsible for the result. Parameter stability is high: fast MAs from 40–60 and slow MAs from 180–220 all produce out-of-sample Sharpe above 1.4.', wfNote: 'Out-of-sample Sharpe was consistent across all 11 test windows (range: 1.41–2.14). No single window dominates the aggregate result.', }, { tag: 'COMPLETE', category: 'BACKTEST · BREAKOUT', date: 'APR 9, 2026', title: 'Donchian 20-day breakout — Solana 2022–2026', summary: 'Enter long on a new 20-day closing high. Exit on a new 10-day closing low. A trend-following system that works on high-volatility assets where trends are structurally persistent.', period: '2022-01-01 → 2026-04-01', metrics: [ { label: 'OOS CAGR', value: '+68.4%', color: TH.green }, { label: 'SHARPE', value: '1.21', color: TH.inkSoft }, { label: 'MAX DD', value: '-51.3%', color: TH.red }, { label: 'TRADES', value: '43', color: TH.inkSoft }, { label: 'WIN RATE', value: '41%', color: TH.inkSoft }, ], curve: SOL_CURVE, params: [ ['Asset', 'SOL/USDT · Binance daily'], ['Entry', 'Long on 20-day closing high'], ['Exit', 'Close on 10-day closing low'], ['Direction', 'Long only'], ['Period', '2022-01-01 → 2026-04-01 (4.25 yr)'], ['WF windows', '18M in-sample · 6M out-of-sample · 3M step'], ['Fees', '0.10% per trade · 5bps slippage'], ], analysis: 'Higher CAGR than buy-and-hold (SOL buy-and-hold CAGR: +38.7% over the same period) with a lower terminal drawdown, at the cost of significant interim drawdowns. The low win rate (41%) is characteristic of trend-following — the strategy relies on a small number of large winning trades. The out-of-sample Sharpe is acceptable but not exceptional, and the strategy shows more parameter sensitivity than the BTC SMA system. We consider it a working strategy with higher operational risk.', wfNote: '2 of 7 out-of-sample windows were negative. The two negative windows occurred in 2022 (bear market) and Q3 2024 (range-bound). Full window-by-window results available to members in the backtester.', }, ]; function Research({ go }) { const wide = useWide(); return (
{/* Breadcrumb */}
go('landing')} style={{ cursor: 'pointer', color: TH.accent }}>HOME RESEARCH
{/* Header */}
§ RESEARCH & BACKTESTS
Tested, not told.
Every strategy published here has been walk-forward validated — parameters optimized in-sample, performance measured out-of-sample. The methodology is documented. The data is available to members. Two recent examples below.
{/* Methodology callout */}
NOT SURE WHAT WALK-FORWARD MEANS? go('methodology')} style={{ fontFamily: TH.mono, fontSize: 10, color: TH.accent, letterSpacing: 1, cursor: 'pointer' }}>Read the methodology →
{/* Entries */} {ENTRIES.map((entry, i) => ( ))} {/* CTA */}
§ FULL ACCESS
The backtester is open to members.
Run these strategies yourself, modify the parameters, and see the full equity curves and trade logs. Members also get the weekly research memo and Telegram community access.
go('pricing')}>See membership → go('memo/140')}>Read a free memo
); } Object.assign(window, { Research, BacktestEntry, EquityCurve });