# Learning-loop review — 2026-08-24 294 closed trades reviewed, 167 currently open. Proposal only — nothing here is applied automatically (CLAUDE.md §4: the AI review proposes, dan disposes). ## 1. Is overall expectancy holding? Pooled expectancy is **+1.68% per trade** over **294 closed trades**, profit factor 2.21. That n clears the ~20-trade bar for a headline number, so yes — the pooled edge looks real, not noise (Wilson lower bound on win rate is 62.8%, still comfortably above a coin flip). Caveat that has to be said out loud: this pools three accounts with *different risk configs* (paper-main, Paper02qsr, live-1), and 205/294 trades are `qsr`, which dominates the pooled number. The live-1 account only has 28 closed trades and is price-biased (small notional cap), so it can't independently confirm this — treat the pooled 1.68% as mostly a paper-account result so far. ## 2. Biggest drag bucket (≥20 trades) Several buckets clear n≥20 with negative or near-zero expectancy: | Bucket | n | Expectancy | PF | Total P&L | |---|---|---|---|---| | **rsi 30-40** | 42 | **-0.44%** | 0.55 | -$273 | | orb-v1 (strategy) | 65 | -0.03% | 0.89 | -$91 | | relvol 0.8-1.2 | 22 | -0.13% | 0.75 | -$57 | | -10..-5% vs MA50 | 43 | +0.07% | 1.08 | +$40 | The **RSI 30-40 entry band** is the clearest, most actionable drag: negative expectancy, PF well under 1, and it sits directly adjacent to the RSI 40-50 band, which is by far the *best* bucket in the whole report (n=89, expectancy +3.25%, PF 4.69). That contrast — not just an absolute loss — is what makes it stand out as a real, comparison-backed signal rather than one bad bucket in isolation. (orb-v1 is also a legitimate drag at the strategy level but is closer to breakeven than actually losing.) ## 3. Entry, exit, or regime problem? This is an **entry problem**, not an exit problem, based on the aggregate MAE/MFE numbers we have (the report doesn't break MAE/MFE out per RSI band, so this is inferred from the overall pattern, not band-specific data): - **MAE losers avg -4.02%** vs **MAE winners avg -1.59%** — losers give back nearly 2.5x more before failing than winners ever go underwater. That's the classic signature of the entry point itself being marginal (not enough confirmation), not of stops being mis-set relative to noise. - **MFE losers avg 0.77%** is small — losing trades weren't running up meaningfully before reversing. This rules out an exit/take-profit problem (we'd expect a much larger avgMfeLosersPct, e.g. "up 3%, exited -2%," if the fix were in exits). The signal quality itself, at this RSI band, is the issue. Nothing here points to a regime problem — the SPY>MA200 bucket (n=212) looks statistically similar to the overall pool, so this isn't a bull/bear gating issue. ## 4. Proposed parameter change **Param:** `swing-dip-v1.maxRsi14` **Current:** `40` **Proposed:** `35` Reasoning: this is the one live-wired dial that gates entries by RSI14, and it currently permits the entire 30-40 band, which is the worst-performing RSI bucket in the journal (expectancy -0.44%, PF 0.55) sitting right next to the best one (40-50, PF 4.69). Tightening the ceiling from 40 to 35 trims off roughly the lower half of that weak band without touching the strong 40-50 band or any other strategy's logic — a small, single-lever, reversible change we can measure against post-change trades only. (Caveat for the human reviewer: the RSI-band cut is pooled across all strategies, not swing-dip-v1 alone, so we can't be certain how many of the 42 rsi-30-40 trades were swing-dip entries specifically vs. qsr/orb entries that aren't affected by this param. Worth checking that split before applying, but as a directional first move this is the correct lever.) ## 5. Notable open positions - **QSR / HDB**: 4 open lots, all -2.39%, held 25-33 days — aging without resolving, and `qsr.maxHoldDays` is `null`, so there's no time-stop to force a decision. - **QSR / ETR**: 4 lots at -1.99%, held 19-24 days, same "no calendar time-stop" exposure. - **QSR / HON**: multiple lots at -6.69%, ~12 days held — the single worst unrealized position by %, worth a human look sooner rather than later. - **QSR / ARM, STM**: deeply underwater (-4.80%, -6.65%) but only ~5 days held, less urgent than HDB/ETR/HON's staleness. - Broadly: qsr has a *large* number of open positions (150+) relative to its 205 closed trades, and with `maxHoldDays: null` there's nothing capping how long a loser can sit open. This is situational color, not a factor in point 4's proposal. ## 6. QSR shadow comparison note The shadow-log window (2026-08-09 → 2026-08-23) is now closed. Qualitatively: the legacy isTriggered+isBuy/buyZonePct method fired 48 times across 18 tickers, while the live newlyA method produced 53 closed + 129 open entries across 28 tickers — newlyA is both more prolific and covers a meaningfully broader universe. Only 10 tickers overlap between the two methods' picks (AEP, SU, COHR, TRP, BTI, ENB, NKE, ITUB, EBAY, VALE), meaning the two selection logics are picking largely *different* names, not just differently-timed entries on the same names. This is worth flagging as a real qualitative divergence worth digging into — a fuller backtest comparing hypothetical shadow outcomes to real newlyA outcomes can now be requested given the window is closed. This is observational only and is not used as evidence for point 4.