Skip to main content
US EQUITIES CLOSED CRYPTO 24/7
HALAL TRADING ROOM Sharia-screened signals
TERMINAL

1,993 closed trades · 51.5% win rate · paper trading

Performance

Real win rate, profit factor, Sharpe, and drawdown per scalp signal type, computed 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.

Signals tracking now
0

open signals with a live stop and target

Closed trades
1,993

every paper trade resolved and recorded, win or lose — all time, from the trade ledger, not the signal ledger

Hit rate
51.5%

over 1,993 closed trades

Average result
−$5.47

mean profit per closed trade, in dollars

Cumulative result running total of 1,993 trades with a recorded result, last 365 days · paper trading
⚠️ Data quality checks flagged on the numbers below
WARN58/3666 resolved stock signals are quarantined (incomplete_exit, legacy, excluded from all stats)
WARN436/1818 shadow-scored signals have >50% of factors on neutral-credit fallback
FAIL1 of 85 sealed order-flow archives cannot be decompressed to the end: the rows past each cut are lost and excluded from every order-flow statistic (the rows before it are read): order_flow_journal-2026-09-16.jsonl.gz (245339 bytes) - median archive is 5,138,267 bytes
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)
1,993
win rate (journal)
51.5%
stock win rate (journal)
22.7%n=110
crypto win rate (journal)
53.2%n=1883
stock net P/L (journal)
−$19,880−$181 per position
crypto net P/L (journal)
+$8,984+$5 per position
entry slippage (journal, stock)
−$5,939 0.26% avg on n=108
share of the stock loss
32%execution, not thesis
scalp signals (backtest, 90d)
1251
swing signals (backtest, 90d)
940
stock max loss streak (backtest, 90d)
31
crypto max loss streak (backtest, 90d)
28

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,430 +$7,743 +$5 52.5%
Range Bound crypto 441 +$2,401 +$5 55.6%
Trending stock 84 −$10,785 −$128 28.6%
Range Bound stock 26 −$9,095 −$350 3.8%
Unknown crypto 12 −$1,160 −$97 41.7%

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.8%n=87
MEAN_REVERSIONswing
27.7%n=852
PM_HIGHscalp
25.9%n=81
GAPscalp
21.0%n=81
CANDLEscalp
9.2%n=119
VWAPscalp
7.3%n=165
ORBscalp
4.7%n=296
EMA_PULLscalp
2.1%n=47
MOMscalp
1.1%n=355
HOD_BREAKscalp
0.0%n=94

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. Each n counts the resolved signals that carry a recorded percentage result; one resolved without it is left out rather than counted as 0%, so these rows can total fewer than the resolved count shown elsewhere on the site.

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
PM_HIGH 81 25.9% 0.330.27 net -0.51 50.2% +1.48% -1.59%
GAP 81 21.0% 0.420.37 net -0.40 54.6% +2.73% -1.72%
CANDLE 119 9.2% 0.190.16 net -0.85 73.9% +2.66% -1.45%
VWAP 165 7.3% 0.100.08 net -1.16 83.1% +1.65% -1.28%
ORB 296 4.7% 0.020.01 net -2.11 98.2% +0.57% -1.43%
EMA_PULL 47 2.1% 0.030.03 net -2.08 45.7% +2.07% -1.36%
MOM 355 1.1% 0.020.01 net -2.70 97.3% +1.72% -1.05%
HOD_BREAK 94 0.0% — -3.72 74.3% — -1.44%
BULL_FLAG 11 — — — — — —
FIB_BOUNCE 2 — — — — — —
PM_HIGHscalp 25.9%
Resolved81
Profit Factor0.330.27 net
Sharpe-0.51
Max DD50.2%
Avg Win+1.48%
Avg Loss-1.59%
GAPscalp 21.0%
Resolved81
Profit Factor0.420.37 net
Sharpe-0.40
Max DD54.6%
Avg Win+2.73%
Avg Loss-1.72%
CANDLEscalp 9.2%
Resolved119
Profit Factor0.190.16 net
Sharpe-0.85
Max DD73.9%
Avg Win+2.66%
Avg Loss-1.45%
VWAPscalp 7.3%
Resolved165
Profit Factor0.100.08 net
Sharpe-1.16
Max DD83.1%
Avg Win+1.65%
Avg Loss-1.28%
ORBscalp 4.7%
Resolved296
Profit Factor0.020.01 net
Sharpe-2.11
Max DD98.2%
Avg Win+0.57%
Avg Loss-1.43%
EMA_PULLscalp 2.1%
Resolved47
Profit Factor0.030.03 net
Sharpe-2.08
Max DD45.7%
Avg Win+2.07%
Avg Loss-1.36%
MOMscalp 1.1%
Resolved355
Profit Factor0.020.01 net
Sharpe-2.70
Max DD97.3%
Avg Win+1.72%
Avg Loss-1.05%
HOD_BREAKscalp 0.0%
Resolved94
Profit Factor—
Sharpe-3.72
Max DD74.3%
Avg Win—
Avg Loss-1.44%
BULL_FLAGscalp —
Resolved11
Profit Factor—
Sharpe—
Max DD—
Avg Win—
Avg Loss—
FIB_BOUNCEscalp —
Resolved2
Profit Factor—
Sharpe—
Max DD—
Avg Win—
Avg Loss—

Sample-size warning applies below 30 resolved trades — treat those numbers as directional, not conclusive. “net” beside a profit factor is the same figure after an assumed 15.0bps round-trip cost (spread plus price impact), which is the bar this system holds itself to: `validate_strategy` accepts or rejects a rule on the net number, not the gross one. It is an ASSUMPTION rather than a measurement — distinct from the entry slippage reported above, which is measured on real stock fills — and it is shown so a reader sees the same figure the engine judges by. “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 87 36.8% 0.270.22 net -0.44 64.0% +1.12% -2.48%
MEAN_REVERSION 852 27.7% 0.800.71 net -0.06 96.0% +3.73% -1.79%
BREAKOUT 1 — — — — — —
SETUPswing 36.8%
Resolved87
Profit Factor0.270.22 net
Sharpe-0.44
Max DD64.0%
Avg Win+1.12%
Avg Loss-2.48%
MEAN_REVERSIONswing 27.7%
Resolved852
Profit Factor0.800.71 net
Sharpe-0.06
Max DD96.0%
Avg Win+3.73%
Avg Loss-1.79%
BREAKOUTswing —
Resolved1
Profit Factor—
Sharpe—
Max DD—
Avg Win—
Avg Loss—

Sample-size warning applies below 30 resolved trades — treat those numbers as directional, not conclusive. “net” beside a profit factor is the same figure after an assumed 15.0bps round-trip cost (spread plus price impact), which is the bar this system holds itself to: `validate_strategy` accepts or rejects a rule on the net number, not the gross one. It is an ASSUMPTION rather than a measurement — distinct from the entry slippage reported above, which is measured on real stock fills — and it is shown so a reader sees the same figure the engine judges by. 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)
5452
win rate (90d)
45.3%
profit factor (90d)
2.36
TypeResolvedWin Rate
ALT_RS 1132 51.9%
BREAKOUT 1144 47.1%
MOMENTUM 1341 45.6%
VWAP 1835 40.0%
ALT_RS 51.9%
Resolved1132
Win Rate51.9%
BREAKOUT 47.1%
Resolved1144
Win Rate47.1%
MOMENTUM 45.6%
Resolved1341
Win Rate45.6%
VWAP 40.0%
Resolved1835
Win Rate40.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%.