# Learning-loop review — 2026-08-20 262 closed trades reviewed, 175 currently open. Proposal only — nothing here is applied automatically (CLAUDE.md §4: the AI review proposes, dan disposes). ## 1. Is overall expectancy holding? Yes — overall expectancy is **+1.73% per trade** across **262 closed trades**, well above the ~20-trade minimum, with profit factor 2.25 and Wilson lower bound on win rate at 65.6%. The number looks solid, but it's worth flagging that this pools three accounts with materially different risk configs (paper-main 224 trades, Paper02qsr 14, live-1 24) — it's not a single controlled experiment, just a reasonable aggregate read. ## 2. Which bucket is the biggest drag? Several buckets clear 20 trades. The clearest drag is the **`stop_loss` exit-reason bucket**: n=66, win rate 1.5% (Wilson low 0.3%), expectancy **-4.07%**, profit factor **0.02**, total P&L **-$2,235** — by far the largest negative dollar contribution in the whole journal (versus the overall total of +$2,983). By strategy, **orb-v1** (n=61) is also a drag at expectancy ~0.01% and PF 0.92 (net -$60), i.e. it's not adding anything after 61 trades. ## 3. Entry, exit, or regime problem? This reads as an **entry/stop-placement problem, not an exit problem**. Overall MFE-of-losers is only **0.65%** — small, so losers are not "working trades we gave back" (that pattern would show up as a materially positive avgMfeLosersPct per the doc's own threshold). Instead, MAE of losers averages **-3.89%**, which sits very close to qsr's flat `hardSellPct` of 4%. That's consistent with the doc's exact diagnostic: *"losers with low MAE that hit the stop → the stop is tighter than the natural noise of the name."* The per-symbol table backs this up — several qsr symbols with 0% win rate and steep negative expectancy (NXPI -8.95%, RKLB -8.08%, MO -5.97%, EBAY -6.82%, ITUB -5.28%, HDB -4.60%) look like higher-volatility names getting clipped by the fixed 4% hard-sell before the ATR-scaled stop (`stopAtrMult`) would ever bind. No regime signal stands out — SPY>MA200 expectancy (1.81%, n=184) is in line with the overall number, so this isn't a bull/bear split issue. ## 4. Proposed parameter change **qsr.hardSellPct: 4 → 5** (one step, small change). Reasoning: MAE-of-losers (-3.89%) sits almost exactly at the current 4% hard floor, suggesting the flat hard-sell is frequently the binding constraint rather than the ATR-based stop, on names whose natural noise exceeds 4%. Loosening this single fixed floor by one point gives the ATR-scaled stop (`stopAtrMult`/`maxStopPct`) more room to actually do the differentiating work it's designed for, without touching the ATR logic itself. This is the smallest single lever that targets the exact number that's showing up in the data. Everything else (stopAtrMult, maxStopPct, risk ladder tiers) stays untouched so any change in outcome is attributable to this one lever, per rule 2/4 — judged only on trades placed after the change. ## 5. Notable open positions (context only, not evidence for #4) - Several qsr positions have been open **29.3 days** (HDB ×2 at -3.22%, TXN ×2 at -7.76%) with **no calendar time-stop** (`maxHoldDays: null` for qsr) — these are aging deep underwater with nothing forcing resolution. - TXN (-7.76%) is the most underwater open position in the book right now. - Several other multi-tranche positions (HON -6.02%, NKE -2.09%, APH -2.05%, STM -4.48%) are stacking size while unresolved for 8–15 days. - The crypto-trend-v1 BTC/ETH positions have also been open 30.2 days with no time-stop. This is purely situational color — none of it is used to justify the change in #4 since these trades have no confirmed outcome yet. ## 6. QSR shadow comparison note The shadow window (legacy isTriggered+isBuy/buyZonePct logic) is **still running, ending 2026-08-23**, so it isn't closed and can't yet support a full outcome backtest request — that should wait until the window ends. Qualitatively, though, the two selection methods look like they're picking largely **different books**: only 10 tickers overlap (AEP, SU, COHR, TRP, BTI, ENB, NKE, ITUB, EBAY, VALE) out of 18 legacy tickers and 27 real (`newlyA`) tickers — meaning the legacy method would have missed 17 of the names the live method actually traded, and the live method skipped 8 names the legacy method would have flagged (DDOG, IBKR, MO, AZN, MAR, TDG, MRVL, SNDK). Frequency also looks very different: legacy logged only 48 would-buy events total in the window, versus 37 closed + 126 open real entries from the live method over the same period — the new method is firing substantially more often. Worth watching once the window closes, but not something to act on yet, and explicitly not evidence for the point-4 proposal.