US EQUITIES CLOSED CRYPTO 24/7
HALAL TRADING ROOM Sharia-screened signals
TERMINAL

1067 closed trades · 54.5% win rate · paper trading

Performance

Real win rate, profit factor, Sharpe, and drawdown per scalp signal type, computed fresh on every load from the actual resolved-signal log.

Why this page exists

Every signal type currently under test is published here, whether or not it actually works — nothing removed, nothing rounded up. Win rate alone doesn't determine profitability; profit factor and average win against average loss are shown alongside for exactly that reason.

Research Lab →

Paper trading. Simulated fills against real prices. No money was at risk, so these results carry no slippage or fill risk a live account would face.

⚠️ Data quality checks flagged on the numbers below
WARN58/1614 resolved stock signals are quarantined (incomplete_exit, legacy, excluded from all stats)
WARN428/998 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.

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.

closed trades (journal)
1067
win rate (journal)
54.5%
stock win rate (journal)
24.3%n=70
crypto win rate (journal)
56.6%n=997
stock net P/L (journal)
-16,932-242 per position
crypto net P/L (journal)
+34,555+35 per position
entry slippage (journal, stock)
-6,466 0.52% avg on n=68
share of the stock loss
42%execution, not thesis
scalp signals (backtest, 90d)
792
swing signals (backtest, 90d)
236
stock max loss streak (backtest, 90d)
31
crypto max loss streak (backtest, 90d)
15

By market regime, at entry

Every closed position, grouped by the market regime it was opened in.

Regime at entryAsset PositionsNet P/L Per positionWin rate
Trending crypto 1,302 +28,519 +22 67.9%
Range Bound crypto 374 +7,197 +19 74.3%
Trending stock 60 -10,089 -168 28.3%
Unknown crypto 12 -1,160 -97 41.7%
Range Bound stock 10 -6,843 -684 0.0%

The regime is read from SPY's own trend structure and is applied to every position opened in that window, including crypto — which is a framing, not a claim about the coin. Rows are ordered by population, because a bucket of eight and a bucket of seven hundred are not equally informative. Regime snapshots are taken periodically, so each position takes the most recent reading at or before its entry; anything opened before the first snapshot is counted as unknown rather than assigned to the nearest one.

Win Rate by Signal Type

Every type that has resolved at least one trade, swing and scalp together. The dashed line marks 30%, a visual anchor only.

SETUPswing
36.2%n=94
GAPscalp
27.3%n=77
MEAN_REVERSIONswing
24.2%n=128
PM_HIGHscalp
21.9%n=64
CANDLEscalp
20.0%n=140
FIB_BOUNCEscalp
12.8%n=39
VWAPscalp
11.3%n=124
EMA_PULLscalp
9.1%n=44
HOD_BREAKscalp
4.2%n=72
MOMscalp
2.7%n=224

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 77 /79 logged 27.3% 0.59 -0.23 36.6% +2.92% -1.85%
PM_HIGH 64 21.9% 0.34 -0.47 38.9% +1.78% -1.46%
CANDLE 140 /142 logged 20.0% 0.44 -0.35 53.2% +2.05% -1.16%
FIB_BOUNCE 39 12.8% 0.39 -0.36 13.7% +1.29% -0.48%
VWAP 124 /125 logged 11.3% 0.14 -0.97 72.3% +1.48% -1.34%
EMA_PULL 44 9.1% 0.10 -0.94 32.8% +0.99% -0.99%
HOD_BREAK 72 /74 logged 4.2% 0.05 -1.56 56.0% +1.28% -1.24%
MOM 224 /228 logged 2.7% 0.03 -1.66 92.4% +1.38% -1.21%
BULL_FLAG 8 — — — — — —
GAPscalp 27.3%
Resolved77/79
Profit Factor0.59
Sharpe-0.23
Max DD36.6%
Avg Win+2.92%
Avg Loss-1.85%
PM_HIGHscalp 21.9%
Resolved64
Profit Factor0.34
Sharpe-0.47
Max DD38.9%
Avg Win+1.78%
Avg Loss-1.46%
CANDLEscalp 20.0%
Resolved140/142
Profit Factor0.44
Sharpe-0.35
Max DD53.2%
Avg Win+2.05%
Avg Loss-1.16%
FIB_BOUNCEscalp 12.8%
Resolved39
Profit Factor0.39
Sharpe-0.36
Max DD13.7%
Avg Win+1.29%
Avg Loss-0.48%
VWAPscalp 11.3%
Resolved124/125
Profit Factor0.14
Sharpe-0.97
Max DD72.3%
Avg Win+1.48%
Avg Loss-1.34%
EMA_PULLscalp 9.1%
Resolved44
Profit Factor0.10
Sharpe-0.94
Max DD32.8%
Avg Win+0.99%
Avg Loss-0.99%
HOD_BREAKscalp 4.2%
Resolved72/74
Profit Factor0.05
Sharpe-1.56
Max DD56.0%
Avg Win+1.28%
Avg Loss-1.24%
MOMscalp 2.7%
Resolved224/228
Profit Factor0.03
Sharpe-1.66
Max DD92.4%
Avg Win+1.38%
Avg Loss-1.21%
BULL_FLAGscalp —
Resolved8
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 94 36.2% 0.28 -0.41 61.2% +1.05% -2.15%
MEAN_REVERSION 128 /134 logged 24.2% 1.06 0.02 37.8% +3.60% -1.09%
BREAKOUT 14 — — — — — —
SETUPswing 36.2%
Resolved94
Profit Factor0.28
Sharpe-0.41
Max DD61.2%
Avg Win+1.05%
Avg Loss-2.15%
MEAN_REVERSIONswing 24.2%
Resolved128/134
Profit Factor1.06
Sharpe0.02
Max DD37.8%
Avg Win+3.60%
Avg Loss-1.09%
BREAKOUTswing —
Resolved14
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

resolved (90d)
2858
win rate (90d)
55.8%
profit factor (90d)
5.76
TypeResolvedWin Rate
ALT_RS 541 68.0%
MOMENTUM 661 57.9%
BREAKOUT 702 56.6%
VWAP 954 46.9%
ALT_RS 68.0%
Resolved541
Win Rate68.0%
MOMENTUM 57.9%
Resolved661
Win Rate57.9%
BREAKOUT 56.6%
Resolved702
Win Rate56.6%
VWAP 46.9%
Resolved954
Win Rate46.9%

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.