{
  "scan_date": "2026-04-29",
  "macro_notes": "TSX had 21 stocks on positive technical breakout list vs 18 negative breakouts on April 28. Uranium/energy sector showing strength (CCO surged on Q1 2026 earnings beat) but broadly overbought. Industrials and tech names mixed — BYD deeply oversold (RSI 26), SJ below 200d MA, OTEX has earnings April 30. Energy royalties (PSK) below 200d MA with negative MACD. Only Finning (FTT) clears all hard Step 3 filters; MACD at -0.07 not yet positive but 1-week signal turning bullish — sits on watchlist. 6 candidates screened with confirmed current data; 0 passed all filters to qualify as new buys. No open positions to review.",
  "signals": {
    "new_buys": [],
    "holds": [],
    "exits": [],
    "watchlist": [
      {
        "ticker": "FTT",
        "waiting_for": "MACD histogram to turn positive (currently -0.07; 1-week technical signal turning bullish). RSI 47.45 passes 35-65 filter. Price CA$90.72 is +24.26% above 200-day EMA. Earnings May 12, 2026 (9 trading days away). Sector: Industrials (Caterpillar equipment dealer). Re-evaluate when MACD crosses above zero — at that point score would reach 3-4 and qualify for NEW_BUY."
      }
    ]
  },
  "excluded": [
    {
      "ticker": "OTEX",
      "reason": "Earnings April 30, 2026 — within 3 trading days of scan date"
    },
    {
      "ticker": "CCO",
      "reason": "RSI overbought (>65); price $159.19 CAD; Q1 2026 results reported April 28"
    },
    {
      "ticker": "PSK",
      "reason": "Price below 200-day EMA (sell signal from both short- and long-term MAs); MACD histogram negative (-0.20)"
    },
    {
      "ticker": "SJ",
      "reason": "Price (~$84.42) below 200-day MA resistance (~$90.37); MACD sell signal from 3-month indicator"
    },
    {
      "ticker": "BYD",
      "reason": "RSI 14-day at 26.42 — below 35 threshold (deeply oversold); fails hard RSI filter"
    },
    {
      "ticker": "INE",
      "reason": "RSI 89 — overbought (>65); appeared on Globe and Mail positive breakouts list"
    },
    {
      "ticker": "DOL",
      "reason": "RSI 72 — overbought (>65); appeared on Globe and Mail positive breakouts list"
    },
    {
      "ticker": "DR",
      "reason": "RSI 70 — overbought (>65); appeared on Globe and Mail positive breakouts list"
    }
  ]
}
