# Learning-loop review — 2026-10-07 1379 closed trades reviewed, 285 currently open. Proposal only — nothing here is applied automatically (CLAUDE.md §4: the AI review proposes, dan disposes). ## 1. Is overall expectancy holding? No. Expectancy is **−0.23% per trade** across 1,379 closed trades, with a win rate of 46.2% (Wilson lower bound 43.6%), payoff ratio 1.06 and profit factor 1.28. Total P&L is +$2,948 with a max drawdown of $1,698. The percent and dollar views disagree. Percent expectancy is negative while dollar P&L and profit factor are positive, because sizing differs across trades and accounts. The pooled number is also unreliable: - **Accounts:** it mixes fee-free paper accounts with live ones, and the accounts run different risk configs. - **Clustering:** QSR writes many rows per decision. The honest sample is about 81 independent QSR symbol-days over 18 sessions, not 1,379. - **Live accounts:** every live QSR book is net negative. live-1 is −0.80%/trade (n=165) and t212-isa is −0.66%/trade (n=134). Paper-main is −0.19%, but gross-positive in dollars. The sample is large enough to say the system isn't clearly profitable on a per-trade basis. It is not large enough to attribute that to any entry condition. ## 2. Biggest drag bucket Several buckets clear 20 trades: | Bucket | n | Expectancy | Total P&L | |---|--:|--:|--:| | `rsi 30-40` | 426 | −2.12% | −$2,201 | | `-10..-5% vs MA50` | 349 | −0.92% | −$752 | | `qsr` (strategy) | 1,072 | −0.39% | +$1,444 | | `stop_loss` (exit reason) | 688 | −4.76% | −$8,664 | `stop_loss` is an outcome, not a cause, so I treat `rsi 30-40` as the drag bucket. - **Gap versus the rest:** the other 953 trades average about +0.61%, so the gap is roughly 2.7pp. That is only just above the 2.48pp noise floor. - **Why I don't trust it:** the floor applies to independent symbol-days, and these are rows that share price paths. The 18 sessions are all in one regime. - **Confounds:** the bucket also mixes accounts and the calendar. Dollar P&L (−$2,201) against an overall +$2,948 mostly reflects sizing, not the signal. I'm calling this bucket unresolvable, not a finding. ## 3. Entry, exit, or regime problem? - **Entry:** MAE of winners is −2.07% against −5.23% for losers. That separation is normal for a stop-based system and doesn't point to early entries. Losers stop out around −5% (average stop-loss exit −4.76%). - **Exit:** the average MFE of losers is +1.43%. That is positive but not material, so losers mostly never worked. It does not support "the signal was right, the exit gave it back". - **Regime:** every trade with a regime label is SPY>MA200, and the rest are unknown. There is no bear-regime data, so a regime problem can't be tested. My read is a payoff problem with no clear fix. Take-profit (+4.83%) and stop (−4.76%) are symmetric, so a win rate near 46% gives about zero edge. The data can't show whether that is entry quality or exit shape. ## 4. Proposed change **NO CHANGE.** - **Entry thresholds:** `rsi 30-40` (RSI band), the MA50-distance bands and the relvol cutoffs are all entry-signal buckets. Their gaps are at or below the noise floor, so they can't be acted on. - Projected revisit for a 1.0% edge is **2026-10-21**. - Projected revisit for the realistic 0.5% edge is **2027-02-13**. - **Stop width:** widening `stopAtrMult` (currently 3) isn't supported. Losers' MFE is only +1.43% and the stop is already below the `maxStopPct` cap of 10. A wider stop mainly makes each loss bigger. - **What to do instead:** - Keep the paired anchor-vs-runner A/B running. It has a 1.27pp noise floor on 122 pairs. The current result is runner −0.96pp (CI −2.23 to +0.31), not significant. - If one non-predictive lever is wanted later, it is live-account QSR sizing. That is set per account through the overrides, not the global default. The case rests on the two live books being net negative, so I'm not proposing it now. ## 5. Open positions - **BSX:** at least 6 rows across accounts are at −7.32% and about 20–29 days old, with stops about 9% below. NFLX is at −9.08% at 8–19 days. - **Aging:** HON has held for 56 days, with other rows at 34–36 days. Many QSR rows are more than 14 days old without resolving, and there is no time-stop by design. - **Exit plans that look wrong:** - SHOP shows SL 161.07 / TP 135.42, with the target below the stop. - URI shows SL 1066.45 / TP 1062.92, also inverted. - CIEN (TP 424.06 vs SL 423.80), MELI (SL 1788.84 / TP 1801.06) and NUE (SL 243.68 / TP 247.97) have extremely narrow ranges. These look like repaired or ratcheted rows and are worth a manual check. - **Missing prices:** several rows show no unrealized P&L, including TXN, VST, IMO, the BN rows and all the crypto-trend positions. This may be a price-refresh gap. If so, protection or live-price coverage is worth checking. ## 6. QSR shadow comparison The shadow window has closed (2026-08-09 to 2026-08-23), so a fuller outcome backtest can now be requested. - **Frequency:** the legacy method produced 48 would-buy events across 18 tickers. The live newlyA method has produced 887 closed and 272 open entries across 173 tickers. That is far more frequent, though it counts rows and not buy events. - **Overlap:** 14 of the legacy method's 18 tickers also appear in newlyA's real entries. Legacy is close to a subset of newlyA, so it adds little unique selection. - **Outcomes:** none of this is outcome evidence. ## 7. t212-isa vs live-1 There is no outcome data to compare yet. The 36 overlap lines are mostly duplicated anchor and runner rows, so there are only about 18 distinct tickers. - **Entry basis:** most are within 0–0.9% of each other. - **Outliers:** IBKR (t212 higher by 2.8%), SLB (t212 lower by 2.7%) and WPM (t212 lower by 2.9%). The direction is mixed, so neither account's entries are systematically better or worse. - **Net P&L:** both live books are net negative, with live-1 at −$201.67 and t212-isa at −$36.69. Neither shows a signal advantage until enough closed trades exist on both sides. You also need to authorize the MCP servers that require sign-in (claude.ai connectors in settings, others via `/mcp`). The Datadog server failed to connect. None of that affected this review.