⚠️ Data quality checks flagged on the numbers below
WARN58/1108 resolved stock signals are quarantined (incomplete_exit, legacy, excluded from all stats)
WARN428/730 shadow-scored signals have >50% of factors on neutral-credit fallback
Full detail on Research Lab. Numbers already excluded from win-rate/backtest calculations aren't hidden here again - this banner is about what's still worth treating with caution while a FAIL is active.
Metrics Scoring Research

Two different real populations below, never blend them: journal = trades this bot's auto-trader actually executed through a broker (small, real money); signals/backtest = every signal this bot posted and tracked to a real resolved outcome, whether or not it was ever traded (much larger population, same real price data - not a simulation or a re-run against history with different parameters, see PROJECT_DOCUMENTATION.md's backtest_engine.py notes). A stock/crypto win rate from one population can differ from the other without either being wrong - they're not the same sample.

294
closed trades (journal)
51.4%
win rate (journal)
27.3%
stock win rate (journal, n=44)
55.6%
crypto win rate (journal, n=250)
578
scalp signals (backtest, 90d)
94
swing signals (backtest, 90d)
11
stock max loss streak (backtest, 90d)
12
crypto max loss streak (backtest, 90d)

Win Rate by Signal Type

SETUP swing
43.6%
GAP scalp
33.8%
PM_HIGH scalp
29.8%
CANDLE scalp
26.1%
FIB_BOUNCE scalp
13.2%
VWAP scalp
12.6%
EMA_PULL scalp
11.4%
HOD_BREAK scalp
7.9%
MOM scalp
5.4%

Every real signal type, swing and scalp together — green marks types clearing a 30% win rate, not a claim of profitability by itself, just a visual anchor since profit factor/avg win vs loss (tables below) is what actually determines that.

Known Issues

fixed

The min_rr gate checked R:R against a signal's planned entry, so a bracket order filling away from the signal price could realize a materially worse ratio than the gate cleared — confirmed live: GSAT opened at 0.49:1 despite clearing a 1.5 minimum. R:R is now re-tested at submission against a live quote, and a signal whose edge has drifted below the minimum is skipped rather than entered. The ratio each position actually got is also recorded from its real fill, so any residual slippage is measurable instead of only findable by hand.

fixed

13 of 43 closed positions (all BTC) exited on a 2-hour hold-time timeout rather than a stop or target. Root cause: crypto signals were labelled "scalp" by default, but their stops and targets are sized from daily ATR — a target sits about two daily ranges away, which two hours cannot reach. Only positions that hit their stop quickly ever resolved, and BTC, the least volatile name in the universe, mostly didn't — so the timer collected BTC. The hold limit is now derived from each position's own geometry, so a multi-day target is given a multi-day horizon instead of being closed at 120 minutes, with a longer backstop still preventing a slot being held indefinitely.

fixed

Scale-outs (a partial profit-take followed by the final close of the same position) were counted as two separate closed trades, inflating both trade count and win rate. Now grouped by position — a partial fill shows as a badge on its position's single row, not a second row.

fixed

Signal-Level Factor Research and Feature Redundancy on Research Lab were silently checking field names that don't exist in the real data (a stale key list left over from an earlier factor-consolidation change) — every real correlation/bucket read was against the wrong keys. Restored to the real shape and verified against live production data.

Publishing the defects next to the numbers is the point — a performance page that never changes its own methodology isn't being audited.

Scalp — By Signal Type (90d)

