Methodology edge-court-1.0 · calibrated:false
Every verdict follows the rules on this page. Thresholds are stated design values, not fitted to a benchmark. Every number in a report comes from the caller's real trades or real market data.
Verdicts
| Verdict | Rule |
|---|---|
| ROBUST EDGE | score >= 75 AND full_history_edge, statistical_significance, temporal_stability pass AND parameter_robustness passes when applicable |
| CURVE-FIT | profitable on full history, but a parameter-spike pattern or a non-positive walk-forward out-of-sample result shows the profit depends on the exact settings |
| FRAGILE EDGE | profitable on full history but fails one or more robustness requirements |
| NO EDGE | not profitable on full history |
| NOT ENOUGH DATA | too few trades or too short a span to judge |
Gates
| INSUFFICIENT_DATA | fewer than 30 closed trades, or less than 365 days between first entry and last exit |
|---|---|
| NO_EDGE | full-history net profit <= 0 or profit factor < 1.0 |
Scored checks
| Check | Weight | Pass rule |
|---|---|---|
full_history_edge | 20 | full-history profit factor >= 1.10 and net profit > 0 |
statistical_significance | 15 | Probabilistic Sharpe Ratio (per-trade, vs 0) >= 0.95 |
temporal_stability | 15 | >= 60% of 5 chronological folds are net-profitable AND >= 60% of calendar years with >= 5 trades are net-profitable |
monte_carlo | 10 | stationary block bootstrap probability of net <= 0 is <= 10% |
regime_breadth | 10 | profit factor > 1 in at least 2 trend regimes (BULL/BEAR/RANGE) that each hold >= 10 trades; skipped without price history |
parameter_robustness | 15 | >= 70% of +/-10-20% input perturbations keep profit factor > 1 and no isolated-peak (spike) pattern; skipped for trade-list audits |
walk_forward | 0 | informational unless parameter sweep exists: anchored walk-forward out-of-sample net must be > 0 (failure forces CURVE_FIT) |
profit_not_concentrated | 5 | final 10% of the time span contributes < 50% of net profit |
not_underwater | 5 | cumulative P&L is below zero on < 50% of trades |
win_rate_vs_payoff | 5 | win rate exceeds the payoff-implied breakeven win rate by >= 3 percentage points |
Score = weighted share of applicable checks passed. Checks that cannot apply (no price history, no parameters) are dropped from the denominator, never counted as passes.
Statistics
| profit factor | gross profit / gross loss over closed trades (net of the commissions applied by the strategy or platform). |
|---|---|
| snapshot window | Rolling calendar windows stepped daily; window length holds ~12 trades on average (min 28 days, max 1/3 of history); windows need >= 8 trades. The best window by PF is the "snapshot"; share_of_windows_pf_ge_2 is how often a random snapshot would have looked like a monster. |
| psr | Probabilistic Sharpe Ratio, Bailey & Lopez de Prado (2012), per-trade Sharpe vs 0 with skew/kurtosis correction. |
| dsr | Deflated Sharpe Ratio, Bailey & Lopez de Prado (2014): expected max Sharpe under the null across N trials. N = completed sweep settings + caller-declared prior trials; variance from the sweep when available. |
| min trl | Minimum track record length (trades) for 95% confidence that the true Sharpe > 0. |
| folds | 5 chronological folds with equal trade counts. |
| walk forward | Anchored, 5 equal time folds; at each step the setting (base or sweep) with max in-sample net profit is applied to the next fold. Uses only already-computed real runs. |
| parameter sweep | Up to 4 numeric strategy inputs (visual/display inputs excluded) perturbed by x0.8, x0.9, x1.1, x1.2 (ints rounded, min/max respected). |
| bootstrap | 5000 iterations, deterministic seed from the trade P&L; iid and stationary block (mean block length = cube root of trade count). |
| cost stress | Net and PF after subtracting 5/10/25% of the median absolute trade P&L from every trade; breakeven extra cost = mean trade P&L. |
Regimes
| trend | Daily close vs SMA(100); SMA slope over 20 days. BULL: close>SMA and slope>0. BEAR: close<SMA and slope<0. RANGE: otherwise. |
|---|---|
| volatility | 20-day realized volatility of daily log returns, split into sample terciles (LOW/MID/HIGH). |
| lookahead | A trade is labelled with the regime of its entry day, computed from data up to the previous daily close. |
| warmup_days | 120 |
Data
Binance spot klines via https://data-api.binance.vision (public market-data mirror). Only closed bars. SHA-256 of the exact bars is in every receipt. Caller-supplied OHLC CSV, hashed into the receipt; provenance is the caller's. Bar cap: 30000.
Execution
Pine runs in PineTS (AGPL-3.0, LuxAlgo) inside a sandboxed Node child process (permission model: no fs writes, no child processes; network globals removed; memory cap; hard time budget).
Receipts
Every audit returns an Ed25519 signature over a canonical JSON receipt (verdict, score, key metrics, input hashes, data hash, report hash). Public key: /.well-known/edge-court-keys.json.
Limits
- A backtest audit is evidence about the past, not a forecast and not financial advice.
- Thresholds are stated design values, not fitted (calibrated:false).
- PineTS is not TradingView; fills can differ slightly from TradingView's broker emulator.
- Regime labels are a transparent heuristic (SMA100 slope + realized-vol terciles), not a market-structure model.
- Trade-list audits trust the uploaded P&L; they cannot test parameters.