{
  "scan_date": "2026-05-15",
  "macro_notes": "TSX broadly in uptrend — most sectors above 200d EMA. Gold miners (K.TO RSI 85, sector broadly extended) and Canadian banks (CM.TO RSI 80.7, BNS.TO RSI 66.4) are overbought. No fresh swing entries survive the RSI ≤65 filter today. Energy (SU.TO) is the healthiest current position with RSI 59.45 and positive MACD. Gold at C$4820+ is driving gold miners to extreme RSI readings — watch for a sector-level cooling before adding miners. Screener access was partially limited: SwingTradeBot bullish screen (ECONNREFUSED) and TradeThatSwing (HTTP 403) were inaccessible; G&M breakouts and Barchart results were the primary data sources.",
  "signals": {
    "new_buys": [],
    "holds": [
      {
        "ticker": "SU.TO",
        "days_held": 7,
        "current_price_cad": null,
        "stop_intact": null,
        "t1_hit": null,
        "t2_hit": false,
        "action": "HOLD — conflicting price data: stockinvest.us shows $89.08 (May 11); Barchart inferred ~$113 from YTD data (unconfirmed). RSI 59.45 confirmed (healthy). MACD positive confirmed. Above 200d EMA ($68.42) confirmed. Stop $80.24 intact at both price estimates. If price ~$89: T1 ($93.80) not yet hit but progress from $87.02 entry — no time stop. If price ~$113: T1 + T2 ($100.58) both hit — exit 80% per plan. Verify current price with broker before market open."
      },
      {
        "ticker": "K.TO",
        "days_held": 4,
        "current_price_cad": 50.57,
        "stop_intact": true,
        "t1_hit": true,
        "t2_hit": false,
        "action": "HOLD — T1 HIT: price $50.57 > T1 $48.28. Exit 30% at market per T1 rule. RSI 85.15 is very overbought — tighten trailing stop on remaining 70% to just below 20d EMA (~$43.78). Next earnings Jul 29, 2026 (safe). MACD 2.74 positive."
      },
      {
        "ticker": "AGI.TO",
        "days_held": 4,
        "current_price_cad": null,
        "stop_intact": null,
        "t1_hit": false,
        "t2_hit": false,
        "action": "TIME STOP CAUTION — 4 trading days held. Last confirmed price $58.34 (May 8, pre-entry) was below entry $60.08; no price data confirmed for May 15. Next earnings Jul 29, 2026 (safe). Stop $53.25. ACTION REQUIRED: check current price at open. If price is at or below $60.08 (entry) with no movement toward T1 $66.91 → EXIT full position (3+ day time stop triggered). If price has advanced toward $66.91 → HOLD and continue monitoring."
      },
      {
        "ticker": "QSR.TO",
        "days_held": 2,
        "current_price_cad": 107.41,
        "stop_intact": null,
        "t1_hit": false,
        "t2_hit": false,
        "action": "HOLD — URGENT RISK MANAGEMENT GAP: stop_loss_cad and all targets are null in positions.json. Define stop immediately: ~$101.50 (2.5x ATR below $107.41, estimate). Set T1 ~$113, T2 ~$119 (per watchlist plan). RSI 47.88 constructive; above 200d EMA ($96.49). NOTE: position was entered at $105.33 (below watchlist trigger of $109) — reconcile entry logic. Also still listed in watchlist; remove watchlist entry once stop/targets are defined."
      }
    ],
    "exits": [],
    "watchlist": [
      {
        "ticker": "BNS.TO",
        "waiting_for": "RSI cooling below 60 (currently 66.4, above filter). Watch for pullback to 50d EMA (~$99.96 SMA-50 level). Entry valid only if: RSI 35-65, MACD still positive, price reclaims 50d EMA with volume. Above 200d EMA confirmed ($94.14)."
      },
      {
        "ticker": "AGI.TO",
        "waiting_for": "Only if time stop is confirmed triggered today: re-enters watchlist pending RSI reset and fresh pullback-to-EMA setup. Do not re-enter same day as exit."
      }
    ]
  },
  "excluded": [
    { "ticker": "INE.TO", "reason": "RSI 89 — severely overbought (filter: >65); takeover bid from CDPQ distorts technical setup" },
    { "ticker": "DOL.TO", "reason": "RSI 72 — overbought (filter: >65)" },
    { "ticker": "DR.TO", "reason": "RSI 70 — overbought (filter: >65)" },
    { "ticker": "CM.TO", "reason": "RSI 80.7 — severely overbought (filter: >65); earnings May 28 (9 days, safe) but RSI disqualifies" },
    { "ticker": "BNS.TO", "reason": "RSI 66.43 — above 65 filter; moved to watchlist pending pullback" },
    { "ticker": "TD.TO", "reason": "Insufficient confirmed RSI/MACD data; returned in screener but not enough data to score" },
    { "ticker": "RY.TO", "reason": "Insufficient confirmed RSI/MACD data; returned in screener but not enough data to score" }
  ]
}