TypeResolvedWin Rate Profit FactorSharpeMax DD Avg WinAvg Loss
GAP 65 /72 logged 33.8% 0.71 -0.13 31.5% +2.50% -1.94%
PM_HIGH 47 29.8% 0.57 -0.23 21.2% +1.82% -1.35%
CANDLE 115 26.1% 0.75 -0.12 24.1% +2.24% -1.06%
FIB_BOUNCE 38 13.2% 0.42 -0.33 12.6% +1.29% -0.46%
VWAP 87 /107 logged 12.6% 0.13 -1.01 59.1% +1.22% -1.34%
EMA_PULL 35 11.4% 0.15 -0.76 23.2% +0.99% -0.85%
HOD_BREAK 38 7.9% 0.10 -1.03 29.7% +1.28% -1.11%
MOM 149 /180 logged 5.4% 0.06 -1.32 83.0% +1.34% -1.32%
BULL_FLAG 4
GAPscalp 33.8%
Resolved65/72
Profit Factor0.71
Sharpe-0.13
Max DD31.5%
Avg Win+2.50%
Avg Loss-1.94%
PM_HIGHscalp 29.8%
Resolved47
Profit Factor0.57
Sharpe-0.23
Max DD21.2%
Avg Win+1.82%
Avg Loss-1.35%
CANDLEscalp 26.1%
Resolved115
Profit Factor0.75
Sharpe-0.12
Max DD24.1%
Avg Win+2.24%
Avg Loss-1.06%
FIB_BOUNCEscalp 13.2%
Resolved38
Profit Factor0.42
Sharpe-0.33
Max DD12.6%
Avg Win+1.29%
Avg Loss-0.46%
VWAPscalp 12.6%
Resolved87/107
Profit Factor0.13
Sharpe-1.01
Max DD59.1%
Avg Win+1.22%
Avg Loss-1.34%
EMA_PULLscalp 11.4%
Resolved35
Profit Factor0.15
Sharpe-0.76
Max DD23.2%
Avg Win+0.99%
Avg Loss-0.85%
HOD_BREAKscalp 7.9%
Resolved38
Profit Factor0.10
Sharpe-1.03
Max DD29.7%
Avg Win+1.28%
Avg Loss-1.11%
MOMscalp 5.4%
Resolved149/180
Profit Factor0.06
Sharpe-1.32
Max DD83.0%
Avg Win+1.34%
Avg Loss-1.32%
BULL_FLAGscalp
Resolved4
Profit Factor
Sharpe
Max DD
Avg Win
Avg Loss

Sample-size warning applies below 30 resolved trades — treat those numbers as directional, not conclusive. "Resolved" only counts entries with a real recorded exit price — the "/N logged" figure shows how many were logged in total, including any still open or never filled.

Swing — By Signal Type (90d)

TypeResolvedWin Rate Profit FactorSharpeMax DD Avg WinAvg Loss
SETUP 78 43.6% 0.64 -0.17 26.6% +0.88% -1.12%
BREAKOUT 16
SETUPswing 43.6%
Resolved78
Profit Factor0.64
Sharpe-0.17
Max DD26.6%
Avg Win+0.88%
Avg Loss-1.12%
BREAKOUTswing
Resolved16
Profit Factor
Sharpe
Max DD
Avg Win
Avg Loss

Sample-size warning applies below 30 resolved trades — treat those numbers as directional, not conclusive. Rows under 5 show their raw count instead of a colored pill since a single trade can otherwise read as a false 0%/100%. Real swing volume is still thin compared to scalp, so profit factor/Sharpe/drawdown will often show "—" until more trades resolve.

Crypto Backtest

745
resolved (90d)
55.7%
win rate (90d)
4.31
profit factor (90d)
TypeResolvedWin Rate
MOMENTUM 210 62.4%
BREAKOUT 153 61.4%
ALT_RS 78 52.6%
VWAP 304 49.0%
MOMENTUM 62.4%
Resolved210
Win Rate62.4%
BREAKOUT 61.4%
Resolved153
Win Rate61.4%
ALT_RS 52.6%
Resolved78
Win Rate52.6%
VWAP 49.0%
Resolved304
Win Rate49.0%

Sample-size warning applies below 30 resolved trades — treat those numbers as directional, not conclusive. Rows under 5 show their raw count instead of a colored pill since a single trade can otherwise read as a false 0%/100%.

Tell us what's working, what's confusing, or what you want to see next — read by a real person, not a form that goes nowhere.